このトピックでは、ENHANCED_SYM_DECRYPT 関数を使用して、指定されたキーセットでデータを復号する方法について説明します。
背景情報と前提条件
MaxCompute の ENHANCED_SYM_DECRYPT 関数を使用すると、指定された基本キーセットまたはラップされたキーセットでデータを復号できます。復号に使用するキーセットは、暗号化に使用したものと同じである必要があります。ラップされたキーセットは、既存のキーセットを Key Management Service (KMS) キーで暗号化することによって作成されます。KMS でラップされたキーセットを使用すると、基本キーセットよりも安全にキーを管理できます。
ENHANCED_SYM_DECRYPT 関数を使用する前に、次の操作を完了してください。
NEW_KEYSETまたはNEW_WRAPPED_KEYSET関数を使用して、基本キーセットまたはラップされたキーセットを生成します。詳細については、「NEW_KEYSET」および「NEW_WRAPPED_KEYSET」をご参照ください。ラップされたキーセットを使用してデータを復号する場合、そのラップされたキーセットに関連付けられているロールの権限が必要です。詳細については、「KMS の有効化と設定」をご参照ください。
構文
BINARY ENHANCED_SYM_DECRYPT(BINARY <keyset> , BINARY <ciphertext> [,string <additional_data>])パラメーター
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| +------------+------+--------+------------+------------+ラップされたキーセットを使用して、
telテーブルの暗号化されたmf_user_info列を復号します: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 | +------------+------+--------+------------+------+