MaxCompute SQL menyediakan fungsi enkripsi dan dekripsi untuk mengamankan data Anda. Topik ini menjelaskan sintaks, parameter, dan contoh penggunaan fungsi enkripsi.
Enkripsi data di MaxCompute
Enkripsi kunci tunggal: Memungkinkan Anda menghasilkan satu kunci untuk mengenkripsi atau mendekripsi kolom tertentu secara acak. Anda bertanggung jawab menyimpan kunci yang dihasilkan.

Tabel berikut menjelaskan fungsi enkripsi dan dekripsi kunci tunggal di MaxCompute SQL.
Function
Description
Mendekripsi kolom yang telah dienkripsi secara acak dan mengembalikan teks biasa sebagai tipe BINARY.
Mengenkripsi kolom tertentu secara acak dan mengembalikan ciphertext sebagai tipe BINARY.
Enkripsi multi-kunci: Keyset adalah objek manajemen kunci di MaxCompute yang dapat menampung satu atau beberapa kunci. Anda dapat menambahkan kunci ke keyset secara manual, melakukan rotasi kunci, dan melihat kunci aslinya.

Tabel berikut menjelaskan fungsi enkripsi dan dekripsi multi-kunci di MaxCompute SQL.
Function
Description
Membuat keyset berdasarkan tipe algoritma yang ditentukan.
Menambahkan kunci baru ke keyset dan menetapkannya sebagai kunci master.
Mengonversi keyset bertipe BINARY ke format JSON yang dapat dibaca manusia sehingga Anda dapat melihat detailnya.
Mengonversi string keyset dari format JSON ke tipe BINARY.
Menghasilkan kunci baru dan menetapkannya sebagai kunci master.
Enkripsi multi-kunci dengan integrasi KMS: MaxCompute terintegrasi dengan Key Management Service (KMS) untuk enkripsi data. MaxCompute menghasilkan keyset dasar dan mengenkripsinya dengan customer master key (CMK) dari KMS untuk membuat wrapped keyset. Anda bertanggung jawab menyimpan wrapped keyset ini. Untuk mendekripsi data, Anda harus menyediakan wrapped keyset tersebut. MaxCompute kemudian menggunakan CMK KMS untuk mendekripsi wrapped keyset menjadi keyset dasar, yang selanjutnya digunakan untuk mendekripsi data.

Tabel berikut menjelaskan fungsi enkripsi dan dekripsi multi-kunci terintegrasi KMS di MaxCompute SQL.
Function
Description
Membuat wrapped keyset baru. Operasi ini memerlukan role (ditentukan oleh
role_arn) yang memiliki izin untuk menggunakan customer master key (CMK) KMS. Secara opsional, Anda dapat menentukan role chain (ditentukan olehrole_chain) untuk mengizinkan akun Alibaba Cloud lain mendekripsi keyset tersebut.Mengenkripsi ulang wrapped keyset menggunakan kunci KMS yang ditentukan.
Mendekripsi wrapped keyset yang ada, melakukan rotasi kunci pada kunci internalnya, lalu mengenkripsinya kembali dengan kunci KMS asli.
Mendekripsi wrapped keyset menjadi keyset dasar untuk digunakan sebagai parameter dalam fungsi enkripsi atau dekripsi. Anda juga dapat menggunakan fungsi ini untuk melihat metadata wrapped keyset untuk maintenance.
Mengenkripsi data menggunakan keyset yang ditentukan.
Mendekripsi data menggunakan keyset yang ditentukan.
Catatan
Setelah Anda melakukan peningkatan ke MaxCompute 2.0, beberapa fungsi telah diperluas. Untuk menggunakan fungsi yang melibatkan tipe data baru (TINYINT, SMALLINT, INT, FLOAT, VARCHAR, TIMESTAMP, atau BINARY), jalankan pernyataan berikut untuk mengaktifkan sistem tipe data baru:
Pada tingkat sesi: Tambahkan
set odps.sql.type.system.odps2=true;sebelum pernyataan SQL Anda dan kirimkan bersama-sama.Pada tingkat proyek: Pemilik proyek dapat mengonfigurasi pengaturan ini sesuai kebutuhan. Diperlukan waktu 10 hingga 15 menit agar konfigurasi berlaku. Gunakan perintah berikut:
setproject odps.sql.type.system.odps2=true;Untuk informasi lebih lanjut tentang
setproject, lihat Project operations. Untuk catatan tentang mengaktifkan tipe data pada tingkat proyek, lihat Data type version guide.
SYM_DECRYPT
Sintaks
binary sym_decrypt(binary <value_to_decrypt>, binary <key> [,string <encryption_method> , [ string <additional_authenticated_data> ] ] )Deskripsi
Mendekripsi data yang dienkripsi secara acak di kolom tabel tertentu.
Parameter
value_to_decrypt: Wajib. Data yang akan didekripsi, harus bertipe
BINARY.key: Wajib. Kunci dekripsi. Harus berupa nilai
BINARYsepanjang 256 bit.encryption_method: Opsional. Metode enkripsi. Anda harus menentukan metode yang sama dengan yang digunakan saat mengenkripsi data.
additional_authenticated_data: Opsional. Additional authenticated data (AAD) untuk memverifikasi keaslian dan integritas data. Jika Anda memberikan AAD saat enkripsi, Anda juga harus memberikannya saat dekripsi.
Nilai kembali
Mengembalikan teks biasa sebagai tipe
BINARY. Jika diperlukan, Anda dapat menggunakan fungsiCASTuntuk mengonversi dataBINARYke tipeSTRING.Contoh
Contoh berikut menunjukkan cara mendekripsi data di tabel yang dienkripsi dengan fungsi SYM_ENCRYPT.
Contoh 1: Mendekripsi data yang dienkripsi dengan kunci teks biasa.
-
Lakukan dekripsi menggunakan algoritma enkripsi AEAD.
--Dekripsi 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; --Kueri data teks biasa setelah dekripsi select * from mf_user_info;Hasil yang dikembalikan:
+------------+------+--------+------------+-------------+ | 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 | +------------+------+--------+------------+-------------+ -
Dekripsi menggunakan algoritma AEAD dengan AAD (data autentikasi) tambahan.
--Dekripsi id_card_no insert overwrite table mf_user_info select id, name, gender, cast(sym_decrypt(unbase64(id_card_no), cast('b75585cf321cdcad42451690cdb7bfc4' as binary), 'AES-GCM-256', 'test' )as string)as id_card_no, tel from mf_user_info; --Kueri data teks biasa setelah dekripsi select * from mf_user_info;Hasil yang dikembalikan:
+------------+------+--------+------------+------------+ | 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| +------------+------+--------+------------+------------+
-
Contoh 2: Mendekripsi data yang dienkripsi dengan tabel kunci.
--Dekripsi kolom pada tabel target 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; --Kueri data setelah dekripsi select * from mf_user_info;Perintah mengembalikan hasil berikut:
+------------+------+--------+------------+-------------+ | 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
Sintaks
binary sym_encrypt(string|binary <value_to_encrypt>, binary <key> [,string <encryption_method> , [ string <additional_authenticated_data> ] ] )Deskripsi
Mengenkripsi kolom tertentu menggunakan enkripsi acak.
Parameter
value_to_encrypt: Wajib. Data yang akan dienkripsi. Hanya tipe STRING dan BINARY yang didukung.
key: Wajib. Kunci enkripsi. Panjangnya harus 256 bit dan bertipe BINARY.
encryption_method: Opsional. Metode enkripsi. Satu-satunya algoritma yang didukung adalah AES-GCM-256, yang merupakan nilai default.
additional_authenticated_data: Opsional. Additional authenticated data (AAD) yang digunakan untuk memverifikasi keaslian dan integritas data. Parameter ini hanya didukung oleh algoritma Authenticated Encryption with Associated Data (AEAD), seperti AES-GCM.
Nilai kembali
Mengembalikan ciphertext sebagai nilai BINARY.
Nilai kembali berisi initialization vector (IV), ciphertext, dan tag AEAD, dalam urutan tersebut.
Fungsi ini non-deterministik, artinya mengembalikan ciphertext yang berbeda untuk setiap enkripsi, meskipun teks biasa dan kuncinya sama.
Data contoh
--Buat tabel create table mf_user_info(id bigint, name string, gender string, id_card_no string, tel string); --Masukkan data 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"); --Kueri 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| +------------+------+--------+------------+------------+Contoh 1: Mengenkripsi data menggunakan kunci teks biasa
Berdasarkan data contoh, enkripsi kolom pada tabel
mf_user_info. Perintah sebagai berikut:-
Lakukan enkripsi menggunakan algoritma enkripsi AEAD.
--Enkripsi 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;Hasil yang dikembalikan:
+------------+------+--------+------------+-----+ | 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| +------------+------+--------+------------+-----+ -
Enkripsi menggunakan algoritma AEAD dengan AAD (data autentikasi) tambahan.
--Enkripsi 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;Hasil yang dikembalikan:
+------------+------+--------+------------+-----+ | 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| +------------+------+--------+------------+-----+
-
Contoh 2: Mengenkripsi data menggunakan tabel kunci
Berdasarkan data contoh, kelola kunci dengan membuat tabel kunci.
-
Prinsip.
-
Untuk skenario enkripsi data, Anda dapat menyimpan kunci di tabel MaxCompute dan melakukan enkripsi data dengan cara
JOINdengan tabel enkripsi. Pendekatan ini mencegah kebocoran kunci akibat melewatkan kunci secara langsung dalam kueri. -
Saat mendekripsi data, administrator proyek tidak boleh memberikan otorisasi langsung atas kunci (tabel) kepada pengguna data. Sebagai gantinya, buatlah sebuah view aman yang di dalamnya mengakses tabel dekripsi dan memanggil fungsi dekripsi untuk menyelesaikan proses dekripsi. Kontrol akses pengguna data terhadap teks biasa dilakukan melalui pengaturan izin view. Selain itu, view tidak boleh berisi kunci teks biasa guna mencegah kebocoran kunci.
-
-
Hal yang perlu diperhatikan.
-
Klien bertanggung jawab penuh atas pembuatan dan manajemen kunci. Anda harus menyimpan kunci penting secara mandiri karena platform tidak menyimpan kunci maupun hubungan langsung antara kunci dan ciphertext. Kehilangan kunci akan menyebabkan ketidakmampuan mendekripsi data.
-
Melewatkan parameter kunci teks biasa berisiko kebocoran, sehingga Anda perlu menanganinya secara khusus selama penggunaan.
-
Jenis data BINARY mungkin memerlukan MaxCompute 2.0. Aktifkan switch tipe data 2.0 dengan
set odps.sql.type.system.odps2=true;.
-
Perintah sebagai berikut:
--Buat tabel kunci create table mf_id_key(id bigint,key binary); --Masukkan satu kunci insert overwrite table mf_id_key values (1,cast('b75585cf321cdcad42451690cdb7bfc4' as binary)); --Kueri kunci select * from mf_id_key; +------------+------+ | id | key | +------------+------+ | 1 | b75585cf321cdcad42451690cdb7bfc4 | +------------+------+ --Kueri data tabel yang akan dienkripsi 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| +------------+------+--------+------------+------------+ --Enkripsi kolom pada tabel target 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; --Kueri data setelah enkripsi select * from mf_user_info;Hasil yang dikembalikan:
+------------+------+--------+------------+-----+ | 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
Sintaks
binary NEW_KEYSET(string <key_type>, [string <description>])Deskripsi
Membuat keyset kunci sesuai dengan tipe algoritma yang ditentukan.
Parameter
-
key_type: Wajib. Tipe algoritma yang ditentukan saat membuat kunci data. Saat ini mendukung: AES-GCM-256, AES-SIV-CMAC-128, dan AES-SIV-CMAC-256.
-
description: Opsional. Deskripsi kunci data.
-
Nilai kembali
Mengembalikan keyset bertipe BINARY.
Contoh
select hex(NEW_KEYSET('AES-GCM-256', 'hello world'));Hasil yang dikembalikan sebagai berikut.
+------------+ | _c0 | +------------+ | 0A10577567735A514541554D42776E684C4212580A330A0B4145532D47434D2D323536122017F7A430B9D4B59B55454FD4B486216059F1B748CE0502D901EBEACEAB6569191801200210011A10577567735A514541554D42776E684C4220022A0B68656C6C6F20776F726C64 | +------------+
ADD_KEY_TO_KEYSET
Sintaks
binary ADD_KEY_TO_KEYSET(binary <keyset>, string <key_type>, binary <raw_key>, [string <description>])Deskripsi
Menambahkan kunci baru ke dalam keyset dan menetapkan kunci tersebut sebagai kunci master.
Parameter
-
keyset: Wajib. Keyset yang sudah ada, bertipe: BINARY.
-
key_type: Wajib. Tipe algoritma untuk kunci yang ditambahkan. Saat ini mendukung: AES-GCM-256, AES-SIV-CMAC-128, dan AES-SIV-CMAC-256.
-
raw_key: Wajib. Kunci yang akan ditambahkan dan ditetapkan sebagai kunci master, bertipe: BINARY.
-
description: Opsional. Deskripsi kunci data.
-
Nilai kembali
Mengembalikan keyset BINARY.
Contoh
select hex(ADD_KEY_TO_KEYSET(unhex ('0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64'), 'AES-SIV-CMAC-128', unhex('b75585cf321cdcad42451690cdb7bfc49c26092f60f854e72d43244c55620a3d'),'description') );Hasil yang dikembalikan sebagai berikut.
+------------+ | _c0 | +------------+ | 0A10596530735A5145414150447273424C4212580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64125D0A380A104145532D5349562D434D41432D3132381220B75585CF321CDCAD42451690CDB7BFC49C26092F60F854E72D43244C55620A3D1801200110011A10596530735A5145414150447273424C4220022A0B6465736372697074696F6E | +------------+
KEYSET_FROM_JSON
Sintaks
BINARY KEYSET_FROM_JSON(STRING <json_keyset>)Deskripsi
Fungsi KEYSET_FROM_JSON digunakan untuk mengonversi string keyset dalam format JSON menjadi tipe BINARY.
Parameter
json_keyset: Wajib. Tipe STRING. String keyset dalam format JSON.
Nilai kembali
Mengembalikan keyset sebagai nilai BINARY.
Contoh
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"}')) ;Hasil yang dikembalikan sebagai berikut.
+------------+ | _c0 | +------------+ | 0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64 | +------------+
KEYSET_TO_JSON
Sintaks
STRING KEYSET_TO_JSON(BINARY <keyset>)Deskripsi
Mengonversi keyset kunci bertipe BINARY menjadi format JSON yang dapat dibaca untuk melihat detail keyset kunci.
Parameter
keyset: Wajib. Keyset yang sudah ada, bertipe: BINARY.
Nilai kembali
Mengembalikan keyset dalam format JSON, dengan penjelasan beberapa parameter sebagai berikut:
-
key_id: ID kunci.
-
key_material_origin: Asal kunci.
-
key_material_type: Jenis enkripsi yang sesuai dengan kunci.
-
type: Jenis algoritma kunci.
-
value: Nilai kunci.
-
output_prefix_type: Format ciphertext setelah enkripsi.
-
Contoh
SELECT KEYSET_TO_JSON(unhex ('0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64')) ;Hasil yang dikembalikan sebagai berikut.
+------------+ | _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
Sintaks
binary ROTATE_KEYSET(binary <keyset>, string <key_type>, [string <description> ])Deskripsi
Memungkinkan sistem menghasilkan kunci baru secara otomatis dan mengonfigurasi kunci tersebut sebagai kunci master.
Parameter
keyset: Wajib. Nilai bertipe BINARY. Parameter ini menentukan keyset yang ingin Anda perbarui.
key_type: Wajib. Parameter ini menentukan tipe algoritma kunci baru. Nilai yang valid: AES-GCM-256, AES-SIV-CMAC-128, dan AES-SIV-CMAC-256.
description: Opsional. Parameter ini memberikan deskripsi kunci data baru.
Nilai kembali
Mengembalikan keyset BINARY.
Contoh
select ROTATE_KEYSET(unhex ('0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64'), 'AES-SIV-CMAC-256', 'hello world') ;Hasil berikut dikembalikan:
+------------+ | _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
Sintaks
binary NEW_WRAPPED_KEYSET(string <kms_cmk_arn> , string <role-arn>, string <key_type> [, string <description>, [string <role_chain>]])Deskripsi
MaxCompute mendukung integrasi dengan Key Management Service untuk manajemen kunci, dengan mengenkripsi ulang keyset (KEYSET) yang dihasilkan menggunakan kunci KMS, sehingga menghasilkan wrapped keyset. Anda harus mencatat dan menyimpan wrapped keyset setelah pembuatan. Untuk enkripsi dan dekripsi data menggunakan wrapped keyset, Anda harus mengombinasikannya dengan kunci KMS. Proses ini menghasilkan semua kunci secara otomatis oleh sistem, tanpa memungkinkan Anda melihat kunci asli yang digunakan untuk enkripsi/dekripsi data, sehingga memberikan keamanan lebih tinggi. Fungsi
NEW_WRAPPED_KEYSETmemberikan otorisasi role_arn—yang memiliki izin untuk menggunakan Nama Sumber Daya Alibaba Cloud (ARN) KMS customer master key (kms_cmk_arn)—kepada MaxCompute untuk membuat wrapped keyset baru. Fungsi ini juga mendukung pemberian otorisasi kepada role akun Alibaba Cloud lain melalui role chain (role_chain).Sebelum menggunakan fungsi
NEW_WRAPPED_KEYSET, pastikan Anda telah menyelesaikan langkah-langkah berikut:-
Keyset terenkapsulasi yang dibuat dengan fungsi
NEW_WRAPPED_KEYSETkini telah tersedia. Untuk detail selengkapnya, lihat NEW_WRAPPED_KEYSET. -
Buat kunci KMS baru dan peroleh ARN-nya (kms_cmk_arn), lalu berikan izin kepada peran RAM untuk menggunakan kunci tersebut. Untuk detail selengkapnya, lihat Aktifkan KMS dan konfigurasikan izin.
-
Buat role RAM dan berikan otorisasi akses MaxCompute ke KMS, lalu peroleh informasi ARN role yang dibuat (role_arn).
Untuk detail prosedur, lihat Activate KMS and configure permissions.
-
Parameter
-
kms_cmk_arn: Wajib. Nama Sumber Daya Alibaba Cloud (ARN) KMS customer master key untuk mengenkripsi KEYSET, dengan format
'acs:kms:<RegionId>:<UserId>:key/<CmkId>', yang mencakup informasi wilayah, ID pengguna, dan ID customer master key. Anda dapat memperoleh ARN ini dari halaman detail kunci di Konsol Key Management Service. Untuk detail prosedur, lihat Activate KMS and configure permissions. -
role_arn: Wajib. ARN dari peran RAM yang memiliki izin terhadap kunci KMS lama dan baru. Peran ini harus diotorisasi ke MaxCompute. Formatnya adalah
'acs:ram:${<userAID>}:role/${<roleName>}', yang mencakup ID pengguna dan nama peran. Untuk informasi selengkapnya, lihat Aktifkan KMS dan konfigurasikan izin. -
wrapped_keyset: Wajib. Merupakan set kunci terbungkus yang perlu dienkripsi ulang.
-
description: Opsional. Informasi deskripsi kunci.
-
role_chain: Opsional. Role chain otorisasi pengguna, dengan format
'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3>},...'. Melalui role chain, Anda dapat mengizinkan pemanggilan wrapped keyset lintas akun Alibaba Cloud.
-
Nilai kembali
Mengembalikan KEYSET terenkripsi bertipe BINARY. Jika diperlukan, Anda dapat menggunakan fungsi HEX untuk mengonversi tipe BINARY ke tipe STRING. Untuk detailnya, lihat HEX.
Contoh
-
Buat wrapped keyset baru:
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;Contoh hasil yang dikembalikan:
+-----+ | _c0 | +-----+ | 613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D78434A373434582F54756C5A547A4E69337562786F4B3543412F616655573262786D345A41306B464C674A2F5758324F4E514E346746306F303236376D35335A6471797237366E57565A6836387A52687A4A673945784B6E677568794A376E6F4A68573677684B5A555A42786E4A383742536C4D46326A374F71474F4C414A6B665779694557394D58664876576E306C6D49777052746A77325643707A4259517277327944354343396C50586F31346A4351506253612F3044394C4C6E6E622F747A6B57316E4F564A6C5359354B35526130537565584F33507856773D | +-----+ -
Buat set kunci pembungkus baru dan beri izin kepada peran lain untuk memanggilnya:
select hex(REWRAP_KEYSET('acs:kms:cn-hangzhou:1**************7:key/key-hzz******************', 'acs:ram:${<UserId>}:role/${<roleName>}', unhex('<wrapped_keyset>'), 'acs:ram:${<UserAId>}:role/${<roleName2>},acs:ram:${<UserBId>}:role/${<roleName3>}')));Contoh hasil yang dikembalikan:
+-----+ | _c0 | +-----+ | 613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D784D59716D4C767954716B3562444779574C7A387965774966432F516B4A59616F57623648364A546A62434F7A7A42634F517A687A6E526F36543866714E4E63555546566874696C4A3947713556667A2F7851757A55686467504C517A2B6C433337485A535449744B53714E396B6639587666487A4D7957643842334D3179392F67423774726835437A556F786A74614571612F5A3543447668524A7731426566525647796A77574974476243475A4E594550714E767963532B333432743347396B714777626C54336F57706939706E437A667A4E4D6F4C63714F453D | +-----+
-
REWRAP_KEYSET
Sintaks
binary REWRAP_KEYSET(string <kms_cmk_arn> , string <role-arn>, string <wrapped_keyset>, [string <role_chain>])Deskripsi
MaxCompute mendukung integrasi dengan Key Management Service untuk manajemen kunci, dengan mengenkripsi ulang keyset (KEYSET) yang dihasilkan menggunakan kunci KMS, sehingga menghasilkan wrapped keyset. Fungsi
REWRAP_KEYSETdapat mengenkripsi ulang wrapped keyset yang dihasilkan oleh fungsiNEW_WRAPPED_KEYSETmenggunakan kunci KMS baru.Sebelum menggunakan fungsi
REWRAP_KEYSET, pastikan Anda telah menyelesaikan langkah-langkah berikut:-
Anda telah memiliki wrapped keyset yang dihasilkan oleh fungsi
NEW_WRAPPED_KEYSET. Untuk detailnya, lihat NEW_WRAPPED_KEYSET. -
Buat kunci KMS baru dan peroleh informasi ARN kunci (kms_cmk_arn), lalu berikan otorisasi kepada role RAM untuk menggunakan kunci baru tersebut. Untuk detail prosedur, lihat Activate KMS and configure permissions.
-
Parameter
-
kms_cmk_arn: Wajib. Nama Sumber Daya Alibaba Cloud (ARN) KMS customer master key untuk mengenkripsi ulang KEYSET, dengan format
'acs:kms:<RegionId>:<UserId>:key/<CmkId>', yang mencakup informasi wilayah, ID pengguna, dan ID customer master key. Anda dapat memperoleh ARN ini dari halaman detail kunci di Konsol Key Management Service. Untuk detail prosedur, lihat Activate KMS and configure permissions. -
role_arn: Wajib. Informasi ARN role RAM yang memiliki izin pada kunci KMS lama dan baru, yang harus diberikan otorisasi kepada MaxCompute, dengan format
'acs:ram:${<userAID>}:role/${<roleName>}', yang mencakup ID pengguna dan nama role. Untuk cara memperolehnya, lihat Activate KMS and configure permissions. -
wrapped_keyset: Wajib. Wrapped keyset yang perlu dienkripsi ulang.
-
role_chain: Opsional. Role chain otorisasi pengguna, dengan format
'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3>},...'. Melalui role chain, Anda dapat mengizinkan pemanggilan wrapped keyset lintas akun Alibaba Cloud.
-
Nilai kembali
Mengembalikan KEYSET terenkripsi bertipe BINARY. Jika diperlukan, Anda dapat menggunakan fungsi HEX untuk mengonversi tipe BINARY ke tipe STRING. Untuk detailnya, lihat HEX.
Contoh
CatatanJalankan kode contoh berikut yang mengandung variabel dalam mode skrip, atau inline-kan variabel ke dalam pernyataan SQL (MaxCompute tidak mendukung cakupan variabel lintas pernyataan SQL).
-
Enkripsi ulang wrapped keyset:
@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')); -
Enkripsi ulang wrapped keyset dan izinkan role akun Alibaba Cloud lain memanggilnya:
select hex(REWRAP_KEYSET('acs:kms:cn-hangzhou:1**************7:key/key-hzz******************', 'acs:ram:${<UserId>}:role/${<roleName>}', unhex('<wrapped_keyset>'), 'acs:ram:${<UserAId>}:role/${<roleName2>},acs:ram:${<UserBId>}:role/${<roleName3>}')));
-
ROTATE_WRAPPED_KEYSET
Sintaks
binary ROTATE_WRAPPED_KEYSET(string <kms_cmk_arn> , string <role-arn>, string <wrapped_keyset>,string <key_type> [,string description,[string <role_chain>]])Deskripsi
Anda dapat menggunakan MaxCompute dengan KMS untuk mengelola kunci. Anda dapat menghasilkan wrapped keyset dengan mengenkripsi keyset berdasarkan kunci KMS. Fungsi
ROTATE_WRAPPED_KEYSETmenggunakan kunci KMS baru dan algoritma kunci baru untuk mengenkripsi ulang wrapped keyset yang dihasilkan oleh fungsiNEW_WRAPPED_KEYSET. Dibandingkan dengan fungsiREWRAP_KEYSET, fungsiROTATE_WRAPPED_KEYSETdapat menggunakan algoritma kunci baru untuk enkripsi ulang.Sebelum menggunakan fungsi
ROTATE_WRAPPED_KEYSET, pastikan prasyarat berikut terpenuhi:Wrapped keyset dihasilkan dengan menggunakan fungsi
NEW_WRAPPED_KEYSET. Untuk informasi lebih lanjut, lihat NEW_WRAPPED_KEYSET.Kunci KMS dibuat dan ARN kunci yang ditentukan oleh kms_cmk_arn diperoleh. Role RAM diberikan izin untuk menggunakan kunci baru tersebut.
Parameter
kms_cmk_arn: Wajib. Parameter ini menentukan ARN KMS customer master key (CMK) yang ingin Anda gunakan untuk mengenkripsi ulang wrapped keyset. Nilai parameter dalam format
'acs:kms:<RegionId>:<UserId>:key/<CmkId>'. RegionId menentukan ID wilayah, UserId menentukan ID pengguna, dan CmkId menentukan ID CMK. Anda dapat memperoleh ARN dari halaman Detail Kunci di Konsol KMS.role_arn: Wajib. Parameter ini menentukan ARN role RAM yang memiliki izin pada kunci KMS lama dan baru. Nilai parameter dalam format
'acs:ram:${<userAID>}:role/${<roleName>}'. userAID menentukan ID pengguna, dan roleName menentukan nama role.wrapped_keyset: Wajib. Parameter ini menentukan wrapped keyset yang ingin Anda enkripsi ulang.
key_type: Wajib. Parameter ini menentukan jenis algoritma kunci dalam keyset yang baru dihasilkan. Nilai yang valid: AES-GCM-256, AES-SIV-CMAC-128, dan AES-SIV-CMAC-256.
description: Opsional. Parameter ini memberikan deskripsi kunci.
-
role_chain: Opsional. Role chain otorisasi pengguna, dengan format
'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3>},...'. Melalui role chain, Anda dapat mengizinkan pemanggilan wrapped keyset lintas akun Alibaba Cloud.
Nilai kembali
Mengembalikan KEYSET terenkripsi bertipe BINARY. Jika diperlukan, Anda dapat menggunakan fungsi HEX untuk mengonversi tipe BINARY ke tipe STRING. Untuk detailnya, lihat HEX.
Contoh
CatatanJalankan kode contoh berikut yang mengandung variabel dalam mode skrip, atau inline-kan variabel ke dalam pernyataan SQL (MaxCompute tidak mendukung cakupan variabel lintas pernyataan SQL).
Enkripsi ulang wrapped keyset.
@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'));Enkripsi ulang wrapped keyset, dan izinkan role lain memanggil wrapped keyset.
@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
Sintaks
binary USE_WRAPPED_KEYSET(string <kms_cmk_arn> , string <role-arn>, string <wrapped_keyset> [,string <role_chain>])Deskripsi
Anda dapat menggunakan MaxCompute dengan KMS untuk mengelola kunci. Anda dapat menghasilkan wrapped keyset dengan mengenkripsi keyset yang ada berdasarkan kunci KMS. Fungsi
USE_WRAPPED_KEYSETmengonversi wrapped keyset yang dihasilkan oleh fungsiNEW_WRAPPED_KEYSETmenjadi keyset dasar. Keyset dasar digunakan sebagai parameter dalam fungsi enkripsi atau dekripsi untuk mengenkripsi atau mendekripsi data. Anda juga dapat menggunakan fungsi USE_WRAPPED_KEYSET untuk memperoleh informasi tentang wrapped keyset dan menyimpan informasi tersebut untuk maintenance selanjutnya.Sebelum menggunakan fungsi
USE_WRAPPED_KEYSET, pastikan prasyarat berikut terpenuhi:Wrapped keyset dihasilkan dengan menggunakan fungsi
NEW_WRAPPED_KEYSET. Untuk informasi lebih lanjut, lihat NEW_WRAPPED_KEYSET.Kunci KMS dibuat dan Nama Sumber Daya Alibaba Cloud (ARN) kunci diperoleh. ARN kunci ditentukan oleh kms_cmk_arn. Role RAM diberikan izin untuk menggunakan kunci baru tersebut.
Parameter
kms_cmk_arn: Wajib. Parameter ini menentukan ARN KMS customer master key (CMK) dari keyset yang ingin Anda enkripsi. Nilai parameter dalam format
'acs:kms:<RegionId>:<UserId>:key/<CmkId>'. RegionId menentukan ID wilayah, UserId menentukan ID pengguna, dan CmkId menentukan ID CMK. Anda dapat memperoleh ARN dari halaman Detail Kunci di Konsol KMS.role_arn: Wajib. Parameter ini menentukan ARN role RAM yang memiliki izin pada KMS. Role tersebut perlu diasumsikan oleh MaxCompute. Nilai parameter dalam format
'acs:ram:${<userAID>}:role/${<roleName>}'. userAID menentukan ID pengguna, dan roleName menentukan nama role.wrapped_keyset: Wajib. Parameter ini menentukan wrapped keyset yang sudah ada.
-
role_chain: Opsional. Role chain otorisasi pengguna, dengan format
'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3>},...'. Melalui role chain, Anda dapat mengizinkan pemanggilan wrapped keyset lintas akun Alibaba Cloud.
Nilai kembali
Keyset yang telah diredaksi (desensitized) bertipe STRUCT dikembalikan. Anda dapat menggunakan fungsi
get_json_objectuntuk memperoleh field terkait keyset sesuai kebutuhan bisnis Anda.Contoh
CatatanJalankan kode contoh berikut yang mengandung variabel dalam mode skrip, atau inline-kan variabel ke dalam pernyataan SQL (MaxCompute tidak mendukung cakupan variabel lintas pernyataan SQL).
Peroleh informasi algoritma kunci dari wrapped keyset.
@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');Hasil berikut dikembalikan:
+-----+ | _c0 | +-----+ | AES-GCM-256 | +-----+
ENHANCED_SYM_ENCRYPT
Sintaks
binary ENHANCED_SYM_ENCRYPT(binary <keyset> , string|binary <plaintext> [,string <additional_data>])Deskripsi
MaxCompute memungkinkan Anda menggunakan fungsi
ENHANCED_SYM_ENCRYPTuntuk mengenkripsi data dengan menggunakan keyset dasar atau wrapped keyset yang ditentukan. Anda dapat membuat wrapped keyset dengan mengenkripsi keyset yang ada berdasarkan kunci Key Management Service (KMS). Dibandingkan dengan keyset dasar, Anda dapat menggunakan wrapped keyset dengan KMS untuk mengelola kunci dengan cara yang lebih aman.Sebelum menggunakan fungsi
ENHANCED_SYM_ENCRYPT, pastikan prasyarat berikut terpenuhi:Keyset dasar atau wrapped keyset dihasilkan dengan menggunakan fungsi
NEW_KEYSETatauNEW_WRAPPED_KEYSET. Untuk informasi lebih lanjut, lihat NEW_KEYSET atau NEW_WRAPPED_KEYSET.Keyset dasar diperoleh dari wrapped keyset dengan menggunakan fungsi
USE_WRAPPED_KEYSET. Prasyarat ini harus dipenuhi jika Anda ingin menggunakan wrapped keyset untuk mengenkripsi data. Keyset dasar digunakan sebagai parameter dalam fungsiENHANCED_SYM_ENCRYPTuntuk mengenkripsi data. Selain itu, akun Anda diberikan role yang memiliki izin untuk menggunakan wrapped keyset tersebut.
Parameter
keyset: Wajib. Parameter ini menentukan keyset dasar bertipe BINARY atau wrapped keyset bertipe STRUCT.
plaintext: Wajib. Parameter ini menentukan teks biasa bertipe STRING atau BINARY yang ingin Anda enkripsi.
additional_data: Opsional. Parameter ini menentukan informasi verifikasi yang didukung oleh algoritma. Informasi verifikasi bertipe STRING.
Nilai kembali
Ciphertext bertipe BINARY dikembalikan.
Data contoh
-- 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| +------------+------+--------+------------+------------+Contoh
Gunakan kumpulan kunci biasa untuk mendekripsi kolom
id_card_noyang terenkripsi dalam tabelmf_user_info: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;Pernyataan contoh berikut mengkueri hasil enkripsi:
select * from mf_user_info; -- Hasil berikut dikembalikan: +------------+------+--------+------------+-----+ | 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 | +------------+------+--------+------------+-----+Gunakan kumpulan kunci terenkapsulasi untuk tabel
mf_user_infoguna mendekripsi kolomtelyang terenkripsi.Hasilkan wrapped keyset dan tulis ke tabel.
-- 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; -- Hasil berikut dikembalikan: +----+-----+ | id | _c1 | +----+-----+ | 1 | 613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D78447654524C4632635077766E74554654584579715242583953724167446D2F397131786F57456E6F5474516739633853766242674456773565736674714A4D5435524455382F6F6A2B4E61766D774344494C734B6A416B6B675A42496F5568656F566D38564C4F30506D4778767137646956517453447A5467395147775639533161305A464A6D6A45562B6742722F56386653444D6E424D2B71493779784668303866594E6D336578775744423949726B645A3469784F2B532B476E6750523854524A58326E5768666478347034473468687248684A514D615071332F526C342B67427652773D3D | +----+-----+Enkripsi kolom
telmenggunakan wrapped keyset.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;Hasil berikut dikembalikan:
+------------+------+--------+------------+------+ | 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
Sintaks
BINARY ENHANCED_SYM_DECRYPT(BINARY <keyset> , BINARY <ciphertext> [,string <additional_data>])Deskripsi
MaxCompute mendukung penggunaan fungsi
ENHANCED_SYM_DECRYPTuntuk mendekripsi data dengan menentukan keyset dasar atau wrapped keyset yang dihasilkan. Keyset dasar atau wrapped keyset yang digunakan untuk dekripsi harus sama dengan yang digunakan saat enkripsi. Wrapped keyset dihasilkan dengan mengenkripsi ulang keyset (KEYSET) menggunakan kunci KMS, dan dikelola melalui Key Management Service, sehingga lebih aman dibandingkan keyset dasar.Sebelum menggunakan fungsi
ENHANCED_SYM_DECRYPT, pastikan Anda telah menyelesaikan langkah-langkah berikut:-
Anda telah memiliki keyset dasar atau wrapped keyset yang dihasilkan oleh fungsi
NEW_KEYSETatauNEW_WRAPPED_KEYSET. Untuk detailnya, lihat NEW_KEYSET, NEW_WRAPPED_KEYSET. -
Jika menggunakan wrapped keyset untuk mendekripsi data, Anda harus memiliki izin role yang sesuai untuk wrapped keyset tersebut. Untuk detail prosedur, lihat Activate KMS and configure permissions.
-
Parameter
-
keyset: Wajib. Keyset pengguna, bertipe BINARY atau STRUCT.
PentingKeyset dasar atau wrapped keyset yang digunakan untuk dekripsi harus sama dengan yang digunakan saat enkripsi.
-
ciphertext: Wajib. Ciphertext bertipe BINARY yang telah dienkripsi dengan keyset dan siap didekripsi.
additional_data: Opsional. Parameter ini menentukan informasi verifikasi yang didukung oleh algoritma. Informasi verifikasi bertipe STRING.
-
Nilai kembali
Mengembalikan teks biasa bertipe BINARY.
Data contoh
-- 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| +------------+------+--------+------------+------------+Contoh
-
Dekripsi kolom
id_card_noyang telah dienkripsi pada tabelmf_user_infomenggunakan keyset dasar:PentingSebelum mendekripsi, pastikan data telah dienkripsi, dan keyset dasar atau wrapped keyset yang digunakan untuk dekripsi harus sama dengan yang digunakan saat enkripsi. Contoh operasi enkripsi dapat dilihat di 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;Contoh hasil kueri dekripsi sebagai berikut:
SELECT * FROM mf_user_info; --Contoh hasil yang dikembalikan +------------+------+--------+------------+------------+ | 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| +------------+------+--------+------------+------------+ -
Dekripsi kolom
telyang telah dienkripsi pada tabelmf_user_infomenggunakan wrapped keyset: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;Contoh hasil yang dikembalikan sebagai berikut:
+------------+------+--------+------------+------+ | 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 | +------------+------+--------+------------+------+
-