すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:マルチパーティのデータ统合とコンピューティング

最終更新日:Jan 16, 2024

完全に暗号化されたデータベース機能は、マルチパーティデータの統合とコンピューティングに使用できます。 これにより、データ所有者は、コンピューティングにデータを使用することを第三者に許可できます。 これにより、共同マーケティングなどのさまざまなシナリオの要件を満たすことができます。

シナリオ

たとえば、データプラットフォーム会社は、そのデータプラットフォームを使用してユーザーデータを収集するために必要な権限を取得します。 ユーザデータが収集された後、データプラットフォームは、収集されたデータに基づいてユーザポートレートテーブルを生成する。 次いで、データプラットフォーム会社は、保険会社などの第三者が、マルチパーティデータ統合およびコンピューティングのためにデータを使用し、共同マーケティングを実施することを許可する。

電話

年齢

have_car

年次_消費

13900001111

29

N

20000

13900002222

34

Y

10000

説明

前の表のデータは参照用です。

保険会社は、データプラットフォーム会社によって収集されたデータを使用して、潜在的なユーザーを育成したいと考えています。 たとえば、保険会社は自動車の所有者に自動車保険をプッシュしたいと考えています。

共同クエリを実行するときは、次の項目に注意してください。

  • 必要な権限が取得されません。 この場合、共同クエリのSQL文は失敗し、必要な権限がないことを示すメッセージが表示されます。

  • 動作制御リスト (BCL) クエリ認証が発行されます。 この場合、共同クエリのSQL文は成功し、クエリ結果は暗号文で返されます。

  • BCL復号認証が発行されます。 この場合、許可された当事者は、返された結果を復号して、平文の結果を得ることができる。

前提条件

このトピックでは、「プライバシー保護」トピックで説明されている保険会社を使用して、マルチパーティデータの統合とコンピューティングを説明します。 プライバシー保護に記載されている手順に基づいて設定を完了する必要があります。

データプラットフォーム会社

  1. データベース管理者 (DBA) としてデータベースのユーザーとテーブルを作成します。

    -------- ユーザーを作成します。 ---------
    -- データプラットホームの会社
    CREATE USER ly;
    -データプラットフォーム会社のユーザーポートレートテーブルを作成します。
    テーブルの肖像画を作成 (
        電話enc_text、
        年齢enc_int4、
        have_car enc_text、
        annual_consume enc_int8
    );
    -データプラットフォーム会社にデータテーブルへのアクセスを許可します。
    すべてを肖像画に感謝します。
  2. データプラットフォーム会社にアカウントを登録します。

    説明

    EncDBツールは、入力パラメーターに基づいてSQL文を自動的に生成します。 生成されたSQL文をデータベースで実行する必要があります。

    . /genEncdbSQLCommand.sh -r MEK_PROVISION -- mek sample/default_mek_ly.bin -e default_enclave_publickey.pem-c ${cipher_suite}
    
    # データプラットフォーム会社のマスター暗号化キー (MEK) のIDを取得します。 SELECT encdb_get_current_mek_id(); ステートメントを実行してIDを取得できます。
    # この例では、6953973016013340672が使用されます。
    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. データプラットフォーム会社は、ユーザポートレートテーブルの暗号化キーを作成する。

    説明
    • lyユーザーとして次のステートメントを実行する必要があります。

    • 次のステートメントのencdb.de k_xxx() およびencdb.keyname_xxx() 関数は、データ型の変換に使用されます。 詳細については、「プレーンテキストと暗号文の変換の実行」をご参照ください。

    -- データ暗号化キー (DEK) を作成し、fd89d386-ee00-4e0e-9e5f-66efb4c124aaなどのグループIDを記録します。
    SELECT encdb.de k_generate(encdb.keyname_generate('ly','demo','public','portrait','phone'));
    
    -これはほんの一例です。 すべての列は同じDEKを共有します。
    SELECT encdb.de k_copy_keyname(encdb.keyname_generate('ly' 、'dem' 、'public' 、'portrait' 、'age')) 、encdb.keyname_generate('ly' 、'demo' 、'public' 、'portrait' 、'phone'));
    SELECT encdb.de k_copy_keyname(encdb.keyname_generate('ly' 、'dem' 、'public' 、'portrait' 、'have_car')) 、encdb.keyname_generate('ly' 、'demo' 、'public' 、'portrait' 、'phone'));;
    SELECT encdb.de k_copy_keyname(encdb.keyname_generate('ly' 、'demo' 、'public' 、'portrait' 、'annual_consume')) 、encdb.keyname_generate('ly' 、'demo' 、'public' 、'portrait' 、'phone')); 

    ほとんどの場合、SQL文を実行してデータを暗号化することはできません。 これにより、セキュリティが確保されます。 データの暗号化を許可されている必要があります。

    1. BCLを編集して、DEKの承認範囲 (グループIDを含む) をBCLに更新します。

      . /setGroupIdBCL.sh -l fd89d386-ee00-4e0e-9e5f-66efb4c12 4aa
      説明

      fd89d386-ee00-4e0e-9e5f-66efb4c12 4aaは参照のみに使用されます。 実際の値を取得するには、次のステートメントを実行します。

      SELECT encdb.de k_generate(encdb.keyname_generate('ly','demo','public','portrait','phone'));
    2. 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_for_ly_y_insert.txt-c ${暗号スイート}
      . /genEncdbSQLCommand.sh -r BCL_ISSUE -- issuer_sign -- ipiv sample/usr_pri_ly.pem -- spuk sample/usr_puk_ly.pem -- ipuk sample/usr_puk_ly.pem -- bcl sample /bcl_for_for_ly__insert.txt-c ${暗号スイート} 
  4. データプラットフォーム会社がデータを書き込みます。

    説明

    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' 、'dem' 、'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' 、'dem' 、'public' 、'portrait' 、'have_car')) 、
                                encdb.enc_int8_encrypt('1' 、encdb.keyname_generate('ly' 、'demo' 、'public' 、'portrait' 、'annual_consume'))); 

保険会社

自動車保険を自動車所有者にプッシュするために、保険会社の営業部門は共同クエリを開始します。

SELECT * FROM person ps JOIN portrait pt ON ps.phone = pt.phone WHERE hava_car = 'Y';
  1. 保険会社の営業部門に暗号化権限を付与します。

    1. BCLを編集して、DEKの承認範囲 (グループIDを含む) をBCLに更新します。

      . /setGroupIdBCL.sh -s 7903d109-f3e0-4f3e-b815-3682cb8bd 6db
      説明

      7903d109-f3e0-4f3e-b815-3682cb8bd 6dbは参照のみに使用されます。 営業部門は、デフォルトキーを使用してデータを暗号化します。 グループIDを取得するには、次のステートメントを実行します。

      2715553450389700608などの営業部門アカウントのMEK IDを取得します。
      SELECT encdb_get_current_mek_id();
      
      # グループIDを取得します。
      SELECT groupid FROM encdb.encdb_internal_dek_table WHERE mekid = 2715553450389700608; 
    2. 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_for_sale_sale_insert.txt-c $
    . /genEncdbSQLCommand.sh -r BCL_ISSUE -- issuer_sign -- ipiv sample/usr_pri_sale.pem -- spuk sample/usr_puk_sale.pem -- ipuk sample/usr_puk_sale.pem -- bcl sample /bcl_for_for_sale_sale_insert.txt-c ${} 
  2. 保険会社の営業部門がデータを照会します。

    • 営業部門は、データプラットフォーム会社のデータを使用することをデータプラットフォーム会社によって許可されていません。

      説明

      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));
       警告: -- encdb -- 信頼されていないログ -- 4 - src/core /Untrusted /src/encdb_untrusted_enclave.cpp、256、encdb_ecall: 失敗返された0xfa030000からBCL (subject_mekid: 2715553450389700608、issuer_mekid: 6953973016013340672) を選択します
       エラー: pg_enc_cmp_eq: 暗号化されたタイプ等しいerrno: fa030000 
      説明

      ERROR: permission denied for table portraitエラーメッセージが表示された場合は、GRANT SELECT ON portrait TO ins_sale; ステートメントを実行して、テーブルへのアクセス許可を付与できます。

    • 保険会社の営業部門は、データプラットフォーム会社とデータプラットフォーム会社のデータ部門から必要な許可を取得します。 次に、保険会社の営業部門は、データプラットフォーム会社のデータを使用します。

      1. 営業部門は、データプラットフォーム会社からの承認を申請します。 データプラットフォーム会社は、アプリケーションをレビューして承認し、承認を発行します。

        # 営業部門が承認を申請します: 件名署名。
        . /genEncdbSQLCommand.sh -r BCL_ISSUE -- subject_sign -- spriv sample/usr_pri_sale.pem -- spuk sample/usr_puk_sale.pem -- ipuk sample /usr_puk_lyk_ly.pem -- bcl sample /bcly_for_sale_select.txt-c $
        # データプラットフォーム会社は、アプリケーションをレビューして承認し、BCL承認: 発行者署名を発行します。
        . /genEncdbSQLCommand.sh -r BCL_ISSUE -- issuer_sign -- ipiv sample/usr_pri_ly.pem -- spuk sample/usr_puk_sale.pem -- ipuk sample /usr_puk_lyk_ly.pem -- bcl sample /bcl_ly_for__saltselect.txt-c ${ 
        suit}}
      2. 営業部門は、データプラットフォーム会社のデータ部門からの承認を申請します。 データ部門はアプリケーションを確認して承認し、承認を発行します。

        # 営業部門が承認を申請します: 件名署名。
        . /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 $
        # データ部門はアプリケーションを確認して承認し、BCL承認: 発行者署名を発行します。
        . /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_e_saltselect.txt-c ${camesuit}} 
      3. 営業部門は、共同クエリを正しく実行し、クエリ結果を暗号文で取得できます。

        説明

        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));
        -共同クエリを実行し、クエリ結果を暗号文で取得します。