PolarDB memungkinkan Anda mengenkripsi data pada kolom tertentu. Saat mengakses data tersebut, Anda menggunakan fungsi dekripsi untuk mengambil teks biasa, sehingga meningkatkan keamanan data.
Fitur enkripsi kolom berada dalam ketersediaan terbatas, sehingga parameternya disembunyikan secara default. Untuk mengaktifkan fitur ini, buka Quota Center, temukan kuota berdasarkan Quota ID-nya polardb_mysql_column_encryption, lalu klik Apply di kolom Actions.
Persyaratan versi
Fitur ini hanya tersedia untuk PolarDB for MySQL 8.0.2, versi 8.0.2.2.30 atau lebih baru.
Latar belakang
Pada versi sebelumnya, PolarDB for MySQL menggunakan fungsi enkripsi seperti aes_encrypt untuk melakukan enkripsi data tingkat field. Namun, pendekatan ini mengharuskan Anda mengelola kunci, menangani rotasi kunci, dan mengontrol izin akses di sisi klien. Fitur enkripsi kolom PolarDB for MySQL mengintegrasikan operasi tersebut ke dalam server database. Anda cukup mengatur properti enkripsi untuk kolom yang ingin dilindungi. Selain itu, enkripsi kolom menggunakan Online DDL untuk melakukan rotasi kunci tanpa blocking.
Batasan
Dampak performa
-
Write Performance
Penggunaan enkripsi kolom menimbulkan overhead performa. Dengan binary log dinonaktifkan, enkripsi kolom menambahkan overhead sekitar 3% pada operasi insert single-threaded. Overhead ini lebih rendah ketika binary log diaktifkan atau jika tabel memiliki struktur baris lebar, karena perubahan pola I/O sistem dan alokasi sumber daya.
-
Performa Baca
Overhead performa read bergantung pada apakah fungsi dekripsi digunakan dalam kueri. Satu pemanggilan fungsi dekripsi dalam pernyataan SQL dapat menurunkan performa sekitar 6%.
Penggunaan indeks
Hanya kueri titik (point queries) yang dapat menggunakan indeks untuk pengambilan data secara efisien. Operasi seperti kueri rentang (misalnya, WHERE age>20) dan pencocokan pola (misalnya, LIKE '%key%') tidak menggunakan indeks dan menghasilkan pemindaian tabel penuh.
Batasan properti tabel
-
Enkripsi tidak didukung untuk tabel yang berisi kolom virtual.
-
Hanya tabel yang menggunakan mesin penyimpanan InnoDB yang didukung.
-
Tabel partisi tidak didukung.
-
Kolom terenkripsi harus bertipe
varbinary. -
Panjang kolom harus minimal 44 byte.
-
Anda tidak dapat langsung menambahkan kolom terenkripsi baru. Anda harus memodifikasi kolom yang sudah ada dan belum terenkripsi untuk mengenkripsinya.
Penggunaan
Enkripsi kolom dan fitur TDE sama-sama menggunakan Key Management Service (KMS) untuk manajemen kunci.
1. Sintaksis (kontrol izin, DDL, dan DML)
Kontrol izin
Untuk menggunakan enkripsi kolom, akun database Anda harus memiliki hak istimewa ENCRYPTION_FUN_ADMIN. Akun istimewa dapat memberikan hak istimewa ini.
-- Berikan hak istimewa
GRANT ENCRYPTION_FUN_ADMIN ON *.* TO 'testman'@'%';
-- Lihat hak istimewa
SHOW GRANTS;
DDL
Buat kolom terenkripsi
Gunakan kata kunci ENCRYPTION untuk menentukan kolom terenkripsi.
-
Tentukan kolom
pansebagai kolom terenkripsi.USE mydatabase; CREATE TABLE IF NOT EXISTS `my_pan` ( `id` INT NOT NULL AUTO_INCREMENT, `pan` VARBINARY(128) NOT NULL ENCRYPTION, `desc` blob Default NULL, KEY `idx_pan` (`pan`), PRIMARY KEY (`id`) );CatatanAnda dapat membuat kolom terenkripsi dengan nilai default
NULL, tetapi nilaiNULLtersebut tidak dienkripsi. -
Anda dapat menggunakan pernyataan
MODIFYuntuk mengonversi kolom biasa menjadi kolom terenkripsi, atau sebaliknya.ALTER TABLE my_pan MODIFY `pan` VARBINARY(128) ENCRYPTION; ALTER TABLE my_pan MODIFY `pan` VARBINARY(128) NOT ENCRYPTION;CatatanAnda tidak dapat langsung menambahkan kolom terenkripsi baru. Anda harus menggunakan pernyataan
MODIFYuntuk mengonversi kolom biasa yang sudah ada.
Buat indeks
Membuat indeks pada kolom terenkripsi menggunakan sintaksis yang sama seperti pada kolom biasa.
CREATE index idx_pan ON my_pan(pan);
Data dalam indeks dienkripsi. Indeks itu sendiri diurutkan berdasarkan urutan nilai ciphertext.
DML
Berikut adalah fungsi enkripsi dan dekripsi:
-- Fungsi enkripsi
enhanced_aes_encrypt(data, db_name, table_name)
-- Fungsi dekripsi
enhanced_aes_decrypt(data)
Masukkan data
Data yang dimasukkan ke dalam kolom terenkripsi akan dienkripsi secara otomatis, sehingga Anda tidak perlu memanggil fungsi enhanced_aes_encrypt.
INSERT INTO `my_pan` VALUES(1,"my_passwd", "aaa");
Kueri data
# 1. Kueri dengan mendekripsi nilai kolom. Ini tidak menggunakan indeks dan melakukan pemindaian tabel penuh.
SELECT id,enhanced_aes_decrypt(pan) FROM `my_pan` WHERE enhanced_aes_decrypt(pan) = 'my_password_10';
# 2. Kueri titik menggunakan indeks. Hasil dikembalikan sebagai teks biasa.
SELECT id,enhanced_aes_decrypt(pan) FROM `my_pan` WHERE pan = enhanced_aes_encrypt('my_password_10', "mydatabase", "my_pan");
# 3. Kueri titik menggunakan indeks. Hasil dikembalikan sebagai ciphertext.
SELECT id, pan FROM `my_pan` WHERE pan = enhanced_aes_encrypt('my_password_10', "mydatabase", "my_pan");
Perbarui data
# Perbarui data dengan menggunakan indeks kunci primer.
UPDATE `my_pan` SET pan='new6-password', DESC='Senior6' WHERE id = 1;
# Perbarui data dengan menggunakan indeks pada kolom terenkripsi.
UPDATE `my_pan` SET pan='new6-password', DESC='Senior6' WHERE pan=enhanced_aes_encrypt('my_password_6', "mydatabase", "my_pan");
Hapus data
# Hapus data dengan menggunakan indeks kunci primer.
DELETE FROM `my_pan` WHERE id = 1;
# Hapus data dengan menggunakan indeks pada kolom terenkripsi.
DELETE FROM `my_pan` WHERE pan = enhanced_aes_encrypt('my_password_2', "mydatabase", "my_pan");
2. Manajemen kunci
-
Aktifkan fitur TDE.
Penting-
Mengaktifkan TDE akan merestart kluster PolarDB. Lakukan dengan hati-hati.
-
TDE tidak dapat dinonaktifkan setelah diaktifkan.
-
Mengaktifkan fitur TDE itu sendiri tidak menimbulkan overhead performa tambahan pada tabel yang tidak dienkripsi oleh TDE dan tidak berisi kolom terenkripsi.
-
Masuk ke PolarDB console. Di panel navigasi sebelah kiri, klik Clusters. Pilih wilayah kluster Anda, lalu klik ID kluster untuk membuka halaman detailnya.
-
Di panel navigasi sebelah kiri, klik Settings and Management > Security.
-
Di tab TDE Settings, aktifkan sakelar TDE Status dan pilih kunci kustom.
CatatanSebelum menghapus kunci di KMS, pastikan kunci tersebut tidak lagi dikaitkan dengan tabel terenkripsi apa pun, termasuk tabel dalam backup historis. Jika tidak, kluster PolarDB mungkin gagal restart.

-
-
Pilih kunci. Anda dapat memilih Use Default Key CMK atau Use Existing Custom Key.
Pada opsi Advanced, Anda dapat mengaktifkan enkripsi otomatis. Jika diaktifkan, semua tabel baru akan dienkripsi secara otomatis.
-
(Opsional) Lakukan rotasi kunci.
Catatan-
PolarDB tidak secara otomatis merotasi kunci kustom. Anda harus merotasi kunci tersebut secara manual. Untuk informasi selengkapnya, lihat Key rotation.
-
Setelah rotasi kunci, tabel terenkripsi baru menggunakan kunci baru. Data dalam tabel terenkripsi yang sudah ada tetap dienkripsi dengan kunci asli.
-
Rotasi data melibatkan proses dekripsi data dalam tabel lalu mengenkripsinya kembali dengan versi kunci terbaru. Proses ini mengonsumsi sumber daya CPU dan I/O. Rotasi data tidak wajib, tetapi Anda harus memastikan ketersediaan kunci yang digunakan oleh tabel Anda.
-
Penguncian tabel selama rotasi data:
-
Jika Online Copy dinonaktifkan, tabel akan dikunci selama rotasi data.
-
Jika Online Copy DDL diaktifkan, tabel tidak dikunci selama rotasi data. Operasi DML konkuren diperbolehkan, tetapi operasi DDL konkuren tidak.
-
Untuk mengenkripsi ulang data dalam tabel terenkripsi yang sudah ada dengan kunci baru, Anda harus menjalankan perintah rotasi data berikut secara manual:
ALTER TABLE <table_name> engine = innodb,algorithm=copy; -
-
Kueri kunci tabel.
Untuk mengkueri informasi kunci semua tabel terenkripsi dalam sistem, jalankan pernyataan SQL berikut:
SELECT * FROM information_schema.INNODB_COLUMN_ENCRYPTED_TABLE;
3. Pengaturan parameter
Aktifkan fitur enkripsi kolom dengan mengatur parameter loose_polar_enable_column_encryption. Untuk informasi selengkapnya tentang cara mengatur parameter, lihat Set cluster and node parameters. Tabel berikut menjelaskan parameter tersebut.
|
Parameter |
Deskripsi |
|
loose_polar_enable_column_encryption |
Mengontrol apakah fitur enkripsi kolom diaktifkan. Nilai yang valid:
|
4. (Opsional) Aktifkan Online Copy
Saat Anda menggunakan sintaksis COPY DDL untuk rotasi data (misalnya, untuk mengubah definisi tabel lintas mesin penyimpanan, menyesuaikan properti kolom, atau mengonversi antara tabel biasa dan tabel partisi), tabel dikunci secara default, yang dapat mengganggu layanan. Untuk mencegah hal ini, aktifkan fitur optimasi Online Copy DDL agar perubahan struktur tabel dapat dilakukan tanpa atau dengan penguncian minimal. Untuk informasi selengkapnya, lihat dokumentasi Online Copy DDL.