All Products
Search
Document Center

PolarDB:Enkripsi kolom

Last Updated:Aug 28, 2026

PolarDB memungkinkan Anda mengenkripsi data pada kolom tertentu. Saat mengakses data tersebut, Anda menggunakan fungsi dekripsi untuk mengambil teks biasa, sehingga meningkatkan keamanan data.

Catatan

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

Catatan

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.

  1. 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`)
    );
    Catatan

    Anda dapat membuat kolom terenkripsi dengan nilai default NULL, tetapi nilai NULL tersebut tidak dienkripsi.

  2. Anda dapat menggunakan pernyataan MODIFY untuk 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;
    Catatan

    Anda tidak dapat langsung menambahkan kolom terenkripsi baru. Anda harus menggunakan pernyataan MODIFY untuk 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);
Catatan

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

  1. Otorisasi PolarDB untuk mengakses KMS.

  2. 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.

    1. Masuk ke PolarDB console. Di panel navigasi sebelah kiri, klik Clusters. Pilih wilayah kluster Anda, lalu klik ID kluster untuk membuka halaman detailnya.

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

    3. Di tab TDE Settings, aktifkan sakelar TDE Status dan pilih kunci kustom.

      Catatan

      Sebelum 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.

      image.png

  3. 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.

  4. (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;
  5. 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:

  • ON: Mengaktifkan fitur enkripsi kolom.

  • OFF (Default): Menonaktifkan fitur enkripsi kolom.

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.