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

MaxCompute:SYM_ENCRYPT

最終更新日:May 23, 2025

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

使用上の注意

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 データ型エディションを有効にする際に注意すべき事項の詳細については、「データ型エディション」をご参照ください。

構文

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) 暗号化アルゴリズムのみがサポートされています。

戻り値

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 テーブルに格納し、MaxCompute キーテーブルと、列データを暗号化するテーブルに対して JOIN 操作を実行できます。これにより、キーが渡される際のキーの漏洩を防ぎます。

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

  • 注意事項

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

    • データのセキュリティを確保するために、プレーンテキストキーを含むパラメーターを渡す際には特別な処理が必要です。

    • 暗号化するデータが BINARY 型の場合、set odps.sql.type.system.odps2=true; コマンドを実行して MaxCompute V2.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 |
+------------+------+

-- 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 テーブルの指定された列のデータを暗号化します。
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|
+------------+------+--------+------------+-----+

関連関数

SYM_ENCRYPT は復号関数です。 暗号化関数と復号関数の詳細については、「暗号化関数と復号関数」をご参照ください。