全部產品
Search
文件中心

MaxCompute:加密函數

更新時間:Jun 19, 2024

MaxCompute SQL提供了加密函數和解密函數,您可以根據實際需要選擇合適的函數,進行加密或解密。本文為您提供MaxCompute SQL支援的加密函數的命令格式、參數說明及樣本,指導您使用加密函數完成開發。

MaxCompute資料加密能力介紹

  • 單一祕密金鑰加密:支援產生單一密鑰,需要自行儲存產生的密鑰,適用於對指定列做隨機性加密或解密。

    單一祕密金鑰加密.jpg

    MaxCompute SQL單一密鑰加解密函數介紹如下。

    函數

    功能

    SYM_DECRYPT

    對錶裡的指定已經隨機性加密的列做解密,返回BINARY類型的明文。

    SYM_ENCRYPT

    對錶裡的指定列做隨機性加密,返回BINARY類型的密文。

  • 多祕密金鑰加密:MaxCompute密鑰管理對象Keyset,可以存放1個或多個密鑰,您可以手動在Keyset中增加密鑰,密鑰的輪轉和查看原始密鑰。

    多祕密金鑰加密.jpg

    MaxCompute SQL多密鑰加解密函數介紹如下。

    函數

    功能

    NEW_KEYSET

    根據指定的演算法類型,建立對應的密鑰Keyset。

    ADD_KEY_TO_KEYSET

    在Keyset中新增密鑰,並將新增的密鑰設定為主要金鑰。

    KEYSET_TO_JSON

    將BINARY類型的密鑰Keyset轉化為可讀的JSON格式,以便查看密鑰Keyset詳情。

    KEYSET_FROM_JSON

    將JSON類型的keyset轉化為BINARY類型。

    ROTATE_KEYSET

    系統自動生產一個新密鑰並將新密鑰設定為主要金鑰。

  • 結合KMS封裝的多祕密金鑰加密:MaxCompute支援結合KMS進行資料加密,系統會自動產生加解密資料的密鑰集(Keyset),該Keyset與KMS密鑰結合產生Keyset_KMS,使用者需要儲存keyset_KMS。若需要資料解密時,需要提供Keyset_KMS,然後系統會結合KMS金鑰組Keyset_KMS進行解密,還原成加密資料的Keyset並對資料進行解密。

    keyset.jpg

    MaxCompute SQL結合KMS封裝的多密鑰加解密函數介紹如下。

    函數

    功能

    NEW_WRAPPED_KEYSET

    將有權使用KMS使用者主要金鑰資源名稱(kms_cmk_arn)角色的role_arn授權給MaxCompute,用來建立一個封裝密鑰集(KEYSET),也可通過角色鏈(role_chain)方式授權給其他阿里雲帳號解密KEYSET的許可權。

    REWRAP_KEYSET

    通過指定的KMS密鑰重新加密封裝密鑰集(KEYSET)。

    ROTATE_WRAPPED_KEYSET

    解密已有的加密金鑰集(KEYSET),並進行密鑰輪轉,然後通過新祕密金鑰加密。

    USE_WRAPPED_KEYSET

    將封裝密鑰集轉換為基礎密鑰集,作為加解密函數的參數使用,您也可通過此函數,獲得封裝密鑰集相關的資訊,並儲存起來,便於維護。

    ENHANCED_SYM_ENCRYPT

    指定密鑰集進行資料加密。

    ENHANCED_SYM_DECRYPT

    指定密鑰集進行資料解密。

注意事項

升級到MaxCompute 2.0後,產品擴充了部分函數。如果您用到的函數涉及新資料類型(TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP或BINARY),在使用擴充函數時,需要執行如下語句開啟新資料類型開關:

  • Session層級:如果使用新資料類型,您需要在SQL語句前加上set odps.sql.type.system.odps2=true;,並與SQL語句一起提交執行。

  • Project層級:Project Owner可根據需要對Project進行設定,等待10~15分鐘後才會生效。命令如下。

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

    setproject的詳細說明請參見專案空間操作。關於開啟Project層級資料類型的注意事項,請參見資料類型版本說明

SYM_DECRYPT

  • 命令格式

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

    對錶裡的指定已經隨機性加密的列做解密。

  • 參數說明

    • value_to_decrypt:必填。待解密資料。目前只支援對BINARY類型的資料進行解密。

    • key:必填。解密使用的密鑰。支援的資料類型為BINARY,長度為256bits。

    • encryption_method:可選。資料用指定模式加密,解密時需要選擇同樣的模式進行解密。

    • additional_authenticated_data:可選。附加驗證資料AAD,可以用來驗證資料的真實性和完整性,資料在加密時用了ADD,解密時就需要輸入ADD。

  • 傳回值說明

    返回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 |
        +------------+------+--------+------------+-------------+
      • 使用AAD密碼編譯演算法進行解密。

        --對id_card_no解密
        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;
        
        --查詢解密後的明文資料
        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:必填。加密使用的密鑰。支援的資料類型為BINARY,長度為256bits。

    • encryption_method:可選。加密模式選擇。目前只提供了一種加密模式,即AES-GCM-256密碼編譯演算法,預設使用AES-GCM-256。

    • additional_authenticated_data:可選。附加驗證資料AAD,可以用來驗證資料的真實性和完整性。目前只支援AEAD的密碼編譯演算法,比如AES GCM才支援AAD。

  • 傳回值說明

    返回BINARY類型的密文。

    • 傳回值中按順序包含初始向量(IV),密文,帶附加資料的加密和驗證演算法標籤(AEAD Tag)。

    • 相同的明文和密碼,每次產生的密文也是隨機的不同的。

  • 樣本資料

    --建立表
    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|
      +------------+------+--------+------------+-----+
    • 使用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   | frgJZAEAQMeEuHqpS8lK9VxQhgPYpZ317V+oUla/xEc= | 13900001234|
      | 2          | allen| male   | frgJZAIAQMeEuHqpLeXQfETsFSLJxBwHhPx6tpzWUg4= | 13900001111|
      | 3          | kate | female | frgJZAMAQMeEuHqpdphXAU6iWelWenlDnVy+R0HMvAY= | 13900002222|
      | 4          | annie| female | frgJZAQAQMeEuHqpR5c8bj21dYCeM0C25bLRZIrP71c= | 13900003333|
      +------------+------+--------+------------+-----+
  • 樣本2:基於密鑰表加密

    基於樣本資料,藉助構造密鑰表,實現密鑰管理。

    • 原理。

      • 對於資料加密情境,您可以將金鑰儲存區在MaxCompute表中,在進行資料加密時,通過JOIN加密表的方式,完成資料加密。這樣可以避免由於在查詢中直接傳遞密鑰導致的泄漏問題。

      • 在資料解密時,專案系統管理員不要直接將密鑰(表)授權給資料使用方,而是應該建立一個(secure)view,在view內部通過訪問解密表並調用解密函數,完成資料解密。通過控制view許可權來控制資料使用方對資料明文的訪問。同時在view中不包含密鑰明文,避免密鑰泄漏。

    • 注意事項。

      • 整套方案密鑰的建立管理都來自客戶,需要您自行儲存關鍵密鑰,平台不儲存密鑰以及密鑰與密文的直接對應關係。密鑰一旦丟失,會導致無法解密資料。

      • 清除金鑰參數傳遞存在泄漏風險,需要您在使用過程中進行特殊處理。

      • 涉及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>])
  • 命令說明

    根據指定的演算法類型,建立對應的密鑰Keyset。

  • 參數說明

    • key_type:必填,建立資料密鑰時,指定的演算法類型。目前支援:AES-GCM-256AES-SIV-CMAC-128AES-SIV-CMAC-256

    • description:可選,資料密鑰的描述。

  • 傳回值說明

    返回BINARY類型的KeySet。

    說明

    若您有需要,可以通過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中新增密鑰,並將新增的密鑰設定為主要金鑰。

  • 參數說明

    • keyset:必填,已有密鑰,類型為:BINARY

    • key_type:必填:添加密鑰的演算法類型。目前支援:AES-GCM-256AES-SIV-CMAC-128AES-SIV-CMAC-256

    • raw_key:必填,待新增的密鑰,並將此密鑰設定為主要金鑰,類型為:BINARY

    • description:可選,對資料密鑰的描述。

  • 傳回值說明

    返回BINARY類型的KeySet。

    說明

    若您有需要,可以通過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類型的keyset轉化為BINARY類型。

  • 參數說明

    json_keyset:必填,JSON類型的Keyset。

  • 傳回值說明

    返回BINARY類型的KeySet。

    說明

    若您有需要,可以通過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類型的密鑰Keyset轉化為可讀的JSON格式,以便查看密鑰Keyset詳情。

  • 參數說明

    keyset:必填,已有的Keyset,類型為:BINARY

  • 傳回值說明

    返回JSON格式的Keyset,部分參數說明如下:

    • 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:必填,待更新的Keyset,類型為BINARY

    • key_type:必填,新的密鑰演算法類型,目前支援:AES-GCM-256AES-SIV-CMAC-128AES-SIV-CMAC-256

    • description:可選,資料密鑰的描述。

  • 傳回值說明

    返回BINARY類型的KeySet。

    說明

    若您有需要,可以通過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支援結合Key Management Service做密鑰管理,通過KMS金鑰組產生的密鑰集(KEYSET)再次進行加密,產生封裝密鑰集。封裝密鑰集需要您在產生後自行記錄儲存,使用封裝密鑰集對資料加解密,需要結合KMS密鑰進行,此過程所有密鑰由系統自動產生,不可查看原始用於資料加解密的密鑰,可以更加安全地實現資料加解密。NEW_WRAPPED_KEYSET函數將有權使用KMS使用者主要金鑰資源名稱(kms_cmk_arn)角色的role_arn授權給MaxCompute,用來建立一個封裝密鑰集,也支援通過角色鏈(role_chain)方式授權給其他阿里雲帳號的角色使用封裝密鑰集的許可權。

    使用NEW_WRAPPED_KEYSET函數前需要完成以下操作:

    • 開通KMS建立密鑰執行個體。

    • 建立KMS密鑰並擷取密鑰ARN資訊(kms_cmk_arn)。

    • 建立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許可權的RAM角色的ARN資訊,該角色需授權給MaxCompute,格式為'acs:ram:${<userAID>}:role/${<roleName>}',包含使用者ID、角色名稱,擷取請參見開通KMS並完成配置

    • key_type:必填,新產生的KEYSET密鑰演算法類型。目前支援:AES-GCM-256AES-SIV-CMAC-128AES-SIV-CMAC-256

    • description: 可選,密鑰的描述資訊。

    • role_chain:可選,使用者授權角色鏈,格式為'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3>},...'。通過角色鏈的方式,支援跨阿里雲帳號的封裝密鑰集調用。

  • 傳回值說明

    返回BINARY類型的加密KEYSET,若有需要您可以通過HEX函數將BINARY類型轉換為STRING類型,詳情請參見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_KEYSET

  • 命令格式

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

    MaxCompute支援結合Key Management Service做密鑰管理,通過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>},...'。通過角色鏈的方式,支援跨阿里雲帳號的封裝密鑰集調用。

  • 傳回值說明

    返回BINARY類型的加密KEYSET,若有需要您可以通過HEX函數將BINARY類型轉換為STRING類型,詳情請參見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));
    • 重新加密封裝密鑰集,並允許其他阿里雲帳號的角色調用:

      @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支援結合Key Management Service做密鑰管理,通過KMS金鑰組產生的密鑰集(KEYSET)再次進行加密,產生封裝密鑰集。ROTATE_WRAPPED_KEYSET函數可以對NEW_WRAPPED_KEYSET函數產生的封裝密鑰集使用新的KMS密鑰和密鑰演算法重新進行封裝加密。即ROTATE_WRAPPED_KEYSET函數相比REWRAP_KEYSET函數還可以對密鑰演算法進行更新。

    使用ROTATE_WRAPPED_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資訊,格式為'acs:ram:${<userAID>}:role/${<roleName>}',包含使用者ID、角色名稱,擷取請參見開通KMS並完成配置

    • wrapped_keyset:必填,需要重新加密的封裝密鑰集。

    • key_type:必填,新產生的KEYSET密鑰演算法類型。目前支援:AES-GCM-256AES-SIV-CMAC-128AES-SIV-CMAC-256

    • description: 可選項,密鑰的描述資訊。

    • role_chain:可選,使用者授權角色鏈,格式為'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3>},...'。通過角色鏈的方式,支援跨阿里雲帳號的封裝密鑰集調用。

  • 傳回值說明

    返回BINARY類型的加密KEYSET,若有需要您可以通過HEX函數將BINARY類型轉換為STRING類型,詳情請參見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支援結合Key Management Service做密鑰管理,通過KMS金鑰組產生的密鑰集(KEYSET)再次進行加密,產生封裝密鑰集。USE_WRAPPED_KEYSET函數將NEW_WRAPPED_KEYSET函數產生的封裝密鑰集轉換為基礎密鑰集,作為加解密函數的參數,用於對資料加解密。您也可通過此函數,獲得封裝密鑰集相關的資訊,並儲存起來,便於後期維護。

    使用USE_WRAPPED_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>},...'。通過角色鏈的方式,支援跨阿里雲帳號的封裝密鑰集調用。

  • 傳回值說明

    返回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金鑰組產生的密鑰集(KEYSET)再次進行加密,結合Key Management Service做密鑰管理,相比基礎密鑰集會更加安全。

    使用ENHANCED_SYM_ENCRYPT函數前需要完成以下操作:

    • 已有通過NEW_KEYSETNEW_WRAPPED_KEYSET函數產生的基礎密鑰集或封裝密鑰集,詳情請參見NEW_KEYSETNEW_WRAPPED_KEYSET

    • 如果使用封裝密鑰集加密資料,需要先使用USE_WRAPPED_KEYSET函數擷取基礎密鑰集,基礎密鑰集作為ENHANCED_SYM_ENCRYPT函數的參數進行資料加密。同時需要有使用封裝密鑰集對應角色的許可權,操作詳情請參見開通KMS並完成配置

  • 參數說明

    • 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. 產生封裝密鑰集並寫入表中:

        --建立表並把加密後的keyset寫入
        create table mf_keyset_kms (id string,ks binary);
        --生產keyset加密後寫入表
        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_KEYSETNEW_WRAPPED_KEYSET函數產生的基礎密鑰集或封裝密鑰集,詳情請參見NEW_KEYSETNEW_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,
             ENHANCED_SYM_DECRYPT(unhex ('0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64'), unbase64(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   | 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 |
      +------------+------+--------+------------+------+

相關文檔