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

PolarDB:マルチユーザーデータに対するアクセス権限の付与

最終更新日:Nov 04, 2024

常に機密性の高いデータベースクラスターでは、異なるユーザーの暗号文データが自動的に分離されます。 動作制御リスト (BCL) を発行して、マルチパーティデータ統合およびコンピューティングの暗号文データに対するアクセス許可を付与できます。

前提条件

背景情報

常時機密データベースでは、ユーザーデータはユーザーのデータ暗号化キー (DEK) を使用して暗号化されます。 異なるユーザーの暗号文データは自動的に分離されます。 共同クエリに複数のユーザーのデータを使用する場合は、BCLを使用して、共同クエリの参加者にアクセス許可を付与できます。 承認後、参加者は、安全な方法で他の参加者のデータを照会することができます。

シナリオ

データプラットフォームは、年齢ごとにユーザープロファイルデータを収集し、データプラットフォーム専用のDEKを使用してテーブル内の機密データ列を暗号化し、そのデータをPolarDBインスタンス上の常に機密のデータベースに格納します。 DEKは、データプラットフォーム専用です。 第三者が認可されていない場合、第三者は暗号文データのみを見ることができます。 第三者は、ユーザプロファイルデータを使用することができない。

第三者は、広告アプリケーションのための適切なユーザグループを識別するのを助けるためにユーザプロファイルデータを使用することを望みます。 このように、広告アプリケーションは、30歳未満のユーザなどの特定のユーザグループに広告をプッシュすることができます。 第三者は、認可アプリケーションインターフェースを呼び出し、データプラットフォームからのユーザプロファイルデータを使用する許可を申請するためにBCL認可アプリケーションを提出する必要がある。 サードパーティは、BCL承認アプリケーションで詳細を指定する必要があります。 データプラットフォームがアプリケーションを承認すると、BCL認証が発行されます。 必要な許可が付与された後、広告アプリケーションは、ユーザプロファイルデータを照会し、必要なユーザグループに関する情報を取得し、次いで、必要なユーザグループに広告をプッシュすることができます。

この例では、広告アプリケーションは、BCLによって指定された許可された範囲内でのみユーザプロファイルデータを使用することができ、最終結果のみを照会することができます。 中間データは、広告アプリケーションには利用できない。

手順

  1. 必要なコマンドを実行して、参加者のアプリケーションコードで証明書の公開鍵を初期化します。

    // The private key of the participant certificate.
    String userPriPemString = "*****";
    // The public key of the participant certificate.
    String userPukPemString = "*****";
    // Key initialization. The keys need to be initialized only once.
    KeyManager km = sdk.getKeyManager();
    km.registerCertificate(userPriPemString, userPukPemString);
  2. 承認コンテンツを定義します。

    String bclBodyJsonString = """{ 
      "version": 1,
      "serial_num": "a121bac0-5cb3-4463-a2b2-1155ff29f4c8",
    
      "issuer_pukid": "dYJ3Wfj/n0eZbuqgQjv8bnBdPXGyWGOlxE/uMy16NXo=",
      "subject_pukid": "+Gg4vXehPt9BWlCPdR83wKDn6E1b/XddNhKQ5mVbKVQ=",
      "validity": {
        "not_after": "20220820111111+0800",
        "not_before": "20230820111111+0800"
      },
      "policies": {
        "issuer_dek_group": [
          {
            "min": 1,
            "max": 100000,
            "groupid": "b6785611-0c49-4f13-87a9-13f151de9b4d"
          }
        ],
        "result_dek": "SUBJECT",
        "subject_dek_group": [
          {
            "min": 1,
            "max": 100000,
            "groupid": "5e19cfa7-c001-4e44-acab-2e5de4b97dcb"
          }
        ],
        "operation": [
          "*"
        ],
        "postproc": "NULL",
        "preproc": "NULL"
      }
    }""";

    次の表に、上記の構文のパラメーターを示します。

    パラメーター

    説明

    version

    1

    バージョン番号。 値を1に設定します。

    serial_num

    「a121bac0-5cb3-4463-a2b2-1155ff29f4c8」

    UUID形式の一意のランダムなシリアル番号。

    issuer_pukid

    "dYJ3Wfj/n0eZbuqgQjv8bnBdPXGyWGOlxE/uMy16NXo="

    データ所有者の証明書の拇印。

    証明書の拇印を取得するには、次の手順を実行します。

    1. 証明書の内容のハッシュ値を計算します。

      説明
      • デフォルトでは、SHA 256の暗号化アルゴリズムが使用されます。 他の暗号化アルゴリズムを指定できます。

      • 次の例は、----- BEGIN certificate ----- および ----- END CERTIFICATE ----- を含む証明書の内容を示しています。

        -----BEGIN CERTIFICATE-----
        dYJ3Wfj/n0eZbuqgQjv8bnBdPXGyWGOlxE/uMy16NXo=
        -----END CERTIFICATE-----
    2. Base64でハッシュ値をエンコードします。

    3. このパラメーターをBase64-encoded文字列に設定します。

    subject_pukid

    "+ Gg4vXehPt9BWlCPdR83wKDn6E1b/XddNhKQ5mVbKVQ="

    申請者の証明書の拇印。 このパラメーターは、issuer_pukidパラメーターの設定と同じ方法で設定できます。

    妥当性

    {"not_before": "20220820111111 + 0800", "not_after": "20230820111111 + 0800"}

    承認の有効期間。 値はGeneralizedTime時間形式である必要があります。

    • "not_before": 有効期間の始まり。

    • "not_after": 有効期間の終了。

    ポリシー

    issuer_dek_group

    [ { "min": 1, "max": 100000, "groupid": "b6785611-0c49-4f13-87a9-13f151de9b4d" }]

    データ所有者によって許可されているDEKのグループ。

    • "groupid": DEKグループのID

    • "min": グループ内の最小のDEK ID

    • "max": グループ内で最大のDEK ID

    説明

    groupidおよびdekidフィールドの値を取得するには、SELECT encdb_get_cc_entry_by_name(<keyname>); ステートメントを実行します。 申請者がアクセス権限を持つ列にkeynameパラメーターを設定する必要があります。

    subject_dek_group

    [ { "min": 1, "max": 100000, "groupid": "5e19cfa7-c001-4e44-acab-2e5de4b97dcb" }]

    申請者によって許可されているDEKのグループ。

    • "groupid": DEKグループのID

    • "min": グループ内の最小のDEK ID

    • "max": グループ内で最大のDEK ID

    説明

    groupidおよびdekidフィールドの値を取得するには、SELECT encdb_get_cc_entry_by_name(<keyname>); ステートメントを実行します。 申請者がアクセス権限を持つ列にkeynameパラメーターを設定する必要があります。

    result_dek

    "件名"

    計算結果の暗号化に使用されるDEK。

    • "SUBJECT": 現在の計算で申請者によって許可されているDEKを使用します。

    • "ISSUER": 現在の計算でデータ所有者によって許可されているDEKを使用します。

    • DEK ID: 指定されたDEK IDを持つDEKを使用します。

      重要

      指定したDEKを使用する場合は、このパラメーターをDEKのIDに設定します。 DEK IDを二重引用符 ("") で囲む必要なく、DEK IDを直接指定できます。

    operation

    [ "*"]

    許可された計算操作。

    • "encrypt": 暗号化

    • "decrypt": 解読

    • "cmp": 比較

    説明

    このパラメーターを "*" に設定すると、すべての計算操作が許可されます。

    postproc

    "NULL"

    計算の前の前処理操作。 値をNULLに設定します。これは、前処理操作が必要ないことを示します。

    preproc

    "NULL"

    計算後の後処理操作。 値をNULLに設定します。これは、後処理操作が必要ないことを示します。

  3. 申請者はBCL承認申請を開始します。

    boolean isIssuer = false;
    bclBodyJsonString = km.issueBCL(bclBodyJsonString, userPukPemString, userPriPemString, isIssuer);
  4. データ所有者はアプリケーションを承認し、BCL認証を発行します。

    boolean isIssuer = true;
    bclBodyJsonString = km.issueBCL(bclBodyJsonString, userPukPemString, userPriPemString, isIssuer);
  5. (オプション) データ所有者が承認を取り消す必要がある場合は、次の操作を実行します。

    1. 取り消される権限を定義します。

      brlBodyJsonString = """{
        "version": 1,  
        "pukid": "dYJ3Wfj/n0eZbuqgQjv8bnBdPXGyWGOlxE/uMy16NXo=",
        "this_update": "20220819111128+0800",
        "next_update": "20220919111128+0800",
        "revoked": [
          {
            "revocation_date": "20220819111128+0800",
            "serial_num": "a121bac0-5cb3-4463-a2b2-1155ff29f4c8"
          }
        ]
      }""";

      次の表に、上記の構文のパラメーターを示します。

      パラメーター

      説明

      version

      1

      バージョン番号。 値を1に設定します。

      pukid

      "dYJ3Wfj/n0eZbuqgQjv8bnBdPXGyWGOlxE/uMy16NXo="

      データ所有者の証明書の拇印。 このパラメーターは、BCL認証アプリケーションのデータ所有者の証明書の拇印に設定する必要があります。

      this_update

      "20220819111128 + 0800"

      失効リストが更新される時点。 値はGeneralizedTime時間形式である必要があります。

      next_update

      "20220919111128 + 0800"

      失効リストの次の更新時刻。 値はGeneralizedTime時間形式である必要があります。

      取り消された

      revocation_date

      "20220819111128 + 0800"

      承認が取り消された時点。 値はGeneralizedTime時間形式である必要があります。

      serial_num

      「a121bac0-5cb3-4463-a2b2-1155ff29f4c8」

      UUID形式のシリアル番号。 このパラメーターは、BCL認証アプリケーションで指定されたシリアル番号に設定する必要があります。

    2. データ所有者は取り消しを承認して発行します。

      brlBodyJsonString = km.revokeBCL(brlBodyJsonString, userPukPemString, userPriPemString);