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

MaxCompute:暗号化関数

最終更新日:Jul 28, 2026

MaxCompute SQL は、データを保護するための暗号化および復号関数を提供します。このトピックでは、暗号化関数の構文、パラメーター、および例について詳しく説明します。

MaxCompute でのデータ暗号化

  • 単一キー暗号化: 単一のキーを生成して、特定の列をランダムに暗号化または復号できます。生成されたキーの保存は、お客様の責任で行ってください。

    单一密钥加密.jpg

    次の表に、MaxCompute SQL での単一キーの暗号化と復号のための関数を示します。

    関数

    説明

    SYM_DECRYPT

    指定されたランダムに暗号化された列を復号し、プレーンテキストを BINARY 型として返します。

    SYM_ENCRYPT

    指定された列をランダムに暗号化し、暗号文を BINARY 型として返します。

  • 複数キー暗号化: キーセットは、1 つ以上のキーを保持できる MaxCompute のキー管理オブジェクトです。キーセットに手動でキーを追加したり、キーのローテーションを実行したり、元のキーを表示したりできます。

    多密钥加密.jpg

    次の表に、MaxCompute SQL での複数キーの暗号化と復号のための関数を示します。

    関数

    説明

    NEW_KEYSET

    指定されたアルゴリズムタイプに基づいてキーセットを作成します。

    ADD_KEY_TO_KEYSET

    キーセットに新しいキーを追加し、それをマスターキーとして設定します。

    KEYSET_TO_JSON

    BINARY 型のキーセットを、人間が判読可能な JSON 形式に変換して、詳細を表示できるようにします。

    KEYSET_FROM_JSON

    キーセット文字列を JSON 形式から BINARY 型に変換します。

    ROTATE_KEYSET

    新しいキーを生成し、それをマスターキーとして設定します。

  • KMS と統合した複数キー暗号化: MaxCompute は、データ暗号化のために Key Management Service (KMS) と統合されています。MaxCompute は基本キーセットを生成し、KMS のカスタマーマスターキー (CMK) で暗号化して、ラップされたキーセットを作成します。このラップされたキーセットの保存は、お客様の責任で行ってください。データを復号するには、ラップされたキーセットを提供する必要があります。MaxCompute は、KMS の CMK を使用してラップされたキーセットを基本キーセットに復号し、その基本キーセットを使用してデータを復号します。

    keyset.jpg

    次の表に、MaxCompute SQL での KMS と統合した複数キーの暗号化と復号のための関数を示します。

    関数

    説明

    NEW_WRAPPED_KEYSET

    新しいラップされたキーセットを作成します。この操作には、KMS のカスタマーマスターキー (CMK) を使用する権限を持つロール (role_arn で指定) が必要です。オプションで、ロールチェーン (role_chain で指定) を指定して、他の Alibaba Cloud アカウントがキーセットを復号できるようにすることもできます。

    REWRAP_KEYSET

    指定された KMS キーを使用して、ラップされたキーセットを再暗号化します。

    ROTATE_WRAPPED_KEYSET

    既存のラップされたキーセットを復号し、その内部キーに対してキーのローテーションを実行してから、元の KMS キーで再暗号化します。

    USE_WRAPPED_KEYSET

    ラップされたキーセットを基本キーセットに復号し、暗号化または復号関数のパラメーターとして使用します。この関数を使用して、メンテナンスのためにラップされたキーセットのメタデータを表示することもできます。

    ENHANCED_SYM_ENCRYPT

    指定されたキーセットを使用してデータを暗号化します。

    ENHANCED_SYM_DECRYPT

    指定されたキーセットを使用してデータを復号します。

注意事項

MaxCompute 2.0 にアップグレードすると、一部の関数が拡張されます。新しいデータ型 (TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP、または BINARY) を含む関数を使用するには、次の文を実行して新しいデータ型システムを有効にします。

  • セッションレベル: 新しいデータ型を使用するには、SQL ステートメントの前に set odps.sql.type.system.odps2=true; を追加して、まとめて送信します。

  • プロジェクトレベル: プロジェクトオーナーは、必要に応じてこの設定を構成できます。構成が有効になるまで 10~15 分かかります。次のコマンドを使用します。

    setproject odps.sql.type.system.odps2=true;

    setproject の詳細については、「プロジェクト操作」をご参照ください。プロジェクトレベルでデータ型を有効にする際の注意事項については、「データ型バージョンのガイド」をご参照ください。

SYM_DECRYPT

  • 構文

    binary sym_decrypt(binary <value_to_decrypt>,
                       binary <key>
                       [,string <encryption_method> ,
                        [ string <additional_authenticated_data> ]
                       ]
                      )
  • 説明

    指定されたテーブル列のランダムに暗号化されたデータを復号します。

  • パラメーター

    • value_to_decrypt: 必須。復号するデータ。 BINARY 型である必要があります。

    • key: 必須。復号鍵。256 ビットの BINARY 値である必要があります。

    • encryption_method: オプション。暗号化メソッド。データを暗号化するために使用されたのと同じメソッドを指定する必要があります。

    • additional_authenticated_data: オプション。データの真正性と整合性を検証するための追加認証データ (AAD)。暗号化時に AAD を提供した場合は、復号時にも提供する必要があります。

  • 戻り値

    プレーンテキストを BINARY 型として返します。必要に応じて、CAST 関数を使用して BINARY データを STRING 型に変換できます。

  • 次の例は、SYM_ENCRYPT 関数で暗号化されたテーブルのデータを復号する方法を示しています。

    • 例 1: プレーンテキストキーで暗号化されたデータを復号します。

      • AEAD 暗号化アルゴリズムを使用して復号します。

        -- id_card_no を復号します
        insert overwrite table mf_user_info
        select id,
            name,
            gender,
               cast(sym_decrypt(unbase64(id_card_no),
                           cast('b75585cf321cdcad42451690cdb7bfc4' as binary)
                          ) as string) as id_card_no,
               tel
        from mf_user_info;
        
        -- 復号後のプレーンテキストデータをクエリします
        select * from mf_user_info;

        結果は次のとおりです。

        +------------+------+--------+------------+-------------+
        | id         | name | gender | id_card_no | tel         |
        +------------+------+--------+------------+-------------+
        | 1          | bob  | male   | 0001       | 13900001234 |
        | 2          | allen| male   | 0011       | 13900001111 |
        | 3          | kate | female | 0111       | 13900002222 |
        | 4          | annie| female | 1111       | 13900003333 |
        +------------+------+--------+------------+-------------+
      • AEAD アルゴリズムを使用して復号し、AAD (追加認証データ) を付加します。

        -- id_card_no を復号します
        insert overwrite table mf_user_info
        select id,
                     name,
                     gender,
                      cast(sym_decrypt(unbase64(id_card_no),
                        cast('b75585cf321cdcad42451690cdb7bfc4' as binary),
                           'AES-GCM-256',
                               'test'
                          )as string)as id_card_no,
               tel
        from mf_user_info;
        
        -- 復号後のプレーンテキストデータをクエリします
        select * from mf_user_info;

        結果は次のとおりです。

        +------------+------+--------+------------+------------+
        | id         | name | gender | id_card_no |    tel     |
        +------------+------+--------+------------+------------+
        | 1          | bob  | male   | 0001       | 13900001234|
        | 2          | allen| male   | 0011       | 13900001111|
        | 3          | kate | female | 0111       | 13900002222|
        | 4          | annie| female | 1111       | 13900003333|
        +------------+------+--------+------------+------------+
    • 例 2: キーテーブルを使用して暗号化されたデータを復号します。

      -- ターゲットテーブルの列を復号します
      insert overwrite table mf_user_info
      select /*+mapjoin(b)*/
            a.id,
            a.name,
            a.gender,
            cast(sym_decrypt(unbase64(a.id_card_no), b.key) as string) as id_card_no,
            a.tel
       from mf_user_info as a join mf_id_key as b on a.id>=b.id;
      
      -- 復号後のデータをクエリします
      select * from mf_user_info;

      このコマンドは次の結果を返します。

      +------------+------+--------+------------+-------------+
      | id         | name | gender | id_card_no | tel         |
      +------------+------+--------+------------+-------------+
      | 1          | bob  | male   | 0001       | 13900001234 |
      | 2          | allen| male   | 0011       | 13900001111 |
      | 3          | kate | female | 0111       | 13900002222 |
      | 4          | annie| female | 1111       | 13900003333 |
      +------------+------+--------+------------+-------------+

SYM_ENCRYPT

  • 構文

    binary sym_encrypt(string|binary <value_to_encrypt>,
                       binary <key>
                       [,string <encryption_method> ,
                          [ string <additional_authenticated_data> ]
                        ]
                      )
  • 説明

    ランダム化暗号化を使用して指定された列を暗号化します。

  • パラメーター

    • value_to_encrypt: 必須。暗号化するデータ。STRING 型と BINARY 型のみがサポートされています。

    • key: 必須。暗号鍵。256 ビット長で BINARY 型である必要があります。

    • encryption_method: オプション。暗号化メソッド。サポートされているアルゴリズムは AES-GCM-256 のみで、これがデフォルトです。

    • additional_authenticated_data: オプション。データの真正性と整合性を検証するために使用される追加認証データ (AAD)。このパラメーターは、AES-GCM などの認証付き暗号 (AEAD) アルゴリズムでのみサポートされています。

  • 戻り値

    暗号文を BINARY 値として返します。

    • 戻り値には、初期化ベクトル (IV)、暗号文、AEAD タグがこの順序で含まれます。

    • この関数は非決定的であり、同じプレーンテキストとキーであっても、暗号化ごとに異なる暗号文を返します。

  • サンプルデータ

    -- テーブルを作成します
    create table mf_user_info(id bigint,
                              name string,
                              gender string,
                              id_card_no string,
                              tel string);
    -- データを挿入します
    insert overwrite table mf_user_info values(1,"bob","male","0001","13900001234"),
                                           (2,"allen","male","0011","13900001111"),
                                         (3,"kate","female","0111","13900002222"),
                                         (4,"annie","female","1111","13900003333");
    -- データをクエリします
    select * from mf_user_info;
    +------------+------+--------+------------+------------+
    | id         | name | gender | id_card_no |    tel     |
    +------------+------+--------+------------+------------+
    | 1          | bob  | male   | 0001       | 13900001234|
    | 2          | allen| male   | 0011       | 13900001111|
    | 3          | kate | female | 0111       | 13900002222|
    | 4          | annie| female | 1111       | 13900003333|
    +------------+------+--------+------------+------------+
  • 例 1: プレーンテキストキーを使用してデータを暗号化する

    サンプルデータに基づいて、テーブル mf_user_info の列を暗号化します。コマンドは次のとおりです。

    • AEAD 暗号化アルゴリズムを使用して暗号化します。

      -- id_card_no を暗号化します
      insert overwrite table mf_user_info
      select id,
          name,
          gender,
             base64(sym_encrypt(id_card_no,
                         cast('b75585cf321cdcad42451690cdb7bfc4' as binary)
                        ))as id_card_no,
            tel
      from mf_user_info;
      
      select * from mf_user_info;

      結果は次のとおりです。

      +------------+------+--------+------------+-----+
      | id         | name | gender | id_card_no | tel |
      +------------+------+--------+------------+-----+
      | 1          | bob  | male   | frgJZAEAQMeEuHqpS8lK9VxQhgPYpZ317V+oUla/xEc= | 13900001234|
      | 2          | allen| male   | frgJZAIAQMeEuHqpLeXQfETsFSLJxBwHhPx6tpzWUg4= | 13900001111|
      | 3          | kate | female | frgJZAMAQMeEuHqpdphXAU6iWelWenlDnVy+R0HMvAY= | 13900002222|
      | 4          | annie| female | frgJZAQAQMeEuHqpR5c8bj21dYCeM0C25bLRZIrP71c= | 13900003333|
      +------------+------+--------+------------+-----+
    • AEAD アルゴリズムを使用して暗号化し、AAD (追加認証データ) を付加します。

      -- id_card_no を暗号化します
      insert overwrite table mf_user_info
      select id,
                   name,
                   gender,
             base64(sym_encrypt(id_card_no,
                    cast('b75585cf321cdcad42451690cdb7bfc4' as binary),
                    'AES-GCM-256',
                    'test'
                    ))as id_card_no,
            tel
      from mf_user_info;
      select * from mf_user_info;

      結果は次のとおりです。

      +------------+------+--------+------------+-----+
      | id         | name | gender | id_card_no | tel |
      +------------+------+--------+------------+-----+
      | 1          | bob  | male   | gJ0QaAEAoGGWVw90H/zETg... | 13900001234|
      | 2          | allen| male   | gJ0QaAIAoGGWVw90TpNFC0... | 13900001111|
      | 3          | kate | female | gJ0QaAMAoGGWVw90KaQ8Vm... | 13900002222|
      | 4          | annie| female | gJ0QaAQAoGGWVw90nYCAS1... | 13900003333|
      +------------+------+--------+------------+-----+
  • 例 2: キーテーブルを使用してデータを暗号化する

    サンプルデータに基づいて、キーテーブルを構築してキー管理を実現します。

    • 原理

      • データ暗号化のシナリオでは、キーを MaxCompute テーブルに保存し、データを暗号化する際に JOIN を使用して暗号化テーブルと結合することで、データ暗号化を完了できます。これにより、クエリでキーを直接渡すことによる漏洩の問題を回避できます。

      • データ復号時、プロジェクト管理者はキー (テーブル) をデータ利用者に直接承認するのではなく、(セキュア) ビューを作成する必要があります。ビュー内で復号テーブルにアクセスし、復号関数を呼び出すことでデータ復号を完了します。ビューの権限を制御することで、データ利用者によるプレーンテキストデータへのアクセスを制御します。同時に、キーの漏洩を避けるため、ビューにキーのプレーンテキストを含めるべきではありません。

    • 注意事項

      • このソリューション全体のキーの作成と管理は、お客様が行う必要があります。重要なキーはご自身で保存する必要があり、プラットフォームはキーやキーと暗号文の直接的な対応関係を保存しません。キーを紛失すると、データを復号できなくなります。

      • プレーンテキストのキーパラメーターを渡すことには漏洩のリスクがあるため、使用中に特別な処理を行う必要があります。

      • BINARY 型が関係する場合、MaxCompute 2.0 の使用が必要になる可能性があります。set odps.sql.type.system.odps2=true; を使用して 2.0 データ型スイッチを有効にしてください。

    コマンドは次のとおりです。

    -- キーテーブルを作成します
    create table mf_id_key(id bigint,key binary);
    -- キーを挿入します
    insert overwrite table mf_id_key
      values (1,cast('b75585cf321cdcad42451690cdb7bfc4' as binary));
    -- キーをクエリします
    select * from mf_id_key;
    +------------+------+
    | id         | key  |
    +------------+------+
    | 1          | b75585cf321cdcad42451690cdb7bfc4 |
    +------------+------+
    
    -- 暗号化するテーブルデータをクエリします
    select * from mf_user_info;
    +------------+------+--------+------------+------------+
    | id         | name | gender | id_card_no |    tel     |
    +------------+------+--------+------------+------------+
    | 1          | bob  | male   | 0001       | 13900001234|
    | 2          | allen| male   | 0011       | 13900001111|
    | 3          | kate | female | 0111       | 13900002222|
    | 4          | annie| female | 1111       | 13900003333|
    +------------+------+--------+------------+------------+
    
    -- ターゲットテーブルの列を暗号化します
    insert overwrite table mf_user_info
    select /*+mapjoin(b)*/
          a.id,
          a.name,
          a.gender,
          base64(
            (sym_encrypt(a.id_card_no, b.key))
          ) as id_card_no,
          a.tel
     from mf_user_info as a join mf_id_key as b on a.id>=b.id;
    
    -- 暗号化後のデータをクエリします
    select * from mf_user_info;

    結果は次のとおりです。

    +------------+------+--------+------------+-----+
    | id         | name | gender | id_card_no | tel |
    +------------+------+--------+------------+-----+
    | 1          | bob  | male   | 9esKZAEAoBquXVJo3ZptvoI09XuM4bSFTqF1mXH1BO4= | 13900001234|
    | 2          | allen| male   | 9esKZAIAoBquXVJoJYqnXieAANih7FR59luePvdHB9U= | 13900001111|
    | 3          | kate | female | 9esKZAMAoBquXVJoppwxgVwPYBnvjIMklWLmJ/sU0Y8= | 13900002222|
    | 4          | annie| female | 9esKZAQAoBquXVJoB85RUFCLMbdyEBSz7LdS4M3Guvk= | 13900003333|
    +------------+------+--------+------------+-----+

NEW_KEYSET

  • 構文

    binary NEW_KEYSET(string <key_type>, [string <description>])
  • 説明

    指定されたアルゴリズムタイプに基づいて、対応するキーセットを作成します。

  • パラメーター

    • key_type: 必須。データキーを作成する際に指定するアルゴリズムタイプ。現在サポートされているのは、AES-GCM-256AES-SIV-CMAC-128AES-SIV-CMAC-256 です。

    • description: オプション。データキーの説明。

  • 戻り値

    BINARY 型のキーセットを返します。

    説明

    HEX 関数を使用して BINARY 値を STRING 値に変換し、UNHEX 関数を使用して STRING 値を BINARY 値に変換できます。

  • select hex(NEW_KEYSET('AES-GCM-256', 'hello world'));

    結果は次のとおりです。

    +------------+
    | _c0        |
    +------------+
    | 0A10577567735A514541554D42776E684C4212580A330A0B4145532D47434D2D323536122017F7A430B9D4B59B55454FD4B486216059F1B748CE0502D901EBEACEAB6569191801200210011A10577567735A514541554D42776E684C4220022A0B68656C6C6F20776F726C64 |
    +------------+

ADD_KEY_TO_KEYSET

  • 構文

    binary ADD_KEY_TO_KEYSET(binary <keyset>, string <key_type>, binary <raw_key>, [string <description>])
  • 説明

    キーセットに新しいキーを追加し、そのキーをマスターキーとして設定します。

  • パラメーター

    • keyset: 必須。既存のキーセット。型は BINARY です。

    • key_type: 必須。追加するキーのアルゴリズムタイプ。現在サポートされているのは、AES-GCM-256AES-SIV-CMAC-128AES-SIV-CMAC-256 です。

    • raw_key: 必須。追加するキー。このキーがマスターキーとして設定されます。型は BINARY です。

    • description: オプション。データキーの説明。

  • 戻り値

    BINARY 型のキーセットを返します。

    説明

    HEX 関数を使用して BINARY 値を STRING に変換し、UNHEX 関数を使用して STRING 値を BINARY に変換できます。

  • select hex(ADD_KEY_TO_KEYSET(unhex ('0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64'), 'AES-SIV-CMAC-128', unhex('b75585cf321cdcad42451690cdb7bfc49c26092f60f854e72d43244c55620a3d'),'description') );

    結果は次のとおりです。

    +------------+
    | _c0        |
    +------------+
    | 0A10596530735A5145414150447273424C4212580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64125D0A380A104145532D5349562D434D41432D3132381220B75585CF321CDCAD42451690CDB7BFC49C26092F60F854E72D43244C55620A3D1801200110011A10596530735A5145414150447273424C4220022A0B6465736372697074696F6E |
    +------------+

KEYSET_FROM_JSON

  • 構文

    BINARY KEYSET_FROM_JSON(STRING <json_keyset>)
  • 説明

    KEYSET_FROM_JSON 関数は、JSON 形式のキーセット文字列を BINARY 型に変換するために使用されます。

  • パラメーター

    json_keyset: 必須。STRING 型。JSON 形式のキーセット文字列。

  • 戻り値

    キーセットを BINARY 値として返します。

    説明

    BINARY 値と STRING 値を変換するには、HEX 関数と UNHEX 関数を使用します。

  • SELECT HEX(KEYSET_FROM_JSON('{
        "key": [{
                "description": "hello world",
                "key_id": "r8MqZAEA8PDd3QSL",
                "key_meta_data": {
                    "key_material_origin": "Origin_ALIYUN_MAXCOMPUTE",
                    "key_material_type": "SYMMETRIC",
                    "type": "AES-GCM-256",
                    "value": "Jqj7ESbfT1td0DwYDmkZVl13FsuykYFe+1u/MPi++a8="},
                "output_prefix_type": "PREFIX_ALIYUN_MAXCOMPUTE",
                "status": "ENABLED"}],
        "primary_key_id": "r8MqZAEA8PDd3QSL"}')) ;

    結果は次のとおりです。

    +------------+
    | _c0        |
    +------------+
    | 0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64 |
    +------------+

KEYSET_TO_JSON

  • 構文

    STRING KEYSET_TO_JSON(BINARY <keyset>)
  • 説明

    BINARY 型のキーセットを、詳細を確認できるように人間が判読可能な JSON 形式に変換します。

  • パラメーター

    keyset: 必須。既存のキーセット。型は BINARY です。

  • 戻り値

    JSON 形式のキーセットを返します。一部のパラメーターの説明は次のとおりです。

    • key_id: キー ID。

    • key_material_origin: キーのソース。

    • key_material_type: キーに対応する暗号化タイプ。

    • type: キーのアルゴリズムタイプ。

    • value: キーの値。

    • output_prefix_type: 暗号化後の暗号文に対応する形式。

  • SELECT KEYSET_TO_JSON(unhex ('0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64')) ;

    結果は次のとおりです。

     +------------+
    | _c0        |
    +------------+
    | {
        "key": [{
                "description": "hello world",
                "key_id": "r8MqZAEA8PDd3QSL",
                "key_meta_data": {
                    "key_material_origin": "Origin_ALIYUN_MAXCOMPUTE",
                    "key_material_type": "SYMMETRIC",
                    "type": "AES-GCM-256",
                    "value": "Jqj7ESbfT1td0DwYDmkZVl13FsuykYFe+1u/MPi++a8="},
                "output_prefix_type": "PREFIX_ALIYUN_MAXCOMPUTE",
                "status": "ENABLED"}],
        "primary_key_id": "r8MqZAEA8PDd3QSL"} |
    +------------+

ROTATE_KEYSET

  • 構文

    binary ROTATE_KEYSET(binary <keyset>, string <key_type>, [string <description> ])
  • 説明

    システムが自動的に新しいキーを生成し、その新しいキーをマスターキーとして設定できます。

  • パラメーター

    • keyset: 必須。BINARY 型の値。このパラメーターは、更新するキーセットを指定します。

    • key_type: 必須。このパラメーターは、新しいキーのアルゴリズムタイプを指定します。有効な値: AES-GCM-256AES-SIV-CMAC-128AES-SIV-CMAC-256

    • description: オプション。このパラメーターは、新しいデータキーの説明を提供します。

  • 戻り値

    BINARY 型のキーセットを返します。

    説明

    HEX 関数を使用して BINARYSTRING に変換し、UNHEX 関数を使用して STRINGBINARY に変換します。

  • select ROTATE_KEYSET(unhex ('0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64'), 'AES-SIV-CMAC-256', 'hello world') ;

    次の結果が返されます。

    +------------+
    | _c0        |
    +------------+
    | =0A=10BVIuZQEAcHHPLfn1=12X=0A3=0A=0BAES-GCM-256=12=20&=A8=FB=11&=DFO[]=D0<=18=0Ei=19V]w=16=CB=B2=91=81^=FB[=BF0=F8=BE=F9=AF=18=01=20=02=10=01=1A=10r8MqZAEA8PDd3QSL=20=02*=0Bhello=20world=12}=0AX=0A=10AES-SIV-CMAC-256=12@=9D=AD=B7=D6=AF=01=B2=9D=CE=C3=02y=A9=DB=E1=17q>'F=DC=F5=EF=FFI=7F=F0w)=95F=07>=9C=EDqn=DF=0E=1E=16bP&=D3=7F>gV=CBl=8AGJCm=93=FF=F9=96=AD=1A=C0=BC=18=01=20=02=10=01=1A=10BVIuZQEAcHHPLfn1=20=02*=0Bhello=20world |
    +-----------

NEW_WRAPPED_KEYSET

  • 構文

    binary NEW_WRAPPED_KEYSET(string <kms_cmk_arn> , string <role-arn>, string <key_type>
    [, string <description>, [string <role_chain>]])
  • 説明

    MaxCompute は、Key Management Service (KMS) と連携したキー管理をサポートしています。KMS キーを使用して生成されたキーセット (KEYSET) をさらに暗号化し、ラップされたキーセットを生成します。ラップされたキーセットは、生成後にお客様自身で記録・保存する必要があります。ラップされたキーセットを使用してデータを暗号化・復号するには、KMS キーと連携する必要があります。このプロセスでは、すべてのキーがシステムによって自動的に生成され、データ暗号化・復号に使用される元のキーは表示できないため、より安全にデータ暗号化・復号を実現できます。NEW_WRAPPED_KEYSET 関数は、KMS のカスタマーマスターキーのリソース名 (`kms_cmk_arn`) を使用する権限を持つロール (`role_arn`) を MaxCompute に付与し、新しいラップされたキーセットを作成します。また、ロールチェーン (`role_chain`) を使用して、他の Alibaba Cloud アカウントのロールにラップされたキーセットを使用する権限を付与することもサポートしています。

    NEW_WRAPPED_KEYSET 関数を使用する前に、次の操作を完了する必要があります。

    • NEW_WRAPPED_KEYSET 関数で生成されたラップされたキーセットがすでにありますが、詳細については、「NEW_WRAPPED_KEYSET」をご参照ください。

    • 新しい KMS キーを作成してキーの ARN 情報 (kms_cmk_arn) を取得し、RAM ロールに新しいキーを使用する権限を付与してください。詳細については、「KMS を有効化して権限を設定する」をご参照ください。

    • RAM ロールを作成し、MaxCompute に KMS へのアクセスを許可し、作成したロールの ARN 情報 (role_arn) を取得します。

    操作の詳細については、「KMS の有効化と権限の構成」をご参照ください。

  • パラメーター

    • kms_cmk_arn: 必須。KEYSET を暗号化する KMS のカスタマーマスターキーのリソース名。形式は 'acs:kms:<RegionId>:<UserId>:key/<CmkId>' で、リージョン情報、ユーザー ID、カスタマーマスターキー ID が含まれます。Key Management Service コンソールのキー詳細ページで ARN を取得できます。操作の詳細については、「KMS の有効化と権限の構成」をご参照ください。

    • role_arn: 必須。このパラメーターは、古い KMS キーと新しい KMS キーの両方に対する権限を持つ RAM ロールの ARN を指定します。パラメーター値のフォーマットは 'acs:ram:${<userAID>}:role/${<roleName>}' です。userAID はユーザー ID を指定し、roleName はロール名を指定します。

    • wrapped_keyset:必須、再暗号化するラップされたキーセット。

    • description: オプション。キーの説明情報。

    • role_chain: オプション。ユーザー承認ロールチェーン。形式は 'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3>},...' です。ロールチェーン方式により、Alibaba Cloud アカウントをまたいだラップされたキーセットの呼び出しをサポートします。

  • 戻り値

    BINARY 型の暗号化された KEYSET を返します。必要に応じて、HEX 関数を使用して BINARY 型を STRING 型に変換できます。詳細については、「HEX」をご参照ください。

    • ラップされたキーセットを新規作成します。

      insert overwrite table mf_user_info
      select id,
          name,
          gender,
             base64(ENHANCED_SYM_ENCRYPT(unhex ('0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64'), id_card_no ))as id_card_no,
            tel
      from mf_user_info;

      結果の例は次のとおりです。

      +-----+
      | _c0 |
      +-----+
      | 613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D78434A373434582F54756C5A547A4E69337562786F4B3543412F616655573262786D345A41306B464C674A2F5758324F4E514E346746306F303236376D35335A6471797237366E57565A6836387A52687A4A673945784B6E677568794A376E6F4A68573677684B5A555A42786E4A383742536C4D46326A374F71474F4C414A6B665779694557394D58664876576E306C6D49777052746A77325643707A4259517277327944354343396C50586F31346A4351506253612F3044394C4C6E6E622F747A6B57316E4F564A6C5359354B35526130537565584F33507856773D |
      +-----+
    • ラップされたキーセットを再暗号化し、他の Alibaba Cloud アカウントのロールからの呼び出しを許可する:

      select hex(REWRAP_KEYSET('acs:kms:cn-hangzhou:1**************7:key/key-hzz******************', 'acs:ram:${<UserId>}:role/${<roleName>}', unhex('<wrapped_keyset>'), 'acs:ram:${<UserAId>}:role/${<roleName2>},acs:ram:${<UserBId>}:role/${<roleName3>}')));

      結果の例は次のとおりです。

      +-----+
      | _c0 |
      +-----+
      | 613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D784D59716D4C767954716B3562444779574C7A387965774966432F516B4A59616F57623648364A546A62434F7A7A42634F517A687A6E526F36543866714E4E63555546566874696C4A3947713556667A2F7851757A55686467504C517A2B6C433337485A535449744B53714E396B6639587666487A4D7957643842334D3179392F67423774726835437A556F786A74614571612F5A3543447668524A7731426566525647796A77574974476243475A4E594550714E767963532B333432743347396B714777626C54336F57706939706E437A667A4E4D6F4C63714F453D |
      +-----+

REWRAP_KEYSET

  • 構文

    binary REWRAP_KEYSET(string <kms_cmk_arn> , string <role-arn>, string <wrapped_keyset>, [string <role_chain>])
  • 説明

    MaxCompute は、Key Management Service (KMS) と連携したキー管理をサポートしています。KMS キーを使用して生成されたキーセット (KEYSET) をさらに暗号化し、ラップされたキーセットを生成します。REWRAP_KEYSET 関数は、NEW_WRAPPED_KEYSET 関数で生成されたラップされたキーセットを、新しい KMS キーを使用して再ラップ (再暗号化) できます。

    REWRAP_KEYSET 関数を使用する前に、次の操作を完了する必要があります。

    • NEW_WRAPPED_KEYSET 関数で生成されたラップされたキーセットが既にあること。詳細については、「NEW_WRAPPED_KEYSET」をご参照ください。

    • 新しい KMS キーを作成し、キーの ARN 情報 (kms_cmk_arn) を取得し、RAM ロールに新しいキーを使用する権限を付与すること。操作の詳細については、「KMS の有効化と権限の構成」をご参照ください。

  • パラメーター

    • kms_cmk_arn: 必須。KEYSET を再暗号化する KMS のカスタマーマスターキーのリソース名。形式は 'acs:kms:<RegionId>:<UserId>:key/<CmkId>' で、リージョン情報、ユーザー ID、カスタマーマスターキー ID が含まれます。Key Management Service コンソールのキー詳細ページで ARN を取得できます。操作の詳細については、「KMS の有効化と権限の構成」をご参照ください。

    • role_arn: 必須。新旧両方の KMS キーに対する権限を持つ RAM ロールの ARN 情報。このロールは MaxCompute に承認される必要があります。形式は 'acs:ram:${<userAID>}:role/${<roleName>}' で、ユーザー ID とロール名が含まれます。取得方法については、「KMS の有効化と権限の構成」をご参照ください。

    • wrapped_keyset: 必須。再暗号化が必要なラップされたキーセット。

    • role_chain: オプション。ユーザー承認ロールチェーン。形式は 'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3>},...' です。ロールチェーン方式により、Alibaba Cloud アカウントをまたいだラップされたキーセットの呼び出しをサポートします。

  • 戻り値

    BINARY 型の暗号化された KEYSET を返します。必要に応じて、HEX 関数を使用して BINARY 型を STRING 型に変換できます。詳細については、「HEX」をご参照ください。

  • 説明

    変数を含む次のサンプルコードを実行するには、スクリプトモードを使用するか、変数を SQL 文にインライン化してください (MaxCompute は SQL 文をまたぐ変数スコープをサポートしていません)。

    • ラップされたキーセットを再暗号化します。

      @kms_resource_keyId := 'acs:kms:${<RegionId>}:${<UserId>}:key/${<CmkId>}';
      @role_arn := 'acs:ram:${<UserId>}:role/${<roleName>}';
      @origin_key := unhex('<wrapped_keyset>');
      select hex(ROTATE_WRAPPED_KEYSET(@kms_resource_keyId, @role_arn, @origin_key, 'AES-GCM-256', 'hello world'));
    • ラップされたキーセットを再暗号化し、他の Alibaba Cloud アカウントのロールからの呼び出しを許可します。

      select hex(REWRAP_KEYSET('acs:kms:cn-hangzhou:1**************7:key/key-hzz******************', 'acs:ram:${<UserId>}:role/${<roleName>}', unhex('<wrapped_keyset>'), 'acs:ram:${<UserAId>}:role/${<roleName2>},acs:ram:${<UserBId>}:role/${<roleName3>}')));

ROTATE_WRAPPED_KEYSET

  • 構文

    binary ROTATE_WRAPPED_KEYSET(string <kms_cmk_arn> , string <role-arn>, string <wrapped_keyset>,string <key_type> [,string description,[string <role_chain>]])
  • 説明

    MaxCompute を KMS と連携させてキーを管理できます。KMS キーに基づいて既存のキーセットを暗号化することで、ラップされたキーセットを生成できます。ROTATE_WRAPPED_KEYSET 関数は、新しい KMS キーと新しいキーアルゴリズムを使用して、NEW_WRAPPED_KEYSET 関数で生成されたラップされたキーセットを再暗号化します。REWRAP_KEYSET 関数と比較して、ROTATE_WRAPPED_KEYSET 関数は新しいキーアルゴリズムで再暗号化できます。

    ROTATE_WRAPPED_KEYSET 関数を使用する前に、次の前提条件が満たされていることを確認してください。

    • NEW_WRAPPED_KEYSET 関数を使用してラップされたキーセットが生成されていること。詳細については、「NEW_WRAPPED_KEYSET」をご参照ください。

    • KMS キーが作成され、kms_cmk_arn で指定されたキー ARN が取得されていること。RAM ロールに新しいキーを使用する権限が付与されていること。

  • パラメーター

    • kms_cmk_arn: 必須。このパラメーターは、ラップされたキーセットを再暗号化するために使用する KMS のカスタマーマスターキー (CMK) の ARN を指定します。パラメーター値の形式は 'acs:kms:<RegionId>:<UserId>:key/<CmkId>' です。RegionId はリージョン ID、UserId はユーザー ID、CmkId は CMK ID を指定します。ARN は KMS コンソールのキー詳細ページから取得できます。

    • role_arn: 必須。このパラメーターは、新旧両方の KMS キーに対する権限を持つ RAM ロールの ARN を指定します。パラメーター値の形式は 'acs:ram:${<userAID>}:role/${<roleName>}' です。userAID はユーザー ID、roleName はロール名を指定します。

    • wrapped_keyset: 必須。このパラメーターは、再暗号化するラップされたキーセットを指定します。

    • key_type: 必須。このパラメーターは、新しく生成されたキーセット内のキーのアルゴリズムタイプを指定します。有効な値: AES-GCM-256AES-SIV-CMAC-128AES-SIV-CMAC-256

    • description: オプション。このパラメーターは、キーの説明を提供します。

    • role_chain: オプション。ユーザー承認ロールチェーン。形式は 'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3>},...' です。ロールチェーン方式により、Alibaba Cloud アカウントをまたいだラップされたキーセットの呼び出しをサポートします。

  • 戻り値

    BINARY 型の暗号化された KEYSET を返します。必要に応じて、HEX 関数を使用して BINARY 型を STRING 型に変換できます。詳細については、「HEX」をご参照ください。

  • 説明

    変数を含む次のサンプルコードを実行するには、スクリプトモードを使用するか、変数を SQL 文にインライン化してください (MaxCompute は SQL 文をまたぐ変数スコープをサポートしていません)。

    • ラップされたキーセットを再暗号化します。

      @kms_resource_keyId := 'acs:kms:${<RegionId>}:${<UserId>}:key/${<CmkId>}';
      @role_arn := 'acs:ram:${<UserId>}:role/${<roleName>}';
      @origin_key := unhex('<wrapped_keyset>');
      select hex(ROTATE_WRAPPED_KEYSET(@kms_resource_keyId, @role_arn, @origin_key, 'AES-GCM-256', 'hello world'));
    • ラップされたキーセットを再暗号化し、他のロールがラップされたキーセットを呼び出すことを許可します。

      @kms_resource_keyId := 'acs:kms:${<RegionId>}:${<UserId>}:key/${<CmkId>}';
      @role_arn := 'acs:ram:${<UserId>}:role/${<roleName>}';
      @origin_key := unhex('<wrapped_keyset>');
      @role_chain := 'acs:ram:${<UserAId>}:role/${<roleName2>},acs:ram:${<UserBId>}:role/${<roleName3>}';
      select hex(ROTATE_WRAPPED_KEYSET(@kms_resource_keyId, @role_arn, @origin_key, 'AES-GCM-256', 'hello world', @role_chain));

USE_WRAPPED_KEYSET

  • 構文

    binary USE_WRAPPED_KEYSET(string <kms_cmk_arn> , string <role-arn>, string <wrapped_keyset> [,string <role_chain>])
  • 説明

    MaxCompute を KMS と連携させてキーを管理できます。KMS キーに基づいて既存のキーセットを暗号化することで、ラップされたキーセットを生成できます。USE_WRAPPED_KEYSET 関数は、NEW_WRAPPED_KEYSET 関数で生成されたラップされたキーセットを基本キーセットに変換します。この基本キーセットは、暗号化または復号関数でパラメーターとして使用され、データを暗号化または復号します。また、USE_WRAPPED_KEYSET 関数を使用して、ラップされたキーセットの情報を取得し、その情報を後続のメンテナンスのために保存することもできます。

    USE_WRAPPED_KEYSET 関数を使用する前に、次の前提条件が満たされていることを確認してください。

    • NEW_WRAPPED_KEYSET 関数を使用してラップされたキーセットが生成されていること。詳細については、「NEW_WRAPPED_KEYSET」をご参照ください。

    • KMS キーが作成され、そのキーの Alibaba Cloud リソースネーム (ARN) が取得されていること。キー ARN は kms_cmk_arn で指定されます。RAM ロールに新しいキーを使用する権限が付与されていること。

  • パラメーター

    • kms_cmk_arn: 必須。このパラメーターは、暗号化するキーセットの KMS のカスタマーマスターキー (CMK) ARN を指定します。パラメーター値の形式は 'acs:kms:<RegionId>:<UserId>:key/<CmkId>' です。RegionId はリージョン ID、UserId はユーザー ID、CmkId は CMK ID を指定します。ARN は KMS コンソールのキー詳細ページから取得できます。

    • role_arn: 必須。このパラメーターは、KMS に対する権限を持つ RAM ロールの ARN を指定します。このロールは MaxCompute によって引き受けられる必要があります。パラメーター値の形式は 'acs:ram:${<userAID>}:role/${<roleName>}' です。userAID はユーザー ID、roleName はロール名を指定します。

    • wrapped_keyset: 必須。このパラメーターは、既存のラップされたキーセットを指定します。

    • role_chain: オプション。ユーザー承認ロールチェーン。形式は 'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3>},...' です。ロールチェーン方式により、Alibaba Cloud アカウントをまたいだラップされたキーセットの呼び出しをサポートします。

  • 戻り値

    STRUCT 型の非機密化されたキーセットが返されます。ビジネス要件に応じて、get_json_object 関数を使用してキーセット関連のフィールドを取得できます。

  • 説明

    変数を含む次のサンプルコードを実行するには、スクリプトモードを使用するか、変数を SQL 文にインライン化してください (MaxCompute は SQL 文をまたぐ変数スコープをサポートしていません)。

    ラップされたキーセットのキーアルゴリズム情報を取得します。

    @kms_resource_keyId := 'acs:kms:${<RegionId>}:${<UserId>}:key/${<CmkId>}';
    @role_arn := 'acs:ram:${<UserId>}:role/${<roleName>}';
    @origin_key := unhex('<wrapped_keyset>');
    @role_chain := 'acs:ram:${<UserAId>}:role/${<roleName2>},acs:ram:${<UserBId>}:role/${<roleName3>}';
    @use_keyset_new := USE_WRAPPED_KEYSET(@kms_resource_keyId, @role_arn, @origin_key, @role_chain);
    
    select get_json_object(get_json_object(use_keyset_new.wrapped_keyset_info,'$.masked_keyset'), '$.key[0].key_meta_data.type');

    次の結果が返されます。

    +-----+
    | _c0 |
    +-----+
    | AES-GCM-256 |
    +-----+

ENHANCED_SYM_ENCRYPT

  • 構文

    binary ENHANCED_SYM_ENCRYPT(binary <keyset> , string|binary <plaintext> [,string <additional_data>])
  • 説明

    MaxCompute では、ENHANCED_SYM_ENCRYPT 関数を使用して、指定された基本キーセットまたはラップされたキーセットでデータを暗号化できます。既存のキーセットを Key Management Service (KMS) キーに基づいて暗号化することで、ラップされたキーセットを作成できます。基本キーセットと比較して、ラップされたキーセットを KMS と共に使用すると、より安全な方法でキーを管理できます。

    ENHANCED_SYM_ENCRYPT 関数を使用する前に、次の前提条件が満たされていることを確認してください。

    • NEW_KEYSET または NEW_WRAPPED_KEYSET 関数を使用して、基本キーセットまたはラップされたキーセットが生成されていること。詳細については、「NEW_KEYSET」または「NEW_WRAPPED_KEYSET」をご参照ください。

    • USE_WRAPPED_KEYSET 関数を使用して、ラップされたキーセットから基本キーセットが取得されていること。この前提条件は、ラップされたキーセットを使用してデータを暗号化する場合に満たす必要があります。基本キーセットは、ENHANCED_SYM_ENCRYPT 関数のパラメーターとして使用され、データを暗号化します。さらに、ご利用のアカウントには、ラップされたキーセットを使用する権限を持つロールが割り当てられている必要があります。

  • パラメーター

    • keyset: 必須。このパラメーターは、BINARY 型の基本キーセットまたは STRUCT 型のラップされたキーセットを指定します。

    • plaintext: 必須。このパラメーターは、暗号化する STRING 型または BINARY 型のプレーンテキストを指定します。

    • additional_data: オプション。このパラメーターは、アルゴリズムでサポートされている検証情報を指定します。検証情報は STRING 型です。

  • 戻り値

    BINARY 型の暗号文が返されます。

  • サンプルデータ

    -- テーブルを作成します。
    create table mf_user_info(id bigint,
                              name string,
                              gender string,
                              id_card_no string,
                              tel string);
    -- テーブルにデータを挿入します。
    insert overwrite table mf_user_info values(1,"bob","male","0001","13900001234"),
                                           (2,"allen","male","0011","13900001111"),
                                         (3,"kate","female","0111","13900002222"),
                                         (4,"annie","female","1111","13900003333");
    -- テーブルからデータをクエリします。
    select * from mf_user_info;
    +------------+------+--------+------------+------------+
    | id         | name | gender | id_card_no |    tel     |
    +------------+------+--------+------------+------------+
    | 1          | bob  | male   | 0001       | 13900001234|
    | 2          | allen| male   | 0011       | 13900001111|
    | 3          | kate | female | 0111       | 13900002222|
    | 4          | annie| female | 1111       | 13900003333|
    +------------+------+--------+------------+------------+
    • 通常のキーセットを使用して、mf_user_info テーブルの暗号化されたid_card_no 列を復号化します:

      insert overwrite table mf_user_info
      select id,
          name,
          gender,
             base64(ENHANCED_SYM_ENCRYPT(unhex ('0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64'), id_card_no ))as id_card_no,
            tel
      from mf_user_info;

      次のサンプルステートメントは、暗号化結果をクエリします。

      select * from mf_user_info;
      
      -- 次の結果が返されます。
      +------------+------+--------+------------+-----+
      | id         | name | gender | id_card_no | tel |
      +------------+------+--------+------------+-----+
      | 1          | bob  | male   | nLcdDFdjO2T4aATtirvDMVeBD8oSuu4BfM3t+Y8ny0kwQjJlAQAwkVhYOocPQll8LmdzSwkRf3v2iTow+TAmnQ== | 13900001234 |
      | 2          | allen | male   | nLcdDFdjO2T4aATtirvDMVeBD8oSuu4BfM3t+Y8ny0kwQjJlAQBgj1hYOodIPdnyZ0ijZ9RmT+50xbxXh5cwcg== | 13900001111 |
      | 3          | kate | female | nLcdDFdjO2T4aATtirvDMVeBD8oSuu4BfM3t+Y8ny0kwQjJlAQCwp1hYOoentQgkfUqctPbmX96k9eD018xg9Q== | 13900002222 |
      | 4          | annie | female | nLcdDFdjO2T4aATtirvDMVeBD8oSuu4BfM3t+Y8ny0kwQjJlAQDQqFhYOodexhRmfh6VieEwePZscC4nUVTJXQ== | 13900003333 |
      +------------+------+--------+------------+-----+
    • ラップされたキーセットを使用して、mf_user_info テーブルの暗号化された tel 列を復号します:

      1. ラップされたキーセットを生成し、テーブルに書き込みます。

        -- テーブルを作成します。
        create table mf_keyset_kms (id string,ks binary);
        -- ラップされたキーセットを作成し、テーブルに書き込みます。
        insert into mf_keyset_kms 
              select '1',
                     NEW_WRAPPED_KEYSET(
                        'acs:kms:cn-hangzhou:1**************7:key/key-hzz****************1t', 
                        'acs:ram::1**************7:role/kms', 
                        'AES-GCM-256', 
                       'description');
        -- テーブルからデータをクエリします。
        select id,hex(ks) from mf_keyset_kms;
        
        -- 次の結果が返されます。
        +----+-----+
        | id | _c1 |
        +----+-----+
        | 1  | 613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D78447654524C4632635077766E74554654584579715242583953724167446D2F397131786F57456E6F5474516739633853766242674456773565736674714A4D5435524455382F6F6A2B4E61766D774344494C734B6A416B6B675A42496F5568656F566D38564C4F30506D4778767137646956517453447A5467395147775639533161305A464A6D6A45562B6742722F56386653444D6E424D2B71493779784668303866594E6D336578775744423949726B645A3469784F2B532B476E6750523854524A58326E5768666478347034473468687248684A514D615071332F526C342B67427652773D3D |
        +----+-----+
      2. ラップされたキーセットを使用して tel 列を暗号化します。

        select /*+ MAPJOIN(a) */ 
               id,
               name,
        	   gender,
        	   id_card_no, 
               ENHANCED_SYM_ENCRYPT(
                   USE_WRAPPED_KEYSET('acs:kms:cn-hangzhou:1**************7:key/key-hzz****************1t', 
                                      'acs:ram::1**************7:role/kms', 
                                      unhex('613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D78447654524C4632635077766E74554654584579715242583953724167446D2F397131786F57456E6F5474516739633853766242674456773565736674714A4D5435524455382F6F6A2B4E61766D774344494C734B6A416B6B675A42496F5568656F566D38564C4F30506D4778767137646956517453447A5467395147775639533161305A464A6D6A45562B6742722F56386653444D6E424D2B71493779784668303866594E6D336578775744423949726B645A3469784F2B532B476E6750523854524A58326E5768666478347034473468687248684A514D615071332F526C342B67427652773D3D')
                                     ),
                   tel
               ) as tel 
         FROM mf_user_info;

        次の結果が返されます。

        +------------+------+--------+------------+------+
        | id         | name | gender | id_card_no | tel  |
        +------------+------+--------+------------+------+
        | 1          | bob  | male   | 0001       | =F1=EEa=13V9=CCsB=90=E7=F3fl=D2=CB=F31=D8=3D=88=B7=F7=0CnG=E3\R=FC)=F2=10=3D2e=01=00=90=86=05=94z;=18=A6j=1CN=E5=9F=AC)=8D=D6=D8=0D=A2Y{kq=EE=F4~=C4=A7=9BS=A1w |
        | 2          | allen | male   | 0011       | =F1=EEa=13V9=CCsB=90=E7=F3fl=D2=CB=F31=D8=3D=88=B7=F7=0CnG=E3\R=FC)=F2=10=3D2e=01=00=20=AA=05=94z;=85=D8=08a=A2]=02d=20=B1=C3=AE=AF=1C{=EB=EA=C4=81=B5A=15=1BR=F7g=9B |
        | 3          | kate | female | 0111       | =F1=EEa=13V9=CCsB=90=E7=F3fl=D2=CB=F31=D8=3D=88=B7=F7=0CnG=E3\R=FC)=F2=10=3D2e=01=00=20=B6=05=94z;[C=12=81=8B<=C1=9D=E2=CF=CE=BC=AE=A7=84=0F[=7CI=B9=B7=9D=DD=89=A8=FD! |
        | 4          | annie | female | 1111       | =F1=EEa=13V9=CCsB=90=E7=F3fl=D2=CB=F31=D8=3D=88=B7=F7=0CnG=E3\R=FC)=F2=10=3D2e=01=00=00=A2=05=94z;E=03A=BC=7C=88=CFJ=14=B9=BD=A1=BF=ED=20=11=A3=A6/+%=0Fe=DD=C7=C8=0A |
        +------------+------+--------+------------+------+

ENHANCED_SYM_DECRYPT

  • 構文

    BINARY ENHANCED_SYM_DECRYPT(BINARY <keyset> , BINARY <ciphertext> [,string <additional_data>])
  • 説明

    MaxCompute は、ENHANCED_SYM_DECRYPT 関数を使用して、指定された基本キーセットまたはラップされたキーセットでデータを復号することをサポートしています。復号に使用する基本キーセットまたはラップされたキーセットは、暗号化時に使用したものと同じである必要があります。ラップされたキーセットは、KMS キーを使用して生成されたキーセット (KEYSET) をさらに暗号化するもので、Key Management Service と連携してキーを管理するため、基本キーセットよりも安全です。

    ENHANCED_SYM_DECRYPT 関数を使用する前に、次の操作を完了する必要があります。

    • NEW_KEYSET または NEW_WRAPPED_KEYSET 関数で生成された基本キーセットまたはラップされたキーセットが既にあること。詳細については、「NEW_KEYSET」、「NEW_WRAPPED_KEYSET」をご参照ください。

    • ラップされたキーセットを使用してデータを復号する場合、ラップされたキーセットに対応するロールの権限が必要です。操作の詳細については、「KMS の有効化と権限の構成」をご参照ください。

  • パラメーター

    • keyset: 必須。ユーザーキーセット。型は BINARY またはキーセットの STRUCT 型です。

      重要

      復号に使用する基本キーセットまたはラップされたキーセットは、暗号化時に使用したものと同じである必要があります。

    • ciphertext: 必須。キーセットで暗号化され、復号待機中の BINARY 型の暗号文。

    • additional_data: オプション。このパラメーターは、アルゴリズムでサポートされている検証情報を指定します。検証情報は STRING 型です。

  • 戻り値

    BINARY 型のプレーンテキストを返します。

  • サンプルデータ

    -- テーブルを作成します。
    create table mf_user_info(id bigint,
                              name string,
                              gender string,
                              id_card_no string,
                              tel string);
    -- テーブルにデータを挿入します。
    insert overwrite table mf_user_info values(1,"bob","male","0001","13900001234"),
                                           (2,"allen","male","0011","13900001111"),
                                         (3,"kate","female","0111","13900002222"),
                                         (4,"annie","female","1111","13900003333");
    -- テーブルからデータをクエリします。
    select * from mf_user_info;
    +------------+------+--------+------------+------------+
    | id         | name | gender | id_card_no |    tel     |
    +------------+------+--------+------------+------------+
    | 1          | bob  | male   | 0001       | 13900001234|
    | 2          | allen| male   | 0011       | 13900001111|
    | 3          | kate | female | 0111       | 13900002222|
    | 4          | annie| female | 1111       | 13900003333|
    +------------+------+--------+------------+------------+
    • 通常のキーセットを使用して、mf_user_info テーブルの暗号化された id_card_no 列を復号します。

      重要

      復号する前に、データが暗号化されていること、および復号に使用する基本キーセットまたはラップされたキーセットが暗号化時に使用したものと同じであることを確認してください。暗号化操作の例については、「ENHANCED_SYM_ENCRYPT」をご参照ください。

      INSERT OVERWRITE TABLE mf_user_info 
      SELECT id,
             name,
             gender,
             CAST(ENHANCED_SYM_DECRYPT(unhex('0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64'), UNBASE64(id_card_no)) AS STRING) AS id_card_no,
             tel
      FROM mf_user_info;

      復号結果のクエリ例は次のとおりです。

      SELECT * FROM mf_user_info;
      
      -- 結果の例
      +------------+------+--------+------------+------------+
      | id         | name | gender | id_card_no |    tel     |
      +------------+------+--------+------------+------------+
      | 1          | bob  | male   | 0001       | 13900001234|
      | 2          | allen| male   | 0011       | 13900001111|
      | 3          | kate | female | 0111       | 13900002222|
      | 4          | annie| female | 1111       | 13900003333|
      +------------+------+--------+------------+------------+
    • ラップされたキーセットを使用して、mf_user_info テーブルの暗号化された tel 列を復号します。

       SELECT /*+ MAPJOIN(a) */ 
             id,
             name,
      	   gender,
      	   id_card_no,
             ENHANCED_SYM_DECRYPT(
               USE_WRAPPED_KEYSET('acs:kms:cn-hangzhou:1**************7:key/key-hzz****************1t', 
                                    'acs:ram::1**************7:role/kms', 
                                    unhex('613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D78447654524C4632635077766E74554654584579715242583953724167446D2F397131786F57456E6F5474516739633853766242674456773565736674714A4D5435524455382F6F6A2B4E61766D774344494C734B6A416B6B675A42496F5568656F566D38564C4F30506D4778767137646956517453447A5467395147775639533161305A464A6D6A45562B6742722F56386653444D6E424D2B71493779784668303866594E6D336578775744423949726B645A3469784F2B532B476E6750523854524A58326E5768666478347034473468687248684A514D615071332F526C342B67427652773D3D')
                                   ),
             	 ENHANCED_SYM_ENCRYPT(
                 USE_WRAPPED_KEYSET('acs:kms:cn-hangzhou:1**************7:key/key-hzz****************1t', 
                                    'acs:ram::1**************7:role/kms', 
                                    unhex('613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D78447654524C4632635077766E74554654584579715242583953724167446D2F397131786F57456E6F5474516739633853766242674456773565736674714A4D5435524455382F6F6A2B4E61766D774344494C734B6A416B6B675A42496F5568656F566D38564C4F30506D4778767137646956517453447A5467395147775639533161305A464A6D6A45562B6742722F56386653444D6E424D2B71493779784668303866594E6D336578775744423949726B645A3469784F2B532B476E6750523854524A58326E5768666478347034473468687248684A514D615071332F526C342B67427652773D3D')
                                   ),
                 tel
             ),
             ''
            )
             AS tel 
       FROM mf_user_info;

      結果の例は次のとおりです。

      +------------+------+--------+------------+------+
      | id         | name | gender | id_card_no | tel  |
      +------------+------+--------+------------+------+
      | 1          | bob  | male   | 0001       | 13900001234 |
      | 2          | allen | male   | 0011       | 13900001111 |
      | 3          | kate | female | 0111       | 13900002222 |
      | 4          | annie | female | 1111       | 13900003333 |
      +------------+------+--------+------------+------+

関連トピック