Mengenkripsi data pada kolom tertentu dalam tabel menggunakan kunci acak dan mengembalikan ciphertext bertipe BINARY.
Catatan penggunaan
MaxCompute V2.0 menyediakan fungsi tambahan. Jika Anda menggunakan tipe data baru yang didukung dalam edisi tipe data MaxCompute V2.0, Anda harus mengeksekusi pernyataan SET untuk mengaktifkan edisi tersebut. Tipe data baru mencakup TINYINT, SMALLINT, INT, FLOAT, VARCHAR, TIMESTAMP, dan BINARY.
Tingkat sesi: Untuk mengaktifkan edisi tipe data MaxCompute V2.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 V2.0 pada tingkat proyek sesuai kebutuhan. Konfigurasi akan berlaku setelah 10 hingga 15 menit. Untuk mengaktifkannya, gunakan pernyataan berikut:
setproject odps.sql.type.system.odps2=true;Untuk informasi lebih lanjut tentang
setproject, lihat Operasi Proyek. Untuk panduan terkait tindakan pencegahan saat mengaktifkan edisi tipe data MaxCompute V2.0 pada tingkat proyek, lihat Edisi Tipe Data.
Sintaksis
binary sym_encrypt(string|binary <value_to_encrypt>,
binary <key>
[,string <encryption_method> ,
[ string <additional_authenticated_data> ]
]
)Parameter
value_to_encrypt: Wajib. Data yang ingin dienkripsi. Hanya mendukung tipe STRING dan BINARY.
key: Wajib. Kunci untuk mengenkripsi data. Harus bertipe BINARY dengan panjang 256 bit.
encryption_method: Opsional. Mode enkripsi. Algoritma AES-GCM-256 digunakan sebagai nilai default.
additional_authenticated_data: Opsional. Data terotentikasi tambahan (AAD) untuk memverifikasi keaslian dan integritas data. Didukung oleh algoritma authenticated encryption with associated data (AEAD), seperti AES-GCM.
Nilai kembali
Ciphertext bertipe BINARY dikembalikan.
Nilai kembali mencakup Initialization Vector (IV), ciphertext, dan tag AEAD secara berurutan.
Nilai kembali berbeda setiap kali meskipun menggunakan kunci yang sama untuk mengenkripsi plaintext yang sama.
Data sampel
-- Buat tabel.
create table mf_user_info(id bigint,
name string,
gender string,
id_card_no string,
tel string);
-- Masukkan data ke 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");
-- 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 1: Enkripsi data menggunakan kunci teks biasa.
Enkripsi data pada kolom tertentu tabel mf_user_info berdasarkan 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 lampirkan 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: Enkripsi data menggunakan tabel kunci.
Buat tabel kunci berdasarkan data sampel untuk mengelola kunci.
Prinsip
Untuk enkripsi data, simpan kunci di tabel MaxCompute dan lakukan operasi
JOINantara tabel kunci MaxCompute dan tabel yang kolom datanya ingin dienkripsi. Ini mencegah kebocoran kunci saat dilewatkan.Untuk dekripsi data, administrator Proyek tidak memberikan izin akses langsung pada tabel kunci MaxCompute kepada pengguna. Sebagai gantinya, administrator membuat tampilan aman dan memberi otorisasi kepada pengguna untuk mengakses tampilan tersebut serta memanggil fungsi dekripsi. Plaintext kunci tidak termasuk dalam tampilan, sehingga mencegah kebocoran kunci.
Tindakan Pencegahan
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, perlakukan parameter yang melibatkan kunci teks biasa dengan hati-hati.
Jika data yang ingin dienkripsi bertipe BINARY, jalankan perintah
set odps.sql.type.system.odps2=true;untuk mengaktifkan edisi tipe data MaxCompute V2.0.
Contoh pernyataan:
-- Buat tabel kunci.
create table mf_id_key(id bigint,key binary);
-- Masukkan kunci ke tabel kunci.
insert overwrite table mf_id_key
values (1,cast('b75585cf321cdcad42451690cdb7bfc4' as binary));
-- Query kunci.
select * from mf_id_key;
+------------+------+
| id | key |
+------------+------+
| 1 | b75585cf321cdcad42451690cdb7bfc4 |
+------------+------+
-- Query 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;
-- Query 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|
+------------+------+--------+------------+-----+Fungsi terkait
SYM_ENCRYPT adalah fungsi dekripsi. Untuk informasi lebih lanjut tentang fungsi enkripsi dan dekripsi, lihat Fungsi Enkripsi dan Dekripsi.