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

MaxCompute:暗号化と復号化関数

最終更新日:Dec 16, 2024

MaxCompute SQLは、ビジネス要件に基づいてデータを暗号化または復号化するために使用できる暗号化および復号化機能を提供します。 このトピックでは、MaxCompute SQLでサポートされている暗号化および復号化関数の構文とパラメーターについて説明します。 このトピックでは、暗号化および復号化関数を使用してデータを開発する方法の例も示します。

MaxComputeデータの暗号化および復号化機能

  • 単一キーの暗号化と復号化: システムは、指定された列の暗号化または復号化のために単一のランダムキーを生成します。 生成されたキーを保存する必要があります。

    单一密钥加密.jpg

    次の表に、MaxCompute SQLでサポートされている単一キーの暗号化および復号化機能を示します。

    関数

    説明

    SYM_DECRYPT

    ランダムキーを使用して、テーブルの指定された列の暗号化されたデータを復号し、BINARY型のプレーンテキストを返します。

    SYM_ENCRYPT

    ランダムキーを使用して、テーブルの指定された列のデータを暗号化し、BINARY型の暗号文を返します。

  • マルチキーの暗号化と復号化: キーセットはMaxComputeのキー管理オブジェクトであり、1つ以上のキーを格納できます。 キーセットにキーを手動で追加したり、キーを回転させたり、元のキーを表示したりできます。

    多密钥加密.jpg

    次の表に、MaxCompute SQLでサポートされているマルチキー暗号化および復号化機能を示します。

    関数

    説明

    NEW_KEYSET

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

    ADD_KEY_TO_KEYSET

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

    KEYSET_TO_JSON

    BINARY型のキーセットをJSON型の読み取り可能なキーセットに変換します。 変換後、キーセットの詳細を表示できます。

    KEYSET_FROM_JSON

    JSON型のキーセットをBINARY型のキーセットに変換します。

    ROTATE_KEYSET

    システムが自動的に新しいキーを生成し、新しいキーをマスターキーとして構成することを許可します。

  • Key Management Service (KMS) ベースのマルチキー暗号化および復号化: MaxComputeは、KMSベースのデータ暗号化および復号化をサポートしています。 システムは、データの暗号化と復号化の基本キーセットを自動的に生成します。 基本キーセットは、KMSキーと組み合わされて、暗号化されたキーセットを生成する。 Keyset_KMSを保存する必要があります。 データを復号化するには、Keyset_KMSを提供する必要があります。 システムは、KMSキーに基づいてKeyset_KMSを復号して基本キーセットを復元し、基本キーセットを使用してデータを復号します。

    keyset.jpg

    次の表に、MaxCompute SQLでサポートされているKMSベースのマルチキー暗号化および復号化機能を示します。

    関数

    説明

    NEW_WRAPPED_KEYSET

    Key Management Service (KMS) カスタマーマスターキー (CMK) ARNを使用できるロールのAlibaba Cloud Resource Name (ARN) をMaxComputeに仮定し、ラップされたキーセットを作成します。 ロールARNは、role_arnによって指定される。 KMS CMK ARNは、kms_cmk_arnによって指定される。 この関数は、role_chainに基づいてキーセットを復号化する権限を他のAlibaba Cloudアカウントに付与するためにも使用されます。

    REWRAP_キーセット

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

    ROTATE_WRAPPED_KEYSET

    暗号化されたキーセットを復号し、キーローテーションを実装し、新しいキーを使用してキーセットを暗号化します。

    USE_WRAPPED_キーセット

    ラップされたキーセットを、暗号化または復号化関数のパラメーターとして使用される基本キーセットに変換します。 USE_WRAPPED_KEYSET関数を使用して、ラップされたキーセットに関する情報を取得し、その後のキーセットのメンテナンスのために情報を保存することもできます。

    ENHANCED_SYM_ENCRYPT

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

    ENHANCED_SYM_DECRYPT

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

使用上の注意

MaxCompute V2.0は追加機能を提供します。 使用する関数にMaxCompute V2.0データ型エディションでサポートされている新しいデータ型が含まれている場合は、SETステートメントを実行してMaxCompute V2.0データ型エディションを有効にする必要があります。 新しいデータ型には、TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP、およびBINARYが含まれます。

  • セッションレベル: セッションレベルでMaxCompute V2.0データ型エディションを有効にするには、実行するsql文の前にset odps. SQL. type.system.odps2=true; を追加し、それらを一緒にコミットして実行する必要があります。

  • プロジェクトレベル: プロジェクトの所有者は、次のコマンドを実行して、プロジェクトの要件に基づいてプロジェクトのMaxCompute V2.0データ型エディションを有効にできます。 設定は10〜15分後に有効になります。 プロジェクトレベルでMaxCompute V2.0データ型エディションを有効にするには、次のステートメントを実行します。

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

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

SYM_DECRYPT

  • 構文

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

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

  • パラメーター

    • value_to_decrypt: 必須です。 復号化するデータ。 BINARY型のデータのみを復号化できます。

    • key: 必須です。 データの復号化に使用されるキー。 キーはBINARY型でなければならず、長さは256ビットでなければならない。

    • encryption_method: オプション。 データの復号化に使用される方法。暗号化方法と同じでなければなりません。

    • additional_authenticated_data: オプションです。 データの信頼性と完全性を検証するために使用される追加の認証データ (AAD) 。 このパラメーターは、データ暗号化中にAADを使用する場合に必要です。

  • 戻り値

    BINARY型の平文が返されます。 CAST関数を使用して、ビジネス要件に基づいてBINARY型をSTRING型に変換できます。

  • 次の例は、SYM_ENCRYPTを使用して暗号化されたデータを復号化する方法を示しています。

    • 例1: 平文キーを使用して暗号化されたデータを復号化します。

      • データを復号化するには、AEAD (authenticated encryption with associated data) 暗号化アルゴリズムを使用します。

        -- Decrypt data in the id_card_no column.
        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;
        
        -- Query the decrypted plaintext data.
        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 |
        +------------+------+--------+------------+-------------+
      • AAD暗号化アルゴリズムを使用してデータを復号化します。

        -- Decrypt data in the id_card_no column.
        insert overwrite table mf_user_info
        select id,
                     name,
                     gender,
               sym_decrypt(unbase64(id_card_no),
                           cast('b75585cf321cdcad42451690cdb7bfc4' as binary),
                           'AES-GCM-256',
                               'test'
                          )as id_card_no,
               tel
        from mf_user_info;
        
        -- Query the decrypted plaintext data.
        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: キーテーブルを使用して暗号化されたデータを復号化します。

      -- Decrypt data in the specified column of the mf_user_info table.
      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;
      
      -- Query the decrypted data.
      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: 必須です。 データの暗号化に使用するキー。 キーはBINARY型でなければならず、長さは256ビットでなければならない。

    • encryption_method: オプション。 暗号化方法。 AES-GCM-256暗号化アルゴリズムのみが使用可能で、デフォルト値として使用されます。

    • additional_authenticated_data: オプションです。 AADは、データの信頼性と整合性を検証するために使用されます。 このパラメーターは、AES GCMなどのAEAD (authenticated encryption with associated data) 暗号化アルゴリズムを使用する場合にのみ有効になります。

  • 戻り値

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

    • 戻り値には、Initialization Vector (IV) 、暗号文、およびAEADタグが順番に含まれます。

    • 同じ平文を暗号化するために同じキーを使用しても、戻り値はランダムで毎回異なります。

  • サンプルデータ

    -- Create a table.
    create table mf_user_info(id bigint,
                              name string,
                              gender string,
                              id_card_no string,
                              tel string);
    -- Insert data into external table.
    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");
    -- Query data from the table.
    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アルゴリズムを使用してデータを暗号化します。

      -- Encrypt data in the id_card_no column.
      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|
      +------------+------+--------+------------+-----+
    • AADアルゴリズムを使用してデータを暗号化します。

      -- Encrypt data in the id_card_no column.
      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   | frgJZAEAQMeEuHqpS8lK9VxQhgPYpZ317V+oUla/xEc= | 13900001234|
      | 2          | allen| male   | frgJZAIAQMeEuHqpLeXQfETsFSLJxBwHhPx6tpzWUg4= | 13900001111|
      | 3          | kate | female | frgJZAMAQMeEuHqpdphXAU6iWelWenlDnVy+R0HMvAY= | 13900002222|
      | 4          | annie| female | frgJZAQAQMeEuHqpR5c8bj21dYCeM0C25bLRZIrP71c= | 13900003333|
      +------------+------+--------+------------+-----+
  • 例2: キーテーブルを使用してデータを暗号化します。

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

    • 原則

      • データ暗号化では、MaxComputeテーブルにキーを格納し、MaxComputeキーテーブルと、暗号化する列データを持つテーブルに対してJOIN操作を実行できます。 これにより、キーが渡されたときにキーが漏洩するのを防ぎます。

      • データの復号化の場合、プロジェクト管理者は、キーテーブルを使用するユーザーにMaxComputeキーテーブルに対する権限を付与しません。 代わりに、プロジェクト管理者は安全なビューを作成し、ユーザーがキーテーブルにアクセスし、ビューに基づいてデータを復号化するための復号化関数を呼び出すことを許可します。 ユーザーは、ビューのアクセス許可を取得した後にのみデータを復号できます。 キーのプレーンテキストはビューに含まれません。 このように、キーは漏らされません。

    • 注意事項

      • 顧客はキーの作成と管理を担当します。 MaxComputeは、キーまたはキーと暗号文の間のマッピングを保存しません。 キーが失われた場合、データは復号化できません。

      • データのセキュリティを確保するために、平文キーを含むパラメーターを渡すときは特別な処理が必要です。

      • 暗号化するデータがBINARY型の場合、set odps.sql.type.system.odps2=true; コマンドを実行して、MaxCompute V2.0データ型エディションを有効にする必要があります。

    サンプル文:

    -- Create a key table.
    create table mf_id_key(id bigint,key binary);
    -- Insert a key into the key table.
    insert overwrite table mf_id_key
      values (1,cast('b75585cf321cdcad42451690cdb7bfc4' as binary));
    -- Query the key.
    select * from mf_id_key;
    +------------+------+
    | id         | key  |
    +------------+------+
    | 1          | b75585cf321cdcad42451690cdb7bfc4 |
    +------------+------+
    
    -- Query data from the mf_user_info table.
    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|
    +------------+------+--------+------------+------------+
    
    -- Encrypt data in the specified column of the mf_user_info table.
    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;
    
    -- Query the encrypted data.
    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_キーセット

  • 構文

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

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

  • パラメーター

    • key_type: 必須です。 このパラメーターは、新しいキーセットのデータキーのアルゴリズムタイプを指定します。 有効な値: AES-GCM-256AES-SIV-CMAC-128、およびAES-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-128、およびAES-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>)
  • 説明

    JSON型のキーセットをBINARY型のキーセットに変換します。

  • パラメーター

    json_keyset: 必須です。 このパラメーターは、JSON型のキーセットを指定します。

  • 戻り値

    BINARY型のキーセットが返されます。

    説明

    HEX関数を使用してBINARY型をSTRING型に変換したり、UNHEX関数を使用してビジネス要件に基づいてSTRING型をBINARY型に変換したりできます。

  • 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-128、およびAES-SIV-CMAC-256

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

  • 戻り値

    BINARY型のキーセットが返されます。

    説明

    HEX関数を使用してBINARY型をSTRING型に変換したり、UNHEX関数を使用してビジネス要件に基づいてSTRING型をBINARY型に変換したりできます。

  • 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とKMSを使用してキーを管理できます。 KMSキーに基づいてキーセットを暗号化することで、ラップされたキーセットを生成できます。 ラップされたキーセットを生成した後、KMSキーに基づく後続のデータ暗号化および復号化のために、ラップされたキーセットを手動で記録および保存する必要があります。 暗号化または復号化プロセスでは、すべてのキーがシステムによって自動的に生成されます。 暗号化と復号化に使用される元のキーを表示することはできません。 このようにして、データをより安全な方法で暗号化または復号することができる。 NEW_WRAPPED_KEYSET関数は、KMSカスタマーマスターキー (CMK) ARNを使用してMaxComputeにラップされたキーセットを作成できるロールのAlibaba Cloud Resource Name (ARN) を想定します。 ロールARNは、role_arnによって指定される。 KMS CMK ARNは、kms_cmk_arnによって指定される。 この関数は、他のAlibaba Cloudアカウントに、role_chainに基づいてラップされたキーセットを使用する権限を付与するためにも使用されます。

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

    • KMSがアクティブ化され、KMSインスタンスが作成されます。

    • KMSキーが作成され、kms_cmk_arnで指定されたキーARNが取得されます。

    • RAMロールが作成され、MaxComputeがKMSへのアクセスを許可されます。 RAMロールのARNが取得されます。 ロールARNは、role_arnによって指定される。

  • パラメーター

    • 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はロール名を指定します。

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

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

    • role_chain: オプションです。 このパラメーターには、ユーザー権限付与の役割チェーンを指定します。 パラメータ値は、'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3 >},...' の形式である。 ロールチェーンを使用して、Alibaba Cloudアカウント全体でラップされたキーセットを呼び出すことができます。

  • 戻り値

    BINARY型のラップされたキーセットが返されます。 HEX関数を使用して、ビジネス要件に基づいて、BINARY型のラップされたキーセットをSTRING型のキーセットに変換できます。 HEX関数の詳細については、「HEX」をご参照ください。

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

      select hex(NEW_WRAPPED_KEYSET('acs:kms:cn-hangzhou:1**************7:key/key-hzz****************1t','acs:ram::1**************7:role/kms', 'AES-GCM-256', 'hello'));

      次の応答が返されます。

      +-----+
      | _c0 |
      +-----+
      | 613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D78434A373434582F54756C5A547A4E69337562786F4B3543412F616655573262786D345A41306B464C674A2F5758324F4E514E346746306F303236376D35335A6471797237366E57565A6836387A52687A4A673945784B6E677568794A376E6F4A68573677684B5A555A42786E4A383742536C4D46326A374F71474F4C414A6B665779694557394D58664876576E306C6D49777052746A77325643707A4259517277327944354343396C50586F31346A4351506253612F3044394C4C6E6E622F747A6B57316E4F564A6C5359354B35526130537565584F33507856773D |
      +-----+
    • ラップされたキーセットを作成し、他のロールがラップされたキーセットを呼び出すことを許可します。

      select hex(NEW_WRAPPED_KEYSET('acs:kms:cn-hangzhou:1**************7:key/key-hzz****************1t','acs:ram::1**************7:role/kms', 'AES-GCM-256', 'hello','acs:ram::1**************7:role/kms1'));

      次の応答が返されます。

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

REWRAP_キーセット

  • 構文

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

    MaxComputeとKMSを使用してキーを管理できます。 KMSキーに基づいてキーセットを暗号化することで、ラップされたキーセットを生成できます。 REWRAP_KEYSET関数は、新しいKMSキーを使用して、NEW_WRAPPED_keyset関数を使用して生成されたラップされたキーセットを再暗号化します。

    REWRAP_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キーと新しいKMSキーの両方に対する権限を持つRAMロールのARNを指定します。 RAMロールはMaxComputeによって引き受けられる必要があります。 パラメーター値の形式は 'acs:ram :${< userAID >}: role/${< roleName>}' です。 userAIDはユーザーIDを指定し、roleNameはロール名を指定します。

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

    • role_chain: オプションです。 このパラメーターには、ユーザー権限付与の役割チェーンを指定します。 パラメータ値は、'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3 >},...' の形式である。 ロールチェーンを使用して、Alibaba Cloudアカウント全体でラップされたキーセットを呼び出すことができます。

  • 戻り値

    BINARY型のラップされたキーセットが返されます。 HEX関数を使用して、ビジネス要件に基づいて、BINARY型のラップされたキーセットをSTRING型のキーセットに変換できます。 HEX関数の詳細については、「HEX」をご参照ください。

  • 説明

    次のサンプルコードには変数が含まれています。 スクリプトモードでコードを実行するか、SQL文の変数を実際の値に置き換える必要があります。

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

      @origin_key := unhex('<wrapped_keyset>'); 
      select hex(REWRAP_KEYSET('acs:kms:cn-hangzhou:1**************7:key/key-hzz******************', 'acs:ram::1**************7:role/kms', @origin_key));
    • ラップされたキーセットを再暗号化し、他のAlibaba Cloudアカウントがラップされたキーセットを呼び出すことを許可します。

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

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キーと新しいKMSキーの両方に対する権限を持つRAMロールのARNを指定します。 パラメーター値の形式は 'acs:ram :${< userAID >}: role/${< roleName>}' です。 userAIDはユーザーIDを指定し、roleNameはロール名を指定します。

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

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

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

    • role_chain: オプションです。 このパラメーターには、ユーザー権限付与の役割チェーンを指定します。 パラメータ値は、'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3 >},...' の形式である。 ロールチェーンを使用して、Alibaba Cloudアカウント全体でラップされたキーセットを呼び出すことができます。

  • 戻り値

    BINARY型のラップされたキーセットが返されます。 HEX関数を使用して、ビジネス要件に基づいて、BINARY型のラップされたキーセットをSTRING型のキーセットに変換できます。 HEX関数の詳細については、「HEX」をご参照ください。

  • 説明

    次のサンプルコードには変数が含まれています。 スクリプトモードでコードを実行するか、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 Resource Name (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はロール名を指定します。

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

    • role_chain: オプションです。 このパラメーターには、ユーザー権限付与の役割チェーンを指定します。 パラメータ値は、'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3 >},...' の形式である。 ロールチェーンを使用して、Alibaba Cloudアカウント全体でラップされたキーセットを呼び出すことができます。

  • 戻り値

    STRUCTタイプの感度が低下したキーセットが返されます。 get_json_object関数を使用して、ビジネス要件に基づいてキーセット関連のフィールドを取得できます。

  • 説明

    次のサンプルコードには変数が含まれています。 スクリプトモードでコードを実行するか、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関数を使用して、指定された基本キーセットまたはラップされたキーセットを使用してデータを暗号化できます。 キー管理サービス (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 a table.
    create table mf_user_info(id bigint,
                              name string,
                              gender string,
                              id_card_no string,
                              tel string);
    -- Insert data into the table.
    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");
    -- Query data from the table.
    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;
      
      -- The following result is returned:
      +------------+------+--------+------------+-----+
      | 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 a table.
        create table mf_keyset_kms (id string,ks binary);
        -- Create a wrapped keyset and write it to the table.
        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');
        -- Query data from the table.
        select id,hex(ks) from mf_keyset_kms;
        
        -- The following result is returned:
        +----+-----+
        | 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) キーに基づいて既存のキーセットを暗号化することにより、ラップされたキーセットを作成できます。 基本キーセットと比較して、KMSでラップされたキーセットを使用して、より安全な方法でキーを管理できます。

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

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

    • ラップされたキーセットを使用する権限を持つロールがアカウントに割り当てられます。 ラップされたキーセットを使用してデータを復号化する場合は、この前提条件を満たす必要があります。

  • パラメーター

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

      重要

      データの復号化に使用される基本キーセットまたはラップされたキーセットは、データの暗号化に使用されるものと同じでなければなりません。

    • ciphertext: 必須です。 このパラメーターは、指定されたキーセットを使用して暗号化されるBINARY型の暗号文を指定します。

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

  • 戻り値

    BINARY型の平文が返されます。

  • サンプルデータ

    -- Create a table.
    create table mf_user_info(id bigint,
                              name string,
                              gender string,
                              id_card_no string,
                              tel string);
    -- Insert data into the table.
    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");
    -- Query data from the table.
    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,
             ENHANCED_SYM_DECRYPT(unhex ('0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64'), unbase64(id_card_no) )as id_card_no,
            tel
      from mf_user_info;

      次のサンプルステートメントは、復号結果を照会します。

      select * from mf_user_info;
      
      -- The following result is returned:
      +------------+------+--------+------------+------------+
      | 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 |
      +------------+------+--------+------------+------+

関連ドキュメント