PolarDB memungkinkan Anda mengenkripsi kolom tertentu saat penyimpanan. Data asli dapat diambil menggunakan fungsi dekripsi, sehingga meningkatkan keamanan data.
Fitur enkripsi kolom sedang dalam rilis bertahap. Parameter fitur ini belum tersedia di konsol. Untuk menggunakannya, buka Quota Center, cari kuota dengan Quota ID polardb_mysql_column_encryption, lalu klik Apply pada kolom Actions.
Persyaratan versi
Fitur ini hanya didukung pada kluster PolarDB for MySQL 8.0.2 yang menjalankan versi minor 8.0.2.2.30 atau lebih baru.
Informasi latar belakang
Pada versi sebelumnya, PolarDB for MySQL menggunakan fungsi enkripsi seperti aes_encrypt untuk mengenkripsi data di tingkat bidang. Namun, metode tersebut mengharuskan klien mengelola kunci, rotasi kunci, dan izin akses. Fitur enkripsi kolom di PolarDB for MySQL mengintegrasikan operasi tersebut ke dalam server database. Anda cukup mengatur properti enkripsi untuk kolom yang ingin dienkripsi. Fitur ini juga mendukung rotasi kunci tanpa pemblokiran (non-blocking) menggunakan DDL Online.
Perhatian
Beban kinerja
Performa Penulisan
Penggunaan fitur enkripsi kolom menimbulkan beban kinerja. Ketika binary logging dinonaktifkan, beban kinerja untuk penyisipan single-threaded sekitar 3%. Perlu diperhatikan bahwa ketika binary logging diaktifkan atau tabel memiliki lebar baris yang besar, beban tersebut lebih rendah karena perubahan pada pola I/O sistem dan alokasi sumber daya.
Kinerja pembacaan
Beban kinerja pembacaan bergantung pada penggunaan fungsi dekripsi dalam kueri. Satu fungsi dekripsi dalam pernyataan SQL menimbulkan beban kinerja sekitar 6%.
Penggunaan Indeks
Hanya kueri titik (point queries) yang dapat memanfaatkan indeks untuk pengambilan data yang efisien. Kueri rentang, seperti WHERE age>20, dan kueri pencocokan pola, seperti LIKE '%key%', tidak dapat menggunakan indeks dan akan 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 bidang minimal 44 byte.
Anda tidak dapat langsung menambahkan kolom terenkripsi. Kolom standar harus dikonversi menjadi kolom terenkripsi terlebih dahulu.
Penggunaan
Enkripsi kolom dan fitur Transparent Data Encryption (TDE) sama-sama menggunakan Key Management Service (KMS) untuk manajemen kunci.
1. Sintaksis (kontrol akses, DDL, dan DML)
Kontrol akses
Untuk menggunakan fitur enkripsi kolom, akun database Anda harus memiliki izin ENCRYPTION_FUN_ADMIN. Akun istimewa dapat memberikan izin ini.
-- Memberikan izin
GRANT ENCRYPTION_FUN_ADMIN ON *.* TO 'testman'@'%';
-- Melihat izin
SHOW GRANTS;DDL
Membuat kolom terenkripsi
Gunakan kata kunci ENCRYPTION untuk menentukan kolom terenkripsi.
Tentukan kolom PAN sebagai 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. Namun, nilai NULL tidak dienkripsi.
Gunakan pernyataan `MODIFY` untuk mengonversi kolom standar 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. Kolom standar harus diubah menggunakan pernyataan `MODIFY`.
Membuat indeks
Anda juga dapat membuat indeks pada kolom terenkripsi dengan sintaksis yang sama seperti kolom standar. Contohnya:
CREATE index idx_pan ON my_pan(pan);Data dalam indeks dienkripsi, dan indeks tersebut diurutkan berdasarkan nilai terenkripsi.
DML
Bagian berikut menjelaskan dua fungsi enkripsi dan dekripsi:
-- Fungsi enkripsi
enhanced_aes_encrypt(data, db_name, table_name)
-- Fungsi dekripsi
enhanced_aes_decrypt(data)Menyisipkan data
Data yang dimasukkan ke dalam kolom terenkripsi secara otomatis dienkripsi. Anda tidak perlu menggunakan fungsi `enhanced_aes_encrypt`.
INSERT INTO `my_pan` VALUES(1,"my_passwd", "aaa");Kueri Data
# 1. Kueri titik tanpa indeks (kueri rentang)
SELECT id,enhanced_aes_decrypt(pan) FROM `my_pan` WHERE enhanced_aes_decrypt(pan) = 'my_password_10';
# 2. Kueri titik menggunakan indeks. Data yang diambil dalam bentuk 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. Data yang diambil dalam bentuk ciphertext.
SELECT id, pan FROM `my_pan` WHERE pan = enhanced_aes_encrypt('my_password_10', "mydatabase", "my_pan");Memperbarui data
# Memperbarui data menggunakan indeks kunci primer.
UPDATE `my_pan` SET pan='new6-password', DESC='Senior6' WHERE id = 1;
# Memperbarui data menggunakan indeks kolom terenkripsi.
UPDATE `my_pan` SET pan='new6-password', DESC='Senior6' WHERE pan=enhanced_aes_encrypt('my_password_6', "mydatabase", "my_pan");Menghapus data
# Menghapus data menggunakan indeks kunci primer.
DELETE FROM `my_pan` WHERE id = 1;
# Menghapus data menggunakan indeks kolom terenkripsi.
DELETE FROM `my_pan` WHERE pan = enhanced_aes_encrypt('my_password_2', "mydatabase", "my_pan");2. Manajemen kunci
Aktifkan fitur TDE.
PentingMengaktifkan TDE menyebabkan kluster PolarDB melakukan restart. Lakukan operasi ini dengan hati-hati.
Setelah TDE diaktifkan, fitur tersebut tidak dapat dinonaktifkan.
Mengaktifkan fitur TDE itu sendiri tidak menimbulkan beban kinerja tambahan untuk tabel non-TDE atau tabel yang tidak menggunakan enkripsi kolom.
Masuk ke Konsol PolarDB. Di panel navigasi sebelah kiri, klik Clusters. Pilih wilayah kluster, lalu klik ID kluster tersebut.
Di panel navigasi sebelah kiri, klik Settings and Management > Security.
Di tab TDE Settings, aktifkan TDE Status dan tentukan kunci kustom.
CatatanSebelum menghapus kunci di KMS, pastikan kunci tersebut telah diputuskan hubungannya dari semua tabel terenkripsi, termasuk versi historisnya. Jika tidak, kluster PolarDB mungkin menjadi tidak tersedia setelah restart.

Pilih kunci.
CatatanAnda dapat memilih Use an existing custom key atau Select a key in the pop-up window. Kunci dapat dihasilkan oleh layanan KMS.

(Opsional) Rotasi Kunci.
CatatanPolarDB tidak secara otomatis memperbarui versi kunci utama untuk kunci kustom. Anda dapat memperbarui versi kunci secara manual. Untuk informasi selengkapnya, lihat rotasi kunci.
Setelah rotasi kunci, tabel terenkripsi baru menggunakan kunci baru untuk enkripsi. Data dalam tabel terenkripsi yang sudah ada tetap dienkripsi dengan kunci asli.
Rotasi data mendekripsi data dalam tabel lalu mengenkripsinya kembali dengan versi kunci terbaru. Perhatikan bahwa operasi ini mengonsumsi sumber daya CPU dan I/O. Rotasi data tidak wajib, tetapi Anda harus memastikan bahwa semua kunci yang digunakan oleh tabel data tetap tersedia.
Penguncian tabel selama rotasi data
Jika fitur Online Copy tidak diaktifkan, tabel akan dikunci selama rotasi data.
Jika fitur Online Copy DDL diaktifkan, tabel tidak dikunci selama rotasi data. Operasi DML konkuren diperbolehkan, tetapi operasi DDL konkuren tidak diperbolehkan.
Untuk mengenkripsi ulang tabel yang sudah ada dengan kunci baru, jalankan perintah rotasi data berikut:
ALTER TABLE <table_name> engine = innodb,algorithm=copy;Query Kunci Tabel.
Anda dapat menjalankan pernyataan SQL berikut untuk memeriksa penggunaan kunci pada semua tabel terenkripsi dalam sistem.
SELECT * FROM information_schema.INNODB_COLUMN_ENCRYPTED_TABLE;
3. Pengaturan parameter
Anda dapat mengaktifkan fitur enkripsi kolom dengan mengatur parameter loose_polar_enable_column_encryption. Untuk informasi selengkapnya, lihat Set cluster and node parameters. Tabel berikut menjelaskan parameter ini.
Parameter | Deskripsi |
loose_polar_enable_column_encryption | Mengontrol apakah fitur enkripsi kolom diaktifkan. Nilai yang valid:
|
4. (Opsional) Aktifkan fitur Online Copy
Saat Anda menggunakan sintaks DDL `COPY` untuk rotasi data—seperti memodifikasi definisi tabel lintas mesin, menyesuaikan properti kolom, atau mengonversi antara tabel standar dan tabel partisi—tabel dikunci secara default, yang dapat memblokir layanan Anda. Untuk mengatasi hal ini, Anda dapat mengaktifkan fitur optimasi Online Copy, yang memungkinkan perubahan skema tabel tanpa penguncian atau dengan penguncian minimal. Tabel berikut menjelaskan parameter terkait.
Parameter | Deskripsi |
loose_polar_support_online_copy_ddl_algorithm | Sakelar utama untuk DDL Online Copy. Nilai yang valid:
|
loose_polar_support_online_copy_ddl_algorithm_for_modify | Mengizinkan rotasi data menggunakan pernyataan Modify. Anda harus mengatur parameter ini. Nilai yang valid:
|