All Products
Search
Document Center

ApsaraDB RDS:Integrasi dan komputasi data multipihak

Last Updated:Jul 02, 2025

Fitur basis data selalu rahasia dapat digunakan untuk integrasi dan komputasi data multipihak. Fitur ini memungkinkan pemilik data memberikan otorisasi kepada pihak ketiga untuk menggunakan data dalam komputasi, membantu memenuhi kebutuhan berbagai skenario seperti pemasaran bersama.

Skema

Sebagai contoh, perusahaan platform data mendapatkan izin yang diperlukan untuk menggunakan data pengguna yang dikumpulkan melalui platformnya. Setelah data pengguna terkumpul, platform data tersebut menghasilkan tabel potret pengguna berdasarkan data yang telah dikumpulkan. Kemudian, perusahaan platform data memberikan otorisasi kepada pihak ketiga, seperti perusahaan asuransi, untuk menggunakan data tersebut dalam integrasi dan komputasi data multipihak serta melaksanakan pemasaran bersama.

telepon

usia

memiliki_mobil

konsumsi_tahunan

13900001111

29

N

20000

13900002222

34

Y

10000

Catatan

Data pada tabel di atas hanya untuk referensi.

Perusahaan asuransi ingin menggunakan data yang dikumpulkan oleh perusahaan platform data untuk mengembangkan pengguna potensial. Sebagai contoh, perusahaan asuransi ingin menawarkan asuransi kendaraan kepada pemilik mobil.

Saat melakukan kueri gabungan, perhatikan hal-hal berikut:

  • Izin yang diperlukan belum diperoleh. Dalam kasus ini, pernyataan SQL untuk kueri gabungan gagal, dan pesan yang menunjukkan tidak ada izin yang diperlukan akan ditampilkan.

  • Otorisasi kueri daftar kontrol perilaku (BCL) dikeluarkan. Dalam kasus ini, pernyataan SQL untuk kueri gabungan berhasil, dan hasil kueri dikembalikan dalam bentuk teks terenkripsi.

  • Otorisasi dekripsi BCL dikeluarkan. Dalam kasus ini, pihak yang berwenang dapat mendekripsi hasil yang dikembalikan untuk mendapatkan hasil dalam teks biasa.

Prasyarat

Dalam topik ini, perusahaan asuransi yang dijelaskan dalam topik "Perlindungan privasi" digunakan untuk mengilustrasikan integrasi dan komputasi data multipihak. Anda harus menyelesaikan konfigurasi berdasarkan instruksi yang disediakan di Perlindungan Privasi.

Contoh

Perusahaan platform data

  1. Buat pengguna dan tabel untuk basis data sebagai administrator basis data (DBA).

    -------- Buat pengguna. --------
    -- Perusahaan platform data
    CREATE USER ly;
    -- Buat tabel potret pengguna untuk perusahaan platform data.
    CREATE TABLE portrait (
        phone enc_text,
        age enc_int4,
        have_car enc_text,
        annual_consume enc_int8
    );
    -- Berikan otorisasi kepada perusahaan platform data untuk mengakses tabel data.
    GRANT ALL ON portrait TO ly;
  2. Daftarkan akun dengan perusahaan platform data.

    Catatan

    Alat EncDB secara otomatis menghasilkan pernyataan SQL berdasarkan parameter input. Anda harus menjalankan pernyataan SQL yang dihasilkan di basis data.

    ./genEncdbSQLCommand.sh -r MEK_PROVISION --mek sample/default_mek_ly.bin -e default_enclave_public_key.pem -c ${cipher_suite}
    
    # Dapatkan ID dari kunci enkripsi utama (MEK) perusahaan platform data. Anda dapat menjalankan pernyataan SELECT encdb_get_current_mek_id(); untuk mendapatkan ID.
    # Dalam contoh ini, 6953973016013340672 digunakan.
    mekid_ly = 6953973016013340672
    ./genEncdbSQLCommand.sh -r BCL_REGISTER --mekid ${mekid_ly} --mek sample/default_mek_ly.bin --puk sample/usr_puk_ly.pem --pri sample/usr_pri_ly.pem -c ${cipher_suite}
  3. Perusahaan platform data membuat kunci enkripsi untuk tabel potret pengguna.

    Catatan
    -- Buat kunci enkripsi data (DEK) dan catat ID grup, seperti fd89d386-ee00-4e0e-9e5f-66efb4c124aa.
    SELECT encdb.dek_generate(encdb.keyname_generate('ly','demo','public','portrait','phone'));
    
    -- Ini hanya contoh. Semua kolom berbagi DEK yang sama.
    SELECT encdb.dek_copy_keyname(encdb.keyname_generate('ly','demo','public','portrait','age'),encdb.keyname_generate('ly','demo','public','portrait','phone'));
    SELECT encdb.dek_copy_keyname(encdb.keyname_generate('ly','demo','public','portrait','have_car'),encdb.keyname_generate('ly','demo','public','portrait','phone'));
    SELECT encdb.dek_copy_keyname(encdb.keyname_generate('ly','demo','public','portrait','annual_consume'),encdb.keyname_generate('ly','demo','public','portrait','phone'));

    Dalam kebanyakan kasus, Anda tidak dapat menjalankan pernyataan SQL untuk mengenkripsi data. Hal ini membantu memastikan keamanan. Anda harus diberi otorisasi untuk mengenkripsi data.

    1. Edit BCL untuk memperbarui ruang lingkup otorisasi (termasuk ID grup) dari DEK ke BCL.

      ./setGroupIdBCL.sh -l fd89d386-ee00-4e0e-9e5f-66efb4c124aa
      Catatan

      fd89d386-ee00-4e0e-9e5f-66efb4c124aa hanya untuk referensi. Untuk mendapatkan nilai sebenarnya, Anda dapat menjalankan pernyataan berikut:

      SELECT encdb.dek_generate(encdb.keyname_generate('ly','demo','public','portrait','phone'));
    2. Keluarkan BCL.

      ./genEncdbSQLCommand.sh -r BCL_ISSUE --subject_sign --spriv sample/usr_pri_ly.pem --spuk sample/usr_puk_ly.pem --ipuk sample/usr_puk_ly.pem --bcl sample/bcl_for_ly_insert.txt -c ${cipher_suite}
      ./genEncdbSQLCommand.sh -r BCL_ISSUE --issuer_sign --ipriv sample/usr_pri_ly.pem --spuk sample/usr_puk_ly.pem --ipuk sample/usr_puk_ly.pem --bcl sample/bcl_for_ly_insert.txt -c ${cipher_suite}
  4. Perusahaan platform data menulis data.

    Catatan

    Anda harus menjalankan pernyataan berikut sebagai pengguna ly.

    INSERT INTO portrait VALUES(encdb.enc_text_encrypt('13900001111',encdb.keyname_generate('ly','demo','public','portrait','phone')),
                                encdb.enc_int4_encrypt('29',encdb.keyname_generate('ly','demo','public','portrait','age')),
                                encdb.enc_text_encrypt('N',encdb.keyname_generate('ly','demo','public','portrait','have_car')),
                                encdb.enc_int8_encrypt('2',encdb.keyname_generate('ly','demo','public','portrait','annual_consume')));
    INSERT INTO portrait VALUES(encdb.enc_text_encrypt('13900002222',encdb.keyname_generate('ly','demo','public','portrait','phone')),
                                encdb.enc_int4_encrypt('34',encdb.keyname_generate('ly','demo','public','portrait','age')),
                                encdb.enc_text_encrypt('Y',encdb.keyname_generate('ly','demo','public','portrait','have_car')),
                                encdb.enc_int8_encrypt('1',encdb.keyname_generate('ly','demo','public','portrait','annual_consume')));

Perusahaan asuransi

Untuk menawarkan asuransi kendaraan kepada pemilik mobil, departemen penjualan perusahaan asuransi memulai kueri gabungan:

SELECT * FROM person ps JOIN portrait pt ON ps.phone = pt.phone WHERE hava_car = 'Y';
  1. Berikan izin enkripsi kepada departemen penjualan perusahaan asuransi.

    1. Edit BCL untuk memperbarui ruang lingkup otorisasi (termasuk ID grup) dari DEK ke BCL.

      ./setGroupIdBCL.sh -s 7903d109-f3e0-4f3e-b815-3682cb8bd6db
      Catatan

      7903d109-f3e0-4f3e-b815-3682cb8bd6db hanya untuk referensi. Departemen penjualan menggunakan kunci default untuk mengenkripsi data. Untuk mendapatkan ID grup, Anda dapat menjalankan pernyataan berikut:

      Dapatkan ID MEK akun departemen penjualan, seperti 2715553450389700608.
      SELECT encdb_get_current_mek_id(); 
      
      # Dapatkan ID grup.
      SELECT groupid FROM encdb.encdb_internal_dek_table WHERE mekid = 2715553450389700608;
    2. Keluarkan BCL.

    ./genEncdbSQLCommand.sh -r BCL_ISSUE --subject_sign --spriv sample/usr_pri_sale.pem --spuk sample/usr_puk_sale.pem --ipuk sample/usr_puk_sale.pem --bcl sample/bcl_for_sale_insert.txt -c ${cipher_suite}
    ./genEncdbSQLCommand.sh -r BCL_ISSUE --issuer_sign --ipriv sample/usr_pri_sale.pem --spuk sample/usr_puk_sale.pem --ipuk sample/usr_puk_sale.pem --bcl sample/bcl_for_sale_insert.txt -c ${cipher_suite}
  2. Departemen penjualan perusahaan asuransi menanyakan data.

    • Departemen penjualan tidak diberi otorisasi oleh perusahaan platform data untuk menggunakan data perusahaan platform data.

      Catatan

      Anda harus menjalankan pernyataan berikut sebagai pengguna ins_sale.

      SELECT * FROM person ps JOIN portrait pt ON ps.phone = pt.phone WHERE pt.have_car = encdb.enc_text_encrypt('Y',encdb.keyname_generate('ins_sale','demo', Null, Null, Null));
       WARNING:  -- encdb -- -- Log tidak terpercaya -- 4 - src/core/untrusted/src/encdb_untrusted_enclave.cpp,256,encdb_ecall: Select BCL (subject_mekid: 2715553450389700608, issuer_mekid: 6953973016013340672) dari tabel gagal - dikembalikan 0xfa030000
       ERROR:  pg_enc_cmp_eq: jenis terenkripsi sama errno: fa030000
      Catatan

      Jika pesan kesalahan ERROR: permission denied for table portrait ditampilkan, Anda dapat menjalankan pernyataan GRANT SELECT ON portrait TO ins_sale; untuk memberikan izin akses pada tabel.

    • Departemen penjualan perusahaan asuransi mendapatkan izin yang diperlukan dari perusahaan platform data dan departemen data perusahaan platform data. Kemudian, departemen penjualan perusahaan asuransi menggunakan data perusahaan platform data.

      1. Departemen penjualan mengajukan permohonan otorisasi dari perusahaan platform data. Perusahaan platform data meninjau dan menyetujui aplikasi tersebut lalu mengeluarkan otorisasi.

        # Departemen penjualan mengajukan permohonan otorisasi: Tanda tangan subjek.
        ./genEncdbSQLCommand.sh -r BCL_ISSUE --subject_sign --spriv sample/usr_pri_sale.pem --spuk sample/usr_puk_sale.pem --ipuk sample/usr_puk_ly.pem --bcl sample/bcl_ly_for_sale_select.txt -c ${cipher_suite}
        # Perusahaan platform data meninjau dan menyetujui aplikasi lalu mengeluarkan otorisasi BCL: Tanda tangan penerbit.
        ./genEncdbSQLCommand.sh -r BCL_ISSUE --issuer_sign --ipriv sample/usr_pri_ly.pem --spuk sample/usr_puk_sale.pem --ipuk sample/usr_puk_ly.pem --bcl sample/bcl_ly_for_sale_select.txt -c ${cipher_suite}
      2. Departemen penjualan mengajukan permohonan otorisasi dari departemen data perusahaan platform data. Departemen data meninjau dan menyetujui aplikasi tersebut lalu mengeluarkan otorisasi.

        # Departemen penjualan mengajukan permohonan otorisasi: Tanda tangan subjek.
        ./genEncdbSQLCommand.sh -r BCL_ISSUE --subject_sign --spriv sample/usr_pri_sale.pem --spuk sample/usr_puk_sale.pem --ipuk sample/usr_puk_data.pem --bcl sample/bcl_data_for_sale_select.txt -c ${cipher_suite}
        # Departemen data meninjau dan menyetujui aplikasi lalu mengeluarkan otorisasi BCL: Tanda tangan penerbit.
        ./genEncdbSQLCommand.sh -r BCL_ISSUE --issuer_sign --ipriv sample/usr_pri_data.pem --spuk sample/usr_puk_sale.pem --ipuk sample/usr_puk_data.pem --bcl sample/bcl_data_for_sale_select.txt -c ${cipher_suite}
      3. Departemen penjualan dapat menjalankan kueri gabungan dengan benar dan mendapatkan hasil kueri dalam bentuk teks terenkripsi.

        Catatan

        Anda harus menjalankan pernyataan berikut sebagai pengguna ins_sale.

        SELECT * FROM person ps JOIN portrait pt ON ps.phone = pt.phone WHERE pt.have_car = encdb.enc_text_encrypt('Y',encdb.keyname_generate('ins_sale','demo', Null, Null, Null));
        -- Jalankan kueri gabungan dan dapatkan hasil kueri dalam bentuk teks terenkripsi.