All Products
Search
Document Center

PolarDB:Enkripsi kolom

Last Updated:Mar 29, 2026

Enkripsi kolom memungkinkan Anda menyimpan kolom tertentu dalam bentuk terenkripsi dan mengambil data aslinya menggunakan fungsi dekripsi bawaan. Berbeda dengan enkripsi tingkat field menggunakan aes_encrypt, enkripsi kolom mengelola kunci di server database—sehingga bahkan pengguna yang memiliki akses langsung ke database tidak dapat membaca nilai terenkripsi tanpa secara eksplisit memanggil fungsi dekripsi. Pendekatan ini memberikan pemisahan yang jelas antara pihak yang memiliki data dan pihak yang mengoperasikan database.

Enkripsi kolom sedang dalam rilis bertahap. Parameter terkait belum tersedia di Konsol. Untuk menggunakan fitur ini, buka Quota Center. Temukan kuota dengan Quota ID polardb_mysql_column_encryption, lalu klik Apply pada kolom Actions.

Persyaratan versi

Didukung pada kluster PolarDB for MySQL 8.0.2 yang menjalankan versi minor 8.0.2.2.30 atau lebih baru.

Batasan

Tinjau batasan berikut sebelum mengaktifkan enkripsi kolom untuk memastikan fitur ini sesuai dengan kasus penggunaan Anda.

Overhead performa

OperasiOverheadKondisi
Penyisipan single-threaded (tulis)~3%Binary logging dinonaktifkan
Penyisipan single-threaded (tulis)Kurang dari 3%Binary logging diaktifkan, atau tabel memiliki lebar baris besar
Dekripsi per Pernyataan SQL (baca)~6%Satu panggilan enhanced_aes_decrypt per pernyataan

Penggunaan Indeks

Indeks pada kolom terenkripsi diurutkan berdasarkan ciphertext, bukan teks biasa. Karena perbandingan dalam ruang nilai terenkripsi tidak bermakna untuk rentang, hanya kueri titik (perbandingan kesamaan) yang dapat menggunakan indeks. Kueri rentang seperti WHERE age > 20 dan pencocokan pola seperti LIKE '%key%' tidak dapat menggunakan indeks dan akan menghasilkan pemindaian tabel penuh.

Jika kueri Anda memerlukan perbandingan rentang pada kolom sensitif, pertimbangkan untuk menerapkan enkripsi di lapisan aplikasi, tempat Anda memiliki kendali lebih besar atas logika kueri.

Batasan properti tabel

  • Tabel dengan kolom virtual tidak didukung.

  • Hanya mesin penyimpanan InnoDB yang didukung.

  • Tabel terpartisi tidak didukung.

  • Kolom terenkripsi harus menggunakan tipe VARBINARY.

  • Panjang field harus minimal 44 byte.

  • Anda tidak dapat menambahkan kolom terenkripsi secara langsung dengan ADD COLUMN. Gunakan MODIFY untuk mengonversi kolom standar yang sudah ada menjadi kolom terenkripsi.

Menyiapkan enkripsi kolom

Menyiapkan enkripsi kolom melibatkan empat langkah:

  1. Otorisasi PolarDB untuk mengakses KMS — memberikan izin kepada server database untuk menggunakan Key Management Service (KMS) dalam operasi kunci.

  2. Enable Transparent Data Encryption (TDE) — enkripsi kolom berbagi integrasi KMS dengan TDE.

  3. Aktifkan parameter enkripsi kolom — mengaktifkan fitur ini di tingkat kluster.

  4. Berikan hak istimewa yang diperlukan — akun database Anda harus memiliki hak istimewa ENCRYPTION_FUN_ADMIN.

Langkah 1: Otorisasi PolarDB untuk mengakses KMS

Otorisasi PolarDB untuk mengakses KMS sebelum melanjutkan.

Langkah 2: Aktifkan TDE

Enkripsi kolom menggunakan TDE untuk manajemen kunci. Aktifkan TDE di Konsol PolarDB.

Penting
  • Mengaktifkan TDE akan melakukan restart kluster PolarDB. Rencanakan downtime sebelum melanjutkan.

  • TDE tidak dapat dinonaktifkan setelah diaktifkan.

  • Mengaktifkan TDE itu sendiri tidak menimbulkan overhead performa tambahan untuk tabel non-TDE atau tabel yang tidak menggunakan enkripsi kolom.

  1. Masuk ke Konsol PolarDB. Di panel navigasi kiri, klik Clusters, pilih wilayah kluster, lalu klik ID kluster.

  2. Di panel navigasi kiri, klik Settings and Management > Security.

  3. Pada tab TDE Settings, aktifkan TDE Status dan tentukan kunci kustom.

    TDE settings page

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

    Key selection dialog

Sebelum menghapus kunci di KMS, pastikan kunci tersebut telah diputuskan asosiasinya dari semua tabel terenkripsi, termasuk versi historisnya. Jika tidak, kluster PolarDB mungkin menjadi tidak tersedia setelah restart.

Langkah 3: Aktifkan parameter enkripsi kolom

Atur parameter loose_polar_enable_column_encryption ke ON. Untuk petunjuknya, lihat Set cluster and node parameters.

ParameterDefaultDeskripsi
loose_polar_enable_column_encryptionOFFMengaktifkan atau menonaktifkan enkripsi kolom. Atur ke ON untuk mengaktifkan.

Langkah 4: Berikan hak istimewa yang diperlukan

Akun database Anda harus memiliki hak istimewa ENCRYPTION_FUN_ADMIN untuk menggunakan fungsi enkripsi kolom. Akun istimewa dapat memberikan hak istimewa ini.

-- Berikan hak istimewa
GRANT ENCRYPTION_FUN_ADMIN ON *.* TO 'testman'@'%';

-- Verifikasi hak istimewa
SHOW GRANTS;

Definisikan dan gunakan kolom terenkripsi

Buat tabel dengan kolom terenkripsi

Gunakan kata kunci ENCRYPTION untuk menandai kolom sebagai 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`)
);
Kolom dengan nilai default NULL dapat dienkripsi, tetapi nilai NULL tidak dienkripsi.

Konversi kolom yang sudah ada

Gunakan MODIFY untuk mengonversi kolom standar menjadi kolom terenkripsi, atau untuk menghapus enkripsi:

-- Konversi ke terenkripsi
ALTER TABLE my_pan MODIFY `pan` VARBINARY(128) ENCRYPTION;

-- Hapus enkripsi
ALTER TABLE my_pan MODIFY `pan` VARBINARY(128) NOT ENCRYPTION;

Buat indeks pada kolom terenkripsi

Sintaksnya sama seperti kolom standar. Data indeks disimpan sebagai ciphertext dan diurutkan berdasarkan nilai terenkripsi.

CREATE INDEX idx_pan ON my_pan(pan);

Sisipkan data

Data yang dimasukkan ke kolom terenkripsi akan dienkripsi secara otomatis. Memanggil enhanced_aes_encrypt saat penyisipan tidak diperlukan.

INSERT INTO `my_pan` VALUES(1, "my_passwd", "aaa");

Kueri data

Dua fungsi untuk enkripsi dan dekripsi adalah:

-- Enkripsi nilai (untuk digunakan dalam klausa WHERE)
enhanced_aes_encrypt(data, db_name, table_name)

-- Dekripsi nilai (untuk digunakan dalam klausa SELECT atau WHERE)
enhanced_aes_decrypt(data)

Tiga pola kueri umum:

-- 1. Kueri titik tanpa indeks (gaya kueri rentang): mendekripsi setiap baris, 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, mengembalikan 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, mengembalikan ciphertext
SELECT id, pan FROM `my_pan`
WHERE pan = enhanced_aes_encrypt('my_password_10', "mydatabase", "my_pan");

Perbarui dan hapus data

-- Perbarui menggunakan indeks kunci primer
UPDATE `my_pan` SET pan = 'new6-password', DESC = 'Senior6' WHERE id = 1;

-- Perbarui menggunakan indeks kolom terenkripsi
UPDATE `my_pan` SET pan = 'new6-password', DESC = 'Senior6'
WHERE pan = enhanced_aes_encrypt('my_password_6', "mydatabase", "my_pan");

-- Hapus menggunakan indeks kunci primer
DELETE FROM `my_pan` WHERE id = 1;

-- Hapus menggunakan indeks kolom terenkripsi
DELETE FROM `my_pan`
WHERE pan = enhanced_aes_encrypt('my_password_2', "mydatabase", "my_pan");

Manage keys

Lihat penggunaan kunci

Jalankan pernyataan berikut untuk melihat kunci yang sedang digunakan untuk semua tabel terenkripsi:

SELECT * FROM information_schema.INNODB_COLUMN_ENCRYPTED_TABLE;

Rotasi kunci

PolarDB tidak secara otomatis memperbarui versi kunci master untuk kunci kustom. Untuk melakukan rotasi kunci secara manual, lihat Key rotation.

Setelah rotasi kunci:

  • Tabel terenkripsi baru menggunakan kunci baru.

  • Tabel terenkripsi yang sudah ada tetap dienkripsi dengan kunci asli.

Enkripsi ulang tabel yang sudah ada

Rotasi data mengenkripsi ulang seluruh data dalam tabel menggunakan versi kunci terbaru. Operasi ini mengonsumsi sumber daya CPU dan I/O dan tidak wajib—tetapi semua kunci yang digunakan oleh tabel data yang sudah ada harus tetap tersedia.

ALTER TABLE <table_name> ENGINE = innodb, ALGORITHM = COPY;

Secara default, ALGORITHM = COPY mengunci tabel selama rotasi data. Untuk menghindari gangguan layanan, aktifkan fitur Online Copy (lihat Enable Online Copy).

Perilaku penguncian selama rotasi data:

Status Online Copy DDLPerilaku penguncian
Dinonaktifkan (default)Tabel dikunci selama rotasi data
DiaktifkanTabel tidak dikunci; DML konkuren diizinkan, DDL konkuren tidak diizinkan

Aktifkan Online Copy (opsional)

Saat menggunakan ALGORITHM=COPY untuk rotasi data atau perubahan skema lainnya, tabel dikunci secara default, yang dapat mengganggu layanan. Aktifkan fitur Online Copy DDL untuk melakukan operasi ini tanpa penguncian atau dengan penguncian minimal.

ParameterDefaultDeskripsi
loose_polar_support_online_copy_ddl_algorithmOFFSakelar utama untuk Online Copy DDL. Atur ke ON untuk mengaktifkan.
loose_polar_support_online_copy_ddl_algorithm_for_modifyOFFMengizinkan rotasi data menggunakan pernyataan MODIFY. Atur ke ON untuk mengaktifkan. Kedua parameter harus diatur bersamaan.

Langkah selanjutnya