MaxCompute SQL menyediakan fungsi enkripsi dan dekripsi yang dapat digunakan untuk mengenkripsi atau mendekripsi data sesuai kebutuhan bisnis. Topik ini menjelaskan sintaksis, parameter, serta contoh penggunaan fungsi enkripsi dan dekripsi yang didukung oleh MaxCompute SQL.
Kemampuan enkripsi dan dekripsi data MaxCompute
Enkripsi dan dekripsi kunci tunggal: Sistem menghasilkan kunci acak tunggal untuk enkripsi atau dekripsi kolom tertentu. Anda harus menyimpan kunci yang dihasilkan.

Tabel berikut menjelaskan fungsi enkripsi dan dekripsi kunci tunggal yang didukung oleh MaxCompute SQL.
Fungsi
Deskripsi
Mendekripsi data terenkripsi di kolom tabel tertentu dengan menggunakan kunci acak dan mengembalikan teks biasa tipe BINARY.
Mengenkripsi data di kolom tabel tertentu dengan menggunakan kunci acak dan mengembalikan ciphertext tipe BINARY.
Enkripsi dan dekripsi multi-kunci: Set kunci adalah objek manajemen kunci MaxCompute yang dapat menyimpan satu atau lebih kunci. Anda dapat menambahkan kunci secara manual ke set kunci, memutar kunci, dan melihat kunci asli.

Tabel berikut menjelaskan fungsi enkripsi dan dekripsi multi-kunci yang didukung oleh MaxCompute SQL.
Fungsi
Deskripsi
Membuat set kunci berdasarkan tipe algoritma yang ditentukan.
Menambahkan kunci ke set kunci dan mengonfigurasi kunci yang ditambahkan sebagai kunci utama.
Mengonversi set kunci tipe BINARY menjadi set kunci JSON yang dapat dibaca. Setelah konversi, Anda dapat melihat detail set kunci.
Mengonversi set kunci tipe JSON menjadi set kunci tipe BINARY.
Mengizinkan sistem untuk secara otomatis menghasilkan kunci baru dan mengonfigurasinya sebagai kunci utama.
Enkripsi dan dekripsi multi-kunci berbasis Key Management Service (KMS): MaxCompute mendukung enkripsi dan dekripsi data berbasis KMS. Sistem secara otomatis menghasilkan set kunci dasar untuk enkripsi dan dekripsi data. Set kunci dasar digabungkan dengan kunci KMS untuk menghasilkan set kunci terenkripsi, yang disebut Keyset_KMS. Anda harus menyimpan Keyset_KMS. Untuk mendekripsi data, Anda perlu menyediakan Keyset_KMS. Sistem mendekripsi Keyset_KMS berdasarkan kunci KMS untuk mengembalikan set kunci dasar, lalu mendekripsi data menggunakan set kunci dasar.

Tabel berikut menjelaskan fungsi enkripsi dan dekripsi multi-kunci berbasis KMS yang didukung oleh MaxCompute SQL.
Fungsi
Deskripsi
Asumsikan Alibaba Cloud Resource Name (ARN) dari suatu peran yang dapat menggunakan Key Management Service (KMS) customer master key (CMK) ARN untuk MaxCompute dan membuat Set kunci terbungkus. ARN peran ditentukan oleh
role_arn, sedangkan ARN KMS CMK ditentukan oleh kms_cmk_arn. Fungsi ini juga digunakan untuk memberikan izin kepada akun Alibaba Cloud lainnya guna mendekripsi Set kunci berdasarkanrole_chain.Menjadi-enskripsi ulang set kunci yang dibungkus dengan menggunakan kunci KMS tertentu.
Mendekripsi set kunci yang dienkripsi, menerapkan rotasi kunci, dan menggunakan kunci baru untuk mengenkripsi set kunci.
Mengonversi keyset yang dibungkus menjadi keyset dasar yang digunakan sebagai parameter dalam fungsi enkripsi atau dekripsi. Anda juga dapat menggunakan fungsi USE_WRAPPED_KEYSET untuk memperoleh informasi tentang keyset yang dibungkus dan menyimpan informasi tersebut untuk pemeliharaan keyset selanjutnya.
Mengenkripsi data dengan menggunakan set kunci tertentu.
Mendekripsi data menggunakan set kunci tertentu.
Catatan penggunaan
MaxCompute 2.0 menyediakan fungsi tambahan. Jika fungsi yang Anda gunakan melibatkan tipe data baru yang didukung dalam edisi tipe data MaxCompute 2.0, Anda harus mengeksekusi pernyataan SET untuk mengaktifkan edisi tipe data MaxCompute 2.0. Tipe data baru tersebut mencakup TINYINT, SMALLINT, INT, FLOAT, VARCHAR, TIMESTAMP, dan BINARY.
Tingkat sesi: Untuk mengaktifkan edisi tipe data MaxCompute 2.0 pada tingkat sesi, tambahkan
set odps.sql.type.system.odps2=true;sebelum pernyataan SQL yang ingin dieksekusi, lalu kirimkan dan eksekusi bersama-sama.Tingkat proyek: Pemilik proyek dapat menjalankan perintah berikut untuk mengaktifkan edisi tipe data MaxCompute 2.0 untuk proyek berdasarkan kebutuhan proyek. Konfigurasi akan berlaku setelah 10 hingga 15 menit. Untuk mengaktifkan edisi tipe data MaxCompute 2.0 pada tingkat proyek, eksekusi pernyataan berikut:
setproject odps.sql.type.system.odps2=true;Untuk informasi lebih lanjut tentang
setproject, lihat Operasi Proyek. Untuk informasi lebih lanjut tentang tindakan pencegahan yang harus diambil saat mengaktifkan edisi tipe data MaxCompute 2.0 pada tingkat proyek, lihat Edisi Tipe Data.
SYM_DECRYPT
Sintaksis
binary sym_decrypt(binary <value_to_decrypt>, binary <key> [,string <encryption_method> , [ string <additional_authenticated_data> ] ] )Deskripsi
Mendekripsi data yang dienkripsi menggunakan kunci acak di kolom tertentu dari sebuah tabel.
Parameter
value_to_decrypt: wajib. Data yang ingin didekripsi. Hanya data bertipe BINARY yang dapat didekripsi.
key: wajib. Kunci yang digunakan untuk mendekripsi data. Kunci harus bertipe BINARY dan panjangnya harus 256 bit.
encryption_method: opsional. Metode yang digunakan untuk mendekripsi data, yang harus sama dengan metode enkripsi.
additional_authenticated_data: opsional. Data autentikasi tambahan (AAD), yang digunakan untuk memverifikasi keaslian dan integritas data. Parameter ini diperlukan jika AAD digunakan selama enkripsi data.
Nilai Kembali
Teks biasa bertipe BINARY dikembalikan. Anda dapat menggunakan fungsi CAST untuk mengonversi tipe BINARY menjadi tipe STRING sesuai kebutuhan bisnis.
Contoh
Contoh berikut menggambarkan cara mendekripsi data yang dienkripsi menggunakan SYM_ENCRYPT.
Contoh 1: Mendekripsi data yang dienkripsi menggunakan kunci teks biasa.
Gunakan algoritma enkripsi otentikasi dengan data terkait (AEAD) untuk mendekripsi data.
-- Mendekripsi data di kolom 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; -- Meminta data teks biasa yang didekripsi. select * from mf_user_info;Hasil berikut 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 | +------------+------+--------+------------+-------------+Gunakan algoritma AEAD dengan AAD untuk mendekripsi data.
-- Mendekripsi data di kolom 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; -- Meminta data teks biasa yang didekripsi. select * from mf_user_info;Hasil berikut 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 menggunakan tabel kunci.
-- Mendekripsi data di kolom tertentu dari tabel mf_user_info. 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; -- Meminta data yang didekripsi. select * from mf_user_info;Hasil berikut 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 | +------------+------+--------+------------+-------------+
SYM_ENCRYPT
Sintaksis
binary sym_encrypt(string|binary <value_to_encrypt>, binary <key> [,string <encryption_method> , [ string <additional_authenticated_data> ] ] )Deskripsi
Mengenkripsi data di kolom tertentu tabel menggunakan kunci acak.
Parameter
value_to_encrypt: wajib. Data yang ingin dienkripsi. Anda hanya dapat mengenkripsi data bertipe STRING dan BINARY.
key: wajib. Kunci yang digunakan untuk mengenkripsi data. Kunci harus bertipe BINARY dan memiliki panjang 256 bit.
encryption_method: opsional. Metode enkripsi. Hanya algoritma enkripsi AES-GCM-256 yang tersedia dan digunakan sebagai nilai default.
additional_authenticated_data: opsional. AAD, yang digunakan untuk memverifikasi keaslian dan integritas data. Parameter ini berlaku hanya jika Anda menggunakan algoritma enkripsi authenticated encryption with associated data (AEAD), seperti AES GCM.
Nilai Kembali
Teks terenkripsi bertipe BINARY dikembalikan.
Nilai kembali berisi Initialization Vector (IV), ciphertext, dan tag AEAD secara berurutan.
Nilai kembali bersifat acak dan berbeda setiap kali meskipun Anda menggunakan kunci yang sama untuk mengenkripsi plaintext yang sama.
Data Sampel
-- Membuat tabel. create table mf_user_info(id bigint, name string, gender string, id_card_no string, tel string); -- Menyisipkan data ke dalam tabel eksternal. 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"); -- Meminta data dari tabel. 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.
Mengenkripsi data di kolom tertentu tabel
mf_user_infoberdasarkan data sampel. Contoh pernyataan:Gunakan algoritma AEAD untuk mengenkripsi data.
-- Enkripsi data di kolom 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 berikut 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| +------------+------+--------+------------+-----+Gunakan algoritma AEAD untuk mengenkripsi data dan melampirkan AAD.
-- Enkripsi data di kolom 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 berikut 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.
Buat tabel kunci berdasarkan data sampel untuk mengelola kunci.
Prinsip
Untuk enkripsi data, Anda dapat menyimpan kunci di tabel MaxCompute dan melakukan operasi
JOINpada tabel kunci MaxCompute dan tabel yang kolom datanya ingin dienkripsi. Ini mencegah kunci bocor saat kunci dilewatkan.Untuk dekripsi data, administrator proyek tidak memberikan izin pada tabel kunci MaxCompute kepada pengguna yang ingin menggunakan tabel kunci. Sebagai gantinya, administrator proyek membuat tampilan aman dan memberi otorisasi kepada pengguna untuk mengakses tabel kunci dan memanggil fungsi dekripsi untuk mendekripsi data berdasarkan tampilan tersebut. Pengguna hanya dapat mendekripsi data setelah mereka mendapatkan izin akses pada tampilan tersebut. Teks biasa kunci tidak termasuk dalam tampilan. Dengan cara ini, kunci tidak bocor.
Perhatian
Pelanggan bertanggung jawab atas pembuatan dan pengelolaan kunci. MaxCompute tidak menyimpan kunci atau pemetaan antara kunci dan ciphertext. Jika kunci hilang, data tidak dapat didekripsi.
Untuk memastikan keamanan data, pemrosesan khusus diperlukan saat Anda melewati parameter yang melibatkan kunci teks biasa.
Jika data yang ingin dienkripsi adalah bertipe BINARY, Anda harus menjalankan perintah
set odps.sql.type.system.odps2=true;untuk mengaktifkan edisi tipe data MaxCompute V2.0.
Contoh pernyataan:
-- Membuat tabel kunci. create table mf_id_key(id bigint,key binary); -- Menyisipkan kunci ke dalam tabel kunci. insert overwrite table mf_id_key values (1,cast('b75585cf321cdcad42451690cdb7bfc4' as binary)); -- Meminta kunci. select * from mf_id_key; +------------+------+ | id | key | +------------+------+ | 1 | b75585cf321cdcad42451690cdb7bfc4 | +------------+------+ -- Meminta data dari tabel 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| +------------+------+--------+------------+------------+ -- Enkripsi data di kolom tertentu tabel 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; -- Meminta data terenkripsi. select * from mf_user_info;Hasil berikut 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
Sintaksis
binary NEW_KEYSET(string <key_type>, [string <description>])Deskripsi
Membuat sebuah keyset berdasarkan tipe algoritma yang ditentukan.
Parameter
key_type: wajib. Parameter ini menentukan tipe algoritma dari kunci data dalam keyset baru. Nilai yang valid: AES-GCM-256, AES-SIV-CMAC-128, dan AES-SIV-CMAC-256.
description: opsional. Parameter ini memberikan deskripsi untuk kunci data dalam keyset baru.
Nilai Pengembalian
Sebuah keyset dengan tipe BINARY dikembalikan.
Contoh
select hex(NEW_KEYSET('AES-GCM-256', 'hello world'));Hasil berikut dikembalikan:
+------------+ | _c0 | +------------+ | 0A10577567735A514541554D42776E684C4212580A330A0B4145532D47434D2D323536122017F7A430B9D4B59B55454FD4B486216059F1B748CE0502D901EBEACEAB6569191801200210011A10577567735A514541554D42776E684C4220022A0B68656C6C6F20776F726C64 | +------------+
ADD_KEY_TO_KEYSET
Sintaksis
binary ADD_KEY_TO_KEYSET(binary <keyset>, string <key_type>, binary <raw_key>, [string <description>])Deskripsi
Menambahkan kunci ke dalam set kunci dan mengonfigurasi kunci tersebut sebagai kunci utama.
Parameter
keyset: wajib. Parameter ini menentukan set kunci yang sudah ada dengan tipe BINARY.
key_type: wajib. Parameter ini menentukan tipe algoritma dari kunci yang ingin ditambahkan. Nilai valid: AES-GCM-256, AES-SIV-CMAC-128, dan AES-SIV-CMAC-256.
raw_key: wajib. Parameter ini menentukan kunci yang ingin ditambahkan dan dikonfigurasi sebagai kunci utama. Kunci tersebut bertipe BINARY.
description: opsional. Parameter ini memberikan deskripsi untuk kunci data.
Nilai Kembali
Set kunci dengan tipe BINARY dikembalikan.
Contoh
select hex(ADD_KEY_TO_KEYSET(unhex ('0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64'), 'AES-SIV-CMAC-128', unhex('b75585cf321cdcad42451690cdb7bfc49c26092f60f854e72d43244c55620a3d'),'deskripsi') );Hasil berikut dikembalikan:
+------------+ | _c0 | +------------+ | 0A10596530735A5145414150447273424C4212580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64125D0A380A104145532D5349562D434D41432D3132381220B75585CF321CDCAD42451690CDB7BFC49C26092F60F854E72D43244C55620A3D1801200110011A10596530735A5145414150447273424C4220022A0B6465736372697074696F6E | +------------+
KEYSET_FROM_JSON
Sintaksis
binary KEYSET_FROM_JSON(string <json_keyset>)Deskripsi
Mengonversi set kunci bertipe JSON menjadi set kunci bertipe BINARY.
Parameter
json_keyset: wajib. Parameter ini menentukan set kunci bertipe JSON.
Nilai Pengembalian
Set kunci bertipe BINARY dikembalikan.
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 berikut dikembalikan:
+------------+ | _c0 | +------------+ | 0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64 | +------------+
KEYSET_TO_JSON
Sintaksis
STRING KEYSET_TO_JSON(BINARY <keyset>)Deskripsi
Mengonversi Set kunci tipe BINARY menjadi string JSON yang dapat dibaca. Setelah konversi, Anda dapat melihat detail dari Set kunci tersebut.
Parameter
keyset: wajib. Nilai bertipe BINARY. Parameter ini menentukan Set kunci yang sudah ada.
Nilai Kembali
Set kunci dalam format JSON dikembalikan. Deskripsi parameter:
key_id: ID dari kunci.
key_material_origin: asal dari kunci.
key_material_type: tipe enkripsi dari kunci.
type: tipe algoritma dari kunci.
value: nilai dari kunci.
output_prefix_type: format teks sandi setelah enkripsi.
Contoh
SELECT KEYSET_TO_JSON(unhex ('0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64')) ;Hasil berikut dikembalikan:
+------------+ | _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
Sintaksis
binary ROTATE_KEYSET(binary <keyset>, string <key_type>, [string <description> ])Deskripsi
Mengizinkan sistem untuk secara otomatis menghasilkan kunci baru dan mengonfigurasi kunci baru tersebut sebagai kunci utama.
Parameter
keyset: wajib. Nilai bertipe BINARY. Parameter ini menentukan set kunci yang ingin diperbarui.
key_type: wajib. Parameter ini menentukan tipe algoritma dari kunci baru. Nilai yang valid: AES-GCM-256, AES-SIV-CMAC-128, dan AES-SIV-CMAC-256.
description: opsional. Parameter ini memberikan deskripsi untuk kunci data baru.
Nilai Kembali
Set kunci bertipe BINARY dikembalikan.
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
Sintaksis
binary NEW_WRAPPED_KEYSET(string <kms_cmk_arn> , string <role-arn>, string <key_type> [, string <description>, [string <role_chain>]])Deskripsi
Anda dapat menggunakan MaxCompute dengan KMS untuk mengelola kunci. Anda dapat menghasilkan set kunci terbungkus dengan mengenkripsi set kunci berdasarkan kunci KMS. Setelah Anda menghasilkan set kunci terbungkus, Anda harus mencatat dan menyimpan secara manual set kunci terbungkus tersebut untuk keperluan enkripsi dan dekripsi data berbasis kunci KMS selanjutnya. Dalam proses enkripsi atau dekripsi, semua kunci dihasilkan secara otomatis oleh sistem. Anda tidak dapat melihat kunci asli yang digunakan untuk enkripsi dan dekripsi. Dengan cara ini, data dapat dienkripsi atau didekripsi dengan cara yang lebih aman. Fungsi
NEW_WRAPPED_KEYSETmengasumsikan bahwa Alibaba Cloud Resource Name (ARN) dari peran yang dapat menggunakan ARN Kunci Utama Pelanggan (CMK) KMS telah diberikan kepada MaxCompute dan membuat set kunci terbungkus. ARN peran ditentukan oleh role_arn. ARN CMK KMS ditentukan oleh kms_cmk_arn. Fungsi ini juga digunakan untuk memberikan izin kepada akun Alibaba Cloud lainnya untuk menggunakan set kunci terbungkus berdasarkan role_chain.Sebelum Anda menggunakan fungsi
NEW_WRAPPED_KEYSET, pastikan prasyarat berikut telah dipenuhi:Set kunci terbungkus dihasilkan menggunakan fungsi
NEW_WRAPPED_KEYSET. Untuk informasi lebih lanjut, lihat NEW_WRAPPED_KEYSET.Set kunci dasar diperoleh dari set kunci terbungkus menggunakan fungsi
USE_WRAPPED_KEYSET. Prasyarat ini harus dipenuhi untuk menggunakan set kunci terbungkus dalam mengenkripsi data. Set kunci dasar berfungsi sebagai parameter dalam fungsiENHANCED_SYM_ENCRYPTuntuk proses enkripsi data. Selain itu, akun Anda harus memiliki peran dengan izin untuk menggunakan set kunci terbungkus.Peran RAM telah dibuat dan MaxCompute telah diberi otorisasi untuk mengakses KMS. ARN dari peran RAM telah diperoleh. ARN peran ditentukan oleh role_arn.
Parameter
kms_cmk_arn: wajib. Parameter ini menentukan ARN dari CMK KMS yang digunakan untuk mengenkripsi set kunci. Nilai parameter ini 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 dari peran RAM yang memiliki izin pada KMS. Peran ini perlu diasumsikan oleh MaxCompute. Nilai parameter ini dalam format
'acs:ram:${<userAID>}:role/${<roleName>}'. userAID menentukan ID pengguna, dan roleName menentukan nama peran.wrapped_keyset: Wajib. Parameter ini menentukan set kunci yang dibungkus yang akan dienkripsi ulang.
description: opsional. Parameter ini memberikan deskripsi dari kunci.
role_chain: opsional. Parameter ini menentukan rantai peran untuk otorisasi pengguna. Nilai parameter ini dalam format
'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3>},...'. Anda dapat menggunakan rantai peran untuk memanggil set kunci terbungkus lintas akun Alibaba Cloud.
Nilai Pengembalian
Set kunci terbungkus bertipe BINARY dikembalikan. Anda dapat menggunakan fungsi HEX untuk mengonversi set kunci terbungkus bertipe BINARY menjadi set kunci bertipe STRING sesuai dengan kebutuhan bisnis Anda. Untuk informasi lebih lanjut tentang fungsi HEX, lihat HEX.
Contoh
Buat set kunci terbungkus.
insert overwrite table mf_user_info select id, name, gender, base64(ENHANCED_SYM_ENCRYPT(unhex ('0A1072384D715A414541385044643351534C12580A330A0B4145532D47434D2D323536122026A8FB1126DF4F5B5DD03C180E6919565D7716CBB291815EFB5BBF30F8BEF9AF1801200210011A1072384D715A414541385044643351534C20022A0B68656C6C6F20776F726C64'), nomor_ktp ))as nomor_ktp, tel from mf_user_info;Hasil berikut dikembalikan:
+-----+ | _c0 | +-----+ | 613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D78434A373434582F54756C5A547A4E69337562786F4B3543412F616655573262786D345A41306B464C674A2F5758324F4E514E346746306F303236376D35335A6471797237366E57565A6836387A52687A4A673945784B6E677568794A376E6F4A68573677684B5A555A42786E4A383742536C4D46326A374F71474F4C414A6B665779694557394D58664876576E306C6D49777052746A77325643707A4259517277327944354343396C50586F31346A4351506253612F3044394C4C6E6E622F747A6B57316E4F564A6C5359354B35526130537565584F33507856773D | +-----+Buat set kunci terbungkus dan izinkan peran lain untuk memanggil set kunci terbungkus.
@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));Hasil berikut dikembalikan:
+-----+ | _c0 | +-----+ | 613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D784D59716D4C767954716B3562444779574C7A387965774966432F516B4A59616F57623648364A546A62434F7A7A42634F517A687A6E526F36543866714E4E63555546566874696C4A3947713556667A2F7851757A55686467504C517A2B6C433337485A535449744B53714E396B6639587666487A4D7957643842334D3179392F67423774726835437A556F786A74614571612F5A3543447668524A7731426566525647796A77574974476243475A4E594550714E767963532B333432743347396B714777626C54336F57706939706E437A667A4E4D6F4C63714F453D | +-----+
REWRAP_KEYSET
Sintaksis
binary REWRAP_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 set kunci terbungkus dengan mengenkripsi set kunci berdasarkan kunci KMS. Fungsi
REWRAP_KEYSETmenggunakan kunci KMS baru untuk mengenkripsi ulang set kunci terbungkus yang dihasilkan menggunakan fungsiNEW_WRAPPED_KEYSET.Sebelum menggunakan fungsi
REWRAP_KEYSET, pastikan prasyarat berikut telah dipenuhi:Set kunci terbungkus dihasilkan 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. Peran RAM diberi izin untuk menggunakan kunci baru.
Parameter
kms_cmk_arn: wajib. Parameter ini menentukan ARN dari kunci master pelanggan KMS (CMK) yang ingin Anda gunakan untuk mengenkripsi ulang set kunci terbungkus. Nilai parameter ini 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 dari peran RAM yang memiliki izin pada kunci KMS lama dan baru. Peran RAM harus diasumsikan oleh MaxCompute. Nilai parameter ini dalam format
'acs:ram:${<userAID>}:role/${<roleName>}'. userAID menentukan ID pengguna, dan roleName menentukan nama peran.wrapped_keyset: wajib. Parameter ini menentukan set kunci terbungkus yang ingin Anda enkripsi ulang.
role_chain: opsional. Parameter ini menentukan rantai peran untuk otorisasi pengguna. Nilai parameter ini dalam format
'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3>},...'. Anda dapat menggunakan rantai peran untuk memanggil set kunci terbungkus di seluruh akun Alibaba Cloud.
Nilai Kembali
Set kunci terbungkus tipe BINARY dikembalikan. Anda dapat menggunakan fungsi HEX untuk mengonversi set kunci terbungkus tipe BINARY menjadi set kunci tipe STRING sesuai kebutuhan bisnis Anda. Untuk informasi lebih lanjut tentang fungsi HEX, lihat HEX.
Contoh
CatatanKode sampel berikut berisi variabel. Anda harus menjalankan kode dalam mode skrip atau mengganti variabel dengan nilai sebenarnya dalam pernyataan SQL.
Mengenkripsi ulang set kunci terbungkus.
@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'));Mengenkripsi ulang set kunci terbungkus dan mengizinkan akun Alibaba Cloud lain untuk memanggil set kunci terbungkus.
@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
Sintaksis
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 set kunci terbungkus dengan mengenkripsi set kunci berdasarkan kunci KMS. Fungsi
ROTATE_WRAPPED_KEYSETmenggunakan kunci KMS baru dan algoritma kunci baru untuk mengenkripsi ulang set kunci terbungkus yang dihasilkan menggunakan 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 telah terpenuhi:Set kunci terbungkus dihasilkan 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. Peran RAM diberi izin untuk menggunakan kunci baru.
Parameter
kms_cmk_arn: wajib. Parameter ini menentukan ARN dari kunci master pelanggan (CMK) KMS yang ingin Anda gunakan untuk mengenkripsi ulang set kunci terbungkus. Nilai parameter ini 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 dari peran RAM yang memiliki izin pada kunci KMS lama dan baru. Nilai parameter ini dalam format
'acs:ram:${<userAID>}:role/${<roleName>}'. userAID menentukan ID pengguna, dan roleName menentukan nama peran.wrapped_keyset: wajib. Parameter ini menentukan set kunci terbungkus yang ingin Anda enkripsi ulang.
key_type: wajib. Parameter ini menentukan tipe algoritma kunci dalam set kunci yang baru dihasilkan. Nilai valid: AES-GCM-256, AES-SIV-CMAC-128, dan AES-SIV-CMAC-256.
description: opsional. Parameter ini memberikan deskripsi kunci.
role_chain: opsional. Parameter ini menentukan rantai peran untuk otorisasi pengguna. Nilai parameter ini dalam format
'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3>},...'. Anda dapat menggunakan rantai peran untuk memanggil set kunci terbungkus di seluruh akun Alibaba Cloud.
Nilai Kembali
Set kunci terbungkus tipe BINARY dikembalikan. Anda dapat menggunakan fungsi HEX untuk mengonversi set kunci terbungkus tipe BINARY menjadi set kunci tipe STRING sesuai kebutuhan bisnis Anda. Untuk informasi lebih lanjut tentang fungsi HEX, lihat HEX.
Contoh
CatatanKode sampel berikut berisi variabel. Anda harus menjalankan kode dalam mode skrip atau mengganti variabel dengan nilai sebenarnya dalam pernyataan SQL.
Mengenkripsi ulang set kunci terbungkus.
@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'));Mengenkripsi ulang set kunci terbungkus, dan mengizinkan peran lain untuk memanggil set kunci terbungkus.
@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
Sintaksis
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 set kunci yang ada berdasarkan kunci KMS. Fungsi
USE_WRAPPED_KEYSETmengonversi wrapped keyset yang dihasilkan menggunakan fungsiNEW_WRAPPED_KEYSETmenjadi set kunci dasar. Set kunci 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 pemeliharaan selanjutnya.Sebelum Anda menggunakan fungsi
USE_WRAPPED_KEYSET, pastikan prasyarat berikut terpenuhi:Wrapped keyset dihasilkan menggunakan fungsi
NEW_WRAPPED_KEYSET. Untuk informasi lebih lanjut, lihat NEW_WRAPPED_KEYSET.Kunci KMS dibuat dan Alibaba Cloud Resource Name (ARN) dari kunci diperoleh. ARN kunci ditentukan oleh kms_cmk_arn. Peran RAM diberikan izin untuk menggunakan kunci baru.
Parameter
kms_cmk_arn: wajib. Parameter ini menentukan ARN KMS customer master key (CMK) dari set kunci yang ingin Anda enkripsi. Nilai parameter ini 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 dari peran RAM yang memiliki izin pada KMS. Peran ini harus diasumsikan oleh MaxCompute. Nilai parameter ini dalam format
'acs:ram:${<userAID>}:role/${<roleName>}'. userAID menentukan ID pengguna, dan roleName menentukan nama peran.wrapped_keyset: wajib. Parameter ini menentukan wrapped keyset yang ada.
role_chain: opsional. Parameter ini menentukan rantai peran untuk otorisasi pengguna. Nilai parameter ini dalam format
'acs:ram:<userAID>:role/<roleName2>,acs:ram:<userBID>:role/<roleName3>},...'. Anda dapat menggunakan rantai peran untuk memanggil wrapped keyset di seluruh akun Alibaba Cloud.
Nilai Pengembalian
Set kunci yang telah disensitifkan dengan tipe STRUCT dikembalikan. Anda dapat menggunakan fungsi
get_json_objectuntuk memperoleh bidang terkait set kunci sesuai kebutuhan bisnis Anda.Contoh
CatatanKode sampel berikut berisi variabel. Anda harus menjalankan kode dalam mode skrip atau mengganti variabel dengan nilai sebenarnya dalam pernyataan SQL.
Memperoleh 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
Sintaksis
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 keyset terbungkus yang ditentukan. Anda dapat membuat keyset terbungkus dengan mengenkripsi keyset yang ada berdasarkan kunci dari Key Management Service (KMS). Dibandingkan dengan keyset dasar, Anda dapat menggunakan keyset terbungkus dengan KMS untuk mengelola kunci secara lebih aman.Sebelum Anda menggunakan fungsi
ENHANCED_SYM_ENCRYPT, pastikan prasyarat berikut telah dipenuhi:Keyset dasar atau keyset terbungkus dihasilkan dengan menggunakan fungsi
NEW_KEYSETatauNEW_WRAPPED_KEYSET. Untuk informasi lebih lanjut, lihat NEW_KEYSET atau NEW_WRAPPED_KEYSET.Keyset dasar diperoleh dari keyset terbungkus dengan menggunakan fungsi
USE_WRAPPED_KEYSET. Prasyarat ini harus dipenuhi jika Anda ingin menggunakan keyset terbungkus untuk mengenkripsi data. Keyset dasar digunakan sebagai parameter dalam fungsiENHANCED_SYM_ENCRYPTuntuk mengenkripsi data. Selain itu, akun Anda diberi peran yang memiliki izin untuk menggunakan keyset terbungkus.
Parameter
keyset: wajib. Parameter ini menentukan keyset dasar tipe BINARY atau keyset terbungkus tipe STRUCT.
plaintext: wajib. Parameter ini menentukan plaintext tipe STRING atau BINARY yang ingin Anda enkripsi.
additional_data: opsional. Parameter ini menentukan informasi verifikasi yang didukung oleh algoritma. Informasi verifikasi adalah tipe STRING.
Nilai Pengembalian
Teks sandi tipe BINARY dikembalikan.
Data Sampel
-- Buat tabel. create table mf_user_info(id bigint, name string, gender string, id_card_no string, tel string); -- Masukkan data ke dalam tabel. 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 dari tabel. 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
Enkripsi kolom
id_card_nodi tabelmf_user_infomenggunakan keyset dasar.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 sampel berikut menampilkan 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 | +------------+------+--------+------------+-----+Kolom
teldi tabelmf_user_infodienkripsi menggunakan keyset yang dibungkus.Hasilkan keyset terbungkus dan tulis ke tabel.
-- Buat tabel. create table mf_keyset_kms (id string,ks binary); -- Buat keyset terbungkus dan tulis ke tabel. 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 dari tabel. select id,hex(ks) from mf_keyset_kms; -- Hasil berikut dikembalikan: +----+-----+ | id | _c1 | +----+-----+ | 1 | 613256354C576836656A59314D6D59344E7A6B7A624452754D6D3434627A49786443317A655859786358426F4E6A4D78447654524C4632635077766E74554654584579715242583953724167446D2F397131786F57456E6F5474516739633853766242674456773565736674714A4D5435524455382F6F6A2B4E61766D774344494C734B6A416B6B675A42496F5568656F566D38564C4F30506D4778767137646956517453447A5467395147775639533161305A464A6D6A45562B6742722F56386653444D6E424D2B71493779784668303866594E6D336578775744423949726B645A3469784F2B532B476E6750523854524A58326E5768666478347034473468687248684A514D615071332F526C342B67427652773D3D | +----+-----+Enkripsi kolom
telmenggunakan keyset terbungkus.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
Sintaksis
binary ENHANCED_SYM_DECRYPT(binary <keyset> , binary <ciphertext> [,string <additional_data>])Deskripsi
MaxCompute memungkinkan Anda menggunakan fungsi
ENHANCED_SYM_DECRYPTuntuk mendekripsi data dengan menggunakan Set kunci dasar atau Set kunci terbungkus yang ditentukan. Set kunci dasar atau Set kunci terbungkus yang digunakan untuk dekripsi data harus sama dengan yang digunakan untuk enkripsi data. Anda dapat membuat Set kunci terbungkus dengan mengenkripsi Set kunci yang ada berdasarkan kunci dari Key Management Service (KMS). Dibandingkan dengan Set kunci dasar, Anda dapat menggunakan Set kunci terbungkus dengan KMS untuk mengelola kunci secara lebih aman.Sebelum Anda menggunakan fungsi
ENHANCED_SYM_DECRYPT, pastikan prasyarat berikut telah terpenuhi:Set kunci dasar atau Set kunci terbungkus dihasilkan dengan menggunakan fungsi
NEW_KEYSETatauNEW_WRAPPED_KEYSET. Untuk informasi lebih lanjut, lihat NEW_KEYSET atau NEW_WRAPPED_KEYSET.Akun Anda diberi peran yang memiliki izin untuk menggunakan Set kunci terbungkus. Prasyarat ini harus dipenuhi jika Anda ingin mendekripsi data dengan menggunakan Set kunci terbungkus.
Parameter
keyset: wajib. Parameter ini menentukan Set kunci dasar tipe BINARY atau Set kunci terbungkus tipe STRUCT.
PentingSet kunci dasar atau Set kunci terbungkus yang digunakan untuk dekripsi data harus sama dengan yang digunakan untuk enkripsi data.
ciphertext: wajib. Parameter ini menentukan ciphertext tipe BINARY yang dienkripsi dengan menggunakan Set kunci yang ditentukan.
additional_data: opsional. Parameter ini menentukan informasi verifikasi yang didukung oleh algoritma. Informasi verifikasi adalah tipe STRING.
Nilai Pengembalian
Teks biasa tipe BINARY dikembalikan.
Data Sampel
-- Buat tabel. create table mf_user_info(id bigint, name string, gender string, id_card_no string, tel string); -- Masukkan data ke dalam tabel. 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 dari tabel. 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_noterenkripsi dalam tabelmf_user_infodengan menggunakan Set kunci dasar.PentingSebelum Anda mendekripsi data, pastikan bahwa data telah dienkripsi, dan Set kunci dasar atau Set kunci terbungkus yang digunakan untuk dekripsi data sama dengan yang digunakan untuk enkripsi data. Untuk informasi lebih lanjut tentang contoh operasi enkripsi, lihat 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;Pernyataan sampel berikut menanyakan hasil dekripsi:
select * from mf_user_info; -- Hasil berikut 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
telterenkripsi dalam tabelmf_user_infodengan menggunakan Set kunci terbungkus.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;Hasil berikut 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 | +------------+------+--------+------------+------+