MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

Menjelajahi Berbagai Cara untuk Mengenkripsi Data MariaDB Anda

Mengenkripsi database MariaDB Anda, baik saat transit maupun tidak, adalah salah satu hal terpenting yang harus dipertimbangkan organisasi jika Anda menghargai data Anda.

Organisasi yang menangani transaksi keuangan, catatan medis, informasi rahasia, atau bahkan data pribadi harus memerlukan jenis perlindungan data ini. Pada dasarnya, enkripsi database akan mengubah data Anda yang dapat dibaca menjadi format yang tidak dapat dibaca (atau setidaknya sulit untuk didekripsi) oleh pengguna yang tidak berwenang.

Mengenkripsi data Anda mencegah penyalahgunaan atau niat jahat oleh peretas atau personel tidak sah yang dapat merusak bisnis Anda. Data yang tidak terenkripsi rentan terhadap serangan peretas yang menyuntikkan data berbahaya yang dapat merusak infrastruktur Anda atau mencuri informasi. Quartz baru-baru ini merilis artikel tentang pelanggaran terbesar yang terjadi di sepanjang jalur ini dan mengkhawatirkan bahwa data telah dicuri dari miliaran akun selama dua dekade terakhir.

Referensi terkait Cara Mengenkripsi MySQL &MariaDB Backups Anda Keamanan Database - Enkripsi Cadangan Saat Transit &Saat Istirahat Diperbarui:Menjadi ClusterControl DBA - Pengelolaan Kunci SSL dan Enkripsi Data MySQL saat Transit

Di blog ini, kita akan membahas berbagai cara untuk mengenkripsi data MariaDB Anda baik dalam keadaan diam maupun dalam perjalanan. Kami akan memberi Anda pemahaman dasar tentang enkripsi dan cara menggunakannya sehingga Anda dapat memanfaatkan pendekatan ini untuk menjaga keamanan data Anda.

Mengenkripsi Data MariaDB:Dalam Transit

MariaDB tidak, secara default, menggunakan enkripsi selama transmisi data melalui jaringan dari server ke klien. Namun, menggunakan pengaturan default dapat memprovokasi calon peretas untuk menguping pada saluran yang tidak aman / tidak terenkripsi. Jika Anda beroperasi di lingkungan yang terisolasi atau sangat aman, status default ini mungkin dapat diterima. Namun, ini tidak ideal ketika klien dan jaringan Anda berada di jaringan yang berbeda karena database Anda disiapkan untuk kemungkinan serangan “man-in-the-middle”.

Untuk menghindari serangan ini, MariaDB memungkinkan Anda untuk mengenkripsi data transit antara server dan klien menggunakan protokol Transport Layer Security (TLS) (sebelumnya dikenal sebagai Secure Socket Layer atau SSL). Untuk memulai, Anda perlu memastikan bahwa server MariaDB Anda dikompilasi dengan dukungan TLS. Anda dapat memverifikasi ini dengan menjalankan pernyataan SHOW GLOBAL VARIABLES seperti yang ditunjukkan di bawah ini:

MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'version_ssl_library';
+---------------------+---------------------------------+
| Variable_name       | Value                           |
+---------------------+---------------------------------+
| version_ssl_library | OpenSSL 1.0.1e-fips 11 Feb 2013 |
+---------------------+---------------------------------+
1 row in set (0.001 sec)

Anda mungkin bingung bagaimana SSL &TSL berbeda. Dokumentasi dapat menggunakan istilah SSL dan variabel untuk konfigurasi menggunakan ssl_* sebagai awalan juga, namun, MariaDB hanya mendukung penerusnya yang aman dan tidak lagi versi SSL yang lebih lama. Anda mungkin harus mengidentifikasi dan menggunakan versi MariaDB yang benar yang memerlukan dukungan yang tepat dari versi TLS yang perlu Anda gunakan. Misalnya, PCI DSS v3.2 merekomendasikan penggunaan versi protokol minimum TLSv1.2 yang didukung oleh versi lama MariaDB. Namun, dengan TLS 1.3, memerlukan OpenSSL 1.1.1, lebih cepat karena jabat tangan yang lebih efisien antara dua sistem yang berkomunikasi dan ini didukung sejak MariaDB 10.2.16 dan MariaDB 10.3.8.

Untuk memanfaatkan cipher yang tersedia untuk versi TLS tertentu, Anda dapat mendefinisikannya menggunakan --ssl-cipher di mysqld perintah atau ssl-cipher variabel dalam file konfigurasi. Perhatikan bahwa cipher TLSv1.3 tidak dapat dikecualikan saat menggunakan OpenSSL, bahkan dengan menggunakan variabel sistem ssl_cipher.

Parameter Konfigurasi Untuk Mengenkripsi Data Dalam Transit

Untuk mengenkripsi data Anda dalam perjalanan, Anda dapat melakukan urutan perintah yang tercantum di bawah ini:

Buat Sertifikat CA

openssl genrsa 2048 > ca-key.pem
openssl req -new -x509 -nodes -days 365000 -subj "/C=PH/ST=Davao Del Sur/L=Davao City/O=Maximus Aleksandre/CN=CA Server"  -key ca-key.pem -out ca-cert.pem

Buat Sertifikat Server

openssl req -newkey rsa:2048 -days 365000 -nodes -keyout server-key.pem -out server-req.pem -subj "/C=PH/ST=Davao Del Sur/L=Davao City/O=Maximus Aleksandre/CN=DB Server" 
openssl  rsa -in server-key.pem -out server-key.pem
openssl x509 -req -in server-req.pem -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out server-cert.pem

Buat Sertifikat Klien

openssl req -newkey rsa:2048 -days 365000 -nodes -keyout client-key.pem -out client-req.pem  -subj "/C=PH/ST=Davao Del Sur/L=Davao City/O=Maximus Aleksandre/CN=Client Server"
openssl rsa -in client-key.pem -out client-key.pem
openssl  x509 -req -in client-req.pem -days 365000 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out client-cert.pem

Perhatikan bahwa Common Name (CN) Anda di -subj argumen harus unik terhadap CA, server, dan sertifikat klien yang Anda buat. Secara teknis, CA dan Server dapat memiliki CN yang sama tetapi yang terbaik adalah menjadikannya sebagai pengenal unik untuk ketiganya. Jika tidak, Anda akan menerima pesan kesalahan seperti ini:

ERROR 2026 (HY000): SSL connection error: tlsv1 alert unknown ca

Baiklah, sertifikat dan kunci sudah ada. Anda perlu menentukan jalur menggunakan variabel ssl_* dalam file konfigurasi MySQL Anda (mis. /etc/my.cnf untuk OS berbasis RHEL atau /etc/mysql/my.cnf untuk OS Debian/Ubuntu). Lihat contoh konfigurasi di bawah ini:

[msqld]
...
ssl_ca=/etc/ssl/galera/self-gen/ca-cert.pem
ssl_cert=/etc/ssl/galera/self-gen/server-cert.pem
ssl_key=/etc/ssl/galera/self-gen/server-key.pem

Tentu saja, Anda harus menentukan jalur yang benar di mana Anda meletakkan sertifikat dan kunci Anda.

Kemudian tempatkan parameter ini di bawah [client-mariadb] bagian dari file konfigurasi Anda seperti di bawah ini:

[client-mariadb]
ssl_ca = /etc/ssl/galera/self-gen/ca-cert.pem
ssl_cert=/etc/ssl/galera/self-gen/client-cert.pem
ssl_key=/etc/ssl/galera/self-gen/client-key.pem

Seperti disebutkan sebelumnya, Anda dapat menentukan jenis sandi apa yang dapat digunakan oleh konfigurasi SSL/TLS Anda. Ini dapat dilakukan dengan menentukan pengaturan konfigurasi di bawah ini:

[mysqld]
…
ssl_ca=/etc/ssl/galera/self-gen/ca-cert.pem
ssl_cert=/etc/ssl/galera/self-gen/server-cert.pem
ssl_key=/etc/ssl/galera/self-gen/server-key.pem
ssl-cipher=AES256-GCM-SHA384

Atau Anda dapat menggunakan konfigurasi berikut seperti di bawah ini:

ssl-cipher=TLSv1.2      ### This will use all Ciphers available in TLS v1.2
ssl-cipher=HIGH:!DSS:!RCA-SHA:!DES-CBC3-SHA:[email protected]       ### Will list strong ciphers available and exclude ciphers in prefix.

Baris terakhir menunjukkan setara dengan perintah ini:

openssl ciphers -v 'HIGH:!DSS:!RCA-SHA:!DES-CBC3-SHA:[email protected]'

Ini akan mengecualikan cipher yang lemah dan cipher yang berada dalam bentuk awalan seperti DHE-DSS-AES256-GCM-SHA384 sandi misalnya.

Membuat Sertifikat Anda menggunakan ClusterControl

Atau, Anda dapat menggunakan ClusterControl untuk menghasilkan sertifikat dan kunci untuk Anda. Untuk melakukannya, Anda dapat melakukan hal berikut seperti yang terlihat di bawah ini:

  1. Pilih Cluster MariaDB Anda, lalu buka Keamanan tab dan pilih Enkripsi SSL. Dalam contoh saya di bawah ini, ini adalah Cluster MariaDB Galera:
  2. Pilih Enkripsi SSL dan aktifkan. Anda akan dapat membuat sertifikat baru atau memilih yang sudah ada. Untuk contoh ini, saya akan memilih opsi "Buat Sertifikat":
  3. Langkah terakhir adalah mengonfigurasi hari kedaluwarsa untuk sertifikat Anda. Lihat di bawah: Jika Anda mengeklik "Mulai Ulang Node", ClusterControl akan memulai ulang bergulir. Perhatikan, jika Anda menggunakan MariaDB 10.4 (yang saat ini dalam versi RC-nya), Anda dapat menggunakan SSL tanpa me-restart server MariaDB Anda. Cukup gunakan perintah FLUSH SSL yang merupakan fitur baru yang ditambahkan di versi MariaDB 10.4.

Cara lain untuk menangani sertifikat/kunci TLS/SSL, Anda juga dapat menggunakan Pengelolaan Kunci di bawah ClusterControl. Kunjungi blog ini untuk mempelajari lebih lanjut tentang cara melakukannya.

Buat Pengguna MariaDB TLS/SSL Anda

Jika Anda pikir Anda sudah selesai, ternyata tidak. Anda perlu memastikan bahwa pengguna Anda diharuskan menggunakan SSL saat mereka terhubung ke server. Pengguna ini akan diminta untuk selalu berinteraksi dengan server melalui saluran pribadi. Ini sangat penting karena Anda perlu memastikan bahwa semua klien Anda akan berinteraksi dengan server Anda dengan cara yang sangat aman dan pribadi.

Untuk melakukannya, lakukan saja contoh berikut:

MariaDB [(none)]> CREATE USER [email protected]'192.168.10.200' IDENTIFIED BY '[email protected]';
Query OK, 0 rows affected (0.005 sec)
MariaDB [(none)]> GRANT ALL ON *.* TO [email protected]'192.168.10.200' REQUIRE SSL;
Query OK, 0 rows affected (0.005 sec)

Pastikan bahwa setelah menghubungkan ke klien/host aplikasi Anda, salin sertifikat yang telah Anda buat berdasarkan langkah-langkah sebelumnya.

Memverifikasi Koneksi Anda

Menguji koneksi Anda apakah dienkripsi atau tidak sangat penting untuk menentukan statusnya. Untuk melakukannya, Anda dapat melakukan perintah berikut di bawah ini:

mysql -e "status"|grep -i 'cipher'
SSL:                    Cipher in use is DHE-RSA-AES256-GCM-SHA384

Atau, OpenSSL versi 1.1.1 menambahkan dukungan untuk -starttls mysql . Ada biner openssl yang dikompilasi secara statis yang bisa Anda dapatkan di sini https://testssl.sh/openssl-1.0.2k-dev-chacha.pm.ipv6.Linux+FreeBSD.tar.gz (atau checkout presentasi ini dalam format PDF) . Kemudian Anda dapat melakukan perintah berikut di bawah ini:

echo | bin/openssl.Linux.x86_64.static s_client -starttls mysql -connect localhost:3306 -CAfile /etc/ssl/galera/self-gen/ca-cert.pem

Contoh hasilnya akan seperti di bawah ini:

$ echo | bin/openssl.Linux.x86_64.static s_client -starttls mysql -connect localhost:3306 -CAfile /etc/ssl/galera/self-gen/ca-cert.pem 
CONNECTED(00000003)
depth=1 C = PH, ST = Davao Del Sur, L = Davao City, O = Maximus Aleksandre, CN = CA Server
verify return:1
depth=0 C = PH, ST = Davao Del Sur, L = Davao City, O = Maximus Aleksandre, CN = DB Server
verify return:1
---
Certificate chain
 0 s:/C=PH/ST=Davao Del Sur/L=Davao City/O=Maximus Aleksandre/CN=DB Server
   i:/C=PH/ST=Davao Del Sur/L=Davao City/O=Maximus Aleksandre/CN=CA Server
 1 s:/C=PH/ST=Davao Del Sur/L=Davao City/O=Maximus Aleksandre/CN=CA Server
   i:/C=PH/ST=Davao Del Sur/L=Davao City/O=Maximus Aleksandre/CN=CA Server
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIDTDCCAjQCAQEwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCUEgxFjAUBgNV
BAgMDURhdmFvIERlbCBTdXIxEzARBgNVBAcMCkRhdmFvIENpdHkxGzAZBgNVBAoM
Ek1heGltdXMgQWxla3NhbmRyZTESMBAGA1UEAwwJQ0EgU2VydmVyMCAXDTE5MDYx
MDAyMTMwNFoYDzMwMTgxMDExMDIxMzA0WjBrMQswCQYDVQQGEwJQSDEWMBQGA1UE
CAwNRGF2YW8gRGVsIFN1cjETMBEGA1UEBwwKRGF2YW8gQ2l0eTEbMBkGA1UECgwS
TWF4aW11cyBBbGVrc2FuZHJlMRIwEAYDVQQDDAlEQiBTZXJ2ZXIwggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNwFuoqJg8YlrDinxDZN4+JjFUTGlDfhmy
9H/1C4fZToegvd3RzU9mz3/Fgyuoez4szHDgkn7o4rqmKAH6tMm9R44qtBNGlxka
fn12PPXudDvij4A9C3nVatBJJXTSvSD4/eySY33kAS1DpKsgsTgKAKOsyadcvXYU
IP5nfFc7pxX/8qZADVmyeik4M+oLxO6ryurt0wmUhOmlz5zQghh9kFZLA49l+p95
m5D53d/O+Qj4HSb2ssZD2ZaRc2k4dMCVpa87xUbdP/VVLeu0J4BE3OJiwC0N1Jfi
ZpP2DOKljsklaAYQF+tPnWi5pgReEd47/ql0fNEjeheF/MJiJM1NAgMBAAEwDQYJ
KoZIhvcNAQELBQADggEBAAz7yB+UdNYJ1O5zJI4Eb9lL+vNVKhRJ8IfNrwKVbpAT
eQk9Xpn9bidfcd2gseqDTyixZhWjsjO2LXix7jRhH1DrJvhGQ7+1w36ujtzscTgy
ydLH90CnE/oZHArbBhmyuqmu041w5rB3PpI9i9SveezDrbVcaL+qeGo8s4ATB2Yr
Y3T3OTqw6o/7cTJJ8S1aXBLTyUq5HAtOTM2GGZMSYwVqUsmBHA3d7M8i7yp20RVH
78j1H6+/hSSY4SDhwr04pSkzmm6HTIBCgOYrmEV2sQ/YeMHqVrSplLRY3SZHvqHo
gbSnasOQAE1oJnSNyxt9CRRAghM/EHEnsA2OlFa9iXQ=
-----END CERTIFICATE-----
subject=/C=PH/ST=Davao Del Sur/L=Davao City/O=Maximus Aleksandre/CN=DB Server
issuer=/C=PH/ST=Davao Del Sur/L=Davao City/O=Maximus Aleksandre/CN=CA Server
---
No client certificate CA names sent
Client Certificate Types: RSA fixed DH, DSS fixed DH, RSA sign, DSA sign, ECDSA sign
Requested Signature Algorithms: RSA+SHA512:DSA+SHA512:ECDSA+SHA512:RSA+SHA384:DSA+SHA384:ECDSA+SHA384:RSA+SHA256:DSA+SHA256:ECDSA+SHA256:RSA+SHA224:DSA+SHA224:ECDSA+SHA224:RSA+SHA1:DSA+SHA1:ECDSA+SHA1
Shared Requested Signature Algorithms: RSA+SHA512:DSA+SHA512:ECDSA+SHA512:RSA+SHA384:DSA+SHA384:ECDSA+SHA384:RSA+SHA256:DSA+SHA256:ECDSA+SHA256:RSA+SHA224:DSA+SHA224:ECDSA+SHA224:RSA+SHA1:DSA+SHA1:ECDSA+SHA1
Peer signing digest: SHA512
Server Temp Key: DH, 2048 bits
---
SSL handshake has read 3036 bytes and written 756 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : DHE-RSA-AES256-GCM-SHA384
    Session-ID: 46E0F6FA42779DB210B4DF921A68E9E4CC39ADD87D28118DB0073726B98C0786
    Session-ID-ctx: 
    Master-Key: 2A2E6137929E733051BE060953049A0553F49C2F50A183EEC0C40F7EFB4E2749E611DF54A88417518A274EC904FB3CE6
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - 4a dd f3 7f 1e b7 9e cb-77 58 b9 75 53 34 5c 61   J.......wX.uS4\a
    0010 - 3a 4d 0e aa e2 6b 27 8e-11 ff be 24 ad 66 88 49   :M...k'....$.f.I
    0020 - c1 ba 20 20 d8 9f d5 5c-23 9d 64 dc 97 f2 fa 77   ..  ...\#.d....w
    0030 - bf e6 26 1f 2c 98 ee 3b-71 66 0c 04 05 3e 54 c1   ..&.,..;qf...>T.
    0040 - 88 b6 f7 a9 fd b8 f9 84-cd b8 99 9f 6e 50 3b 13   ............nP;.
    0050 - 90 30 91 7d 48 ea 11 f7-3f b7 6b 65 2e ea 7e 61   .0.}H...?.ke..~a
    0060 - 70 cd 4e b8 43 54 3d a0-aa dc e5 44 a7 41 3a 5e   p.N.CT=....D.A:^
    0070 - 3e cb 45 57 33 2b a4 8f-75 d8 ce a5 9e 00 16 50   >.EW3+..u......P
    0080 - 24 aa 7a 54 f8 26 65 74-11 d7 f3 d6 66 3b 14 60   $.zT.&et....f;.`
    0090 - 33 98 4a ef e2 17 ba 33-4e 7f 2b ce 46 d7 e9 11   3.J....3N.+.F...

    Start Time: 1560133350
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
DONE
ClusterControlSingle Console untuk Seluruh Infrastruktur Basis Data AndaCari tahu apa lagi yang baru di ClusterControlInstall ClusterControl GRATIS

Mengenkripsi Data MariaDB:Saat Istirahat

Data terenkripsi yang disimpan secara fisik di dalam penyimpanan perangkat keras Anda (yaitu saat istirahat) memberikan lebih banyak stabilitas dan perlindungan terhadap pelanggaran data. Jika penyerang jahat dapat masuk ke database MariaDB Anda, maka mereka dapat membaca data dalam teks biasa. Mirip dengan menggunakan perintah string di Linux, Anda akan dapat dengan mudah mengambil data dari database. Selain itu, ini akan menambah bahaya jika penyerang memiliki pemahaman lanjutan tentang format file tablespace.

Encryption at-rest adalah perlindungan tambahan, tetapi ini bukan pengganti firewall yang bagus, kata sandi yang kuat, izin pengguna yang benar, dan enkripsi saat transit antara klien dan server.

Dukungan MariaDB untuk enkripsi pada tabel dan tablespace telah ditambahkan di versi 10.1.3. Dengan tabel Anda dienkripsi, data Anda hampir tidak mungkin dicuri oleh seseorang. Jenis enkripsi ini juga memungkinkan organisasi Anda untuk mematuhi peraturan pemerintah seperti GPDR.,

Setelah Anda mengaktifkan enkripsi data saat istirahat di MariaDB, tabel yang ditentukan dengan ENCRYPTED=YES atau dengan innodb_encrypt_tables=ON, akan membuat data tersimpan Anda dienkripsi. Ini didekripsi hanya ketika diakses melalui database MariaDB, jika tidak, data tidak dapat dibaca.

Misalnya, membaca data yang tidak dienkripsi, Anda akan ditampilkan seperti ini:

$ strings admin_logs.ibd|head -10
=r7N
infimum
supremum
infimum
supremum/
failThe verification code you entered is incorrect.KK
elmo1234failThe password or username you entered is invalidKK
elmo1234failThe password or username you entered is invalidKK
elmoasfdfailThe verification code you entered is incorrect.KK
safasffailThe verification code you entered is incorrect.KK

tetapi dengan data terenkripsi, tablespace Anda tidak akan terbaca seperti contoh di bawah ini:

# strings user_logs.ibd |head -10
E?*Pa
[+YQ
KNmbUtQ
T_lPAW
\GbQ.
] e2
#Rsd
ywY%o
kdUY
{]~GE

Perlu juga dicatat bahwa enkripsi Data-At-Rest MariaDB menambahkan overhead ukuran data sekitar 3-5%. Enkripsi MariaDB juga didukung penuh saat menggunakan mesin penyimpanan XtraDB dan InnoDB. Enkripsi juga didukung untuk mesin penyimpanan Aria, tetapi hanya untuk tabel yang dibuat dengan ROW_FORMAT=PAGE (default) dan untuk log biner (log replikasi). MariaDB bahkan memungkinkan pengguna secara fleksibel dalam mengenkripsi. Di XtraDB atau InnoDB, seseorang dapat memilih untuk mengenkripsi:

  • semuanya — semua tablespace (dengan semua tabel)
  • meja individual
  • semuanya, tidak termasuk tabel individual

Selain itu, seseorang dapat memilih untuk mengenkripsi file log XtraDB/InnoDB (yang direkomendasikan).

MariaDB memang memiliki keterbatasan. Gcache Galera Cluster, misalnya, tidak dienkripsi tetapi direncanakan sebagai bagian dari versi MariaDB 10.4. Anda dapat menemukan daftar lengkap batasan di sini.

Cara Menyiapkan dan Mengonfigurasi MariaDB untuk Enkripsi Data Saat Istirahat

  1. Buat kunci enkripsi acak menggunakan perintah openssl rand.
    $ mkdir -p /etc/mysql/encryption
    $ for i in {1..5}; do openssl rand -hex 32 >> /etc/mysql/encryption/keyfile;  done;
    Sekarang, buka dan edit file /etc/mysql/encryption/keyfile dan tambahkan ID kunci yang akan menjadi referensi saat membuat tabel terenkripsi sebagai id kunci enkripsi. Lihat ENCRYPTION_KEY_ID untuk detail selengkapnya. Oleh karena itu, format berikut harus sebagai berikut:
    <encryption_key_id1>;<hex-encoded_encryption_key1>
    <encryption_key_id2>;<hex-encoded_encryption_key2>
    In my example keyfile, this looks as the following:
    $ cat keyfile
    1;687a90b4423c10417f2483726a5901007571c16331d2ee9534333fef4e323075
    2;e7bf20f1cbde9632587c2996871cff74871890d19b49e273d13def123d781e17
    3;9284c9c80da9a323b3ac2c82427942dfbf1718b57255cc0bc0e2c3d6f15ac3ac
    4;abf80c3a8b10643ef53a43c759227304bcffa263700a94a996810b0f0459a580
    5;bdbc5f67d34a4904c4adc9771420ac2ab2bd9c6af1ec532e960335e831f02933
  2. Mari kita buat atau buat kata sandi acak menggunakan perintah serupa dari langkah 1:
    $ openssl rand -hex 128 > /etc/mysql/encryption/keyfile.key
  3. Sebelum melanjutkan ke langkah berikutnya, penting untuk memperhatikan detail berikut tentang mengenkripsi file kunci:
    • Satu-satunya algoritme yang saat ini didukung MariaDB untuk mengenkripsi file kunci adalah mode Cipher Block Chaining (CBC) dari Advanced Encryption Standard (AES).
    • Ukuran kunci enkripsi bisa 128-bit, 192-bit, atau 256-bit.
    • Kunci enkripsi dibuat dari hash SHA-1 dari sandi enkripsi.
    • Kata sandi enkripsi memiliki panjang maksimal 256 karakter.
    Sekarang, untuk mengenkripsi file kunci menggunakan perintah openssl enc, jalankan perintah berikut di bawah ini:
    $ openssl enc -aes-256-cbc -md sha1 -pass file:/etc/mysql/encryption/keyfile.key -in /etc/mysql/encryption/keyfile    -out /etc/mysql/encryption/keyfile.enc
  4. Tambahkan variabel berikut dalam file konfigurasi MySQL Anda (mis. /etc/my.cnf pada OS Linux berbasis RHEL atau /etc/mysql/my.cnf pada OS berbasis Debian/Ubuntu Linux)
    [mysqld]
    …
    #################### DATABASE ENCRYPTION ##############################
    plugin_load_add = file_key_management
    file_key_management_filename = /etc/mysql/encryption/keyfile.enc
    file_key_management_filekey = FILE:/etc/mysql/encryption/keyfile.key
    file_key_management_encryption_algorithm = aes_cbc 
    encrypt_binlog = 1
    
    innodb_encrypt_tables = ON
    innodb_encrypt_log = ON
    innodb_encryption_threads = 4
    innodb_encryption_rotate_key_age = 0 # Do not rotate key
  5. Mulai ulang Server MariaDB sekarang
    $ systemctl start mariadb

Verifikasi dan Uji Enkripsi

Untuk memverifikasi dan menguji enkripsi, cukup buat tabel sampel. Misalnya, buat tabel dengan melakukan pernyataan SQL berikut di bawah ini:

MariaDB [test]> CREATE TABLE a (i int) ENGINE=InnoDB ENCRYPTED=YES;
Query OK, 0 rows affected (0.018 sec)
MariaDB [test]> CREATE TABLE b (i int) ENGINE=InnoDB;
Query OK, 0 rows affected (0.003 sec)

Kemudian, mari tambahkan beberapa data ke tabel:

MariaDB [test]> insert into a values(1),(2);
Query OK, 2 rows affected (0.001 sec)
Records: 2  Duplicates: 0  Warnings: 0
MariaDB [test]> insert into b values(1),(2);
Query OK, 2 rows affected (0.001 sec)
Records: 2  Duplicates: 0  Warnings: 0

Untuk memeriksa dan melihat tabel apa saja yang dienkripsi, jalankan saja PILIH pertanyaan di bawah ini:

MariaDB [test]> SELECT * FROM information_schema.innodb_tablespaces_encryption\G
*************************** 1. row ***************************
                       SPACE: 4
                        NAME: mysql/gtid_slave_pos
           ENCRYPTION_SCHEME: 1
          KEYSERVER_REQUESTS: 1
             MIN_KEY_VERSION: 1
         CURRENT_KEY_VERSION: 1
    KEY_ROTATION_PAGE_NUMBER: NULL
KEY_ROTATION_MAX_PAGE_NUMBER: NULL
              CURRENT_KEY_ID: 1
        ROTATING_OR_FLUSHING: 0
*************************** 2. row ***************************
                       SPACE: 2
                        NAME: mysql/innodb_index_stats
           ENCRYPTION_SCHEME: 1
          KEYSERVER_REQUESTS: 1
             MIN_KEY_VERSION: 1
         CURRENT_KEY_VERSION: 1
    KEY_ROTATION_PAGE_NUMBER: NULL
KEY_ROTATION_MAX_PAGE_NUMBER: NULL
              CURRENT_KEY_ID: 1
        ROTATING_OR_FLUSHING: 0
*************************** 3. row ***************************
                       SPACE: 1
                        NAME: mysql/innodb_table_stats
           ENCRYPTION_SCHEME: 1
          KEYSERVER_REQUESTS: 1
             MIN_KEY_VERSION: 1
         CURRENT_KEY_VERSION: 1
    KEY_ROTATION_PAGE_NUMBER: NULL
KEY_ROTATION_MAX_PAGE_NUMBER: NULL
              CURRENT_KEY_ID: 1
        ROTATING_OR_FLUSHING: 0
*************************** 4. row ***************************
                       SPACE: 3
                        NAME: mysql/transaction_registry
           ENCRYPTION_SCHEME: 1
          KEYSERVER_REQUESTS: 0
             MIN_KEY_VERSION: 1
         CURRENT_KEY_VERSION: 1
    KEY_ROTATION_PAGE_NUMBER: NULL
KEY_ROTATION_MAX_PAGE_NUMBER: NULL
              CURRENT_KEY_ID: 1
        ROTATING_OR_FLUSHING: 0
*************************** 5. row ***************************
                       SPACE: 5
                        NAME: test/a
           ENCRYPTION_SCHEME: 1
          KEYSERVER_REQUESTS: 1
             MIN_KEY_VERSION: 1
         CURRENT_KEY_VERSION: 1
    KEY_ROTATION_PAGE_NUMBER: NULL
KEY_ROTATION_MAX_PAGE_NUMBER: NULL
              CURRENT_KEY_ID: 1
        ROTATING_OR_FLUSHING: 0
*************************** 6. row ***************************
                       SPACE: 6
                        NAME: test/b
           ENCRYPTION_SCHEME: 1
          KEYSERVER_REQUESTS: 1
             MIN_KEY_VERSION: 1
         CURRENT_KEY_VERSION: 1
    KEY_ROTATION_PAGE_NUMBER: NULL
KEY_ROTATION_MAX_PAGE_NUMBER: NULL
              CURRENT_KEY_ID: 1
        ROTATING_OR_FLUSHING: 0
6 rows in set (0.000 sec)

Membuat tabel InnoDB tidak perlu menentukan kata kunci ENCRYPTED=YES. Itu dibuat secara otomatis seperti yang kami tentukan dalam file konfigurasi untuk memiliki innodb_encrypt_tables =ON.

Jika Anda ingin menentukan id enkripsi tabel yang akan digunakan, Anda juga dapat melakukan hal berikut:

MariaDB [test]> CREATE TABLE c (i int) ENGINE=InnoDB ENCRYPTION_KEY_ID = 4;
Query OK, 0 rows affected (0.003 sec)

ENCRYPTION_KEY_ID diambil dari file kunci enkripsi yang kami buat sebelumnya.

Selain itu, jika Anda ingin lebih banyak pengujian melalui shell, Anda dapat menggunakan string perintah yang saya tunjukkan sebelumnya.

Informasi Tambahan tentang Enkripsi MariaDB

Jika instans MariaDB Anda tidak boleh berisi tabel yang tidak terenkripsi, cukup siapkan variabel di file konfigurasi my.cnf Anda di dalam [mysqld] bagian sebagai berikut:

innodb_encrypt_tables = FORCE.

Untuk enkripsi binlog, cukup tambahkan yang berikut

encrypt_binlog = 1

Redo-log InnoDB tidak dienkripsi secara default. Untuk mengenkripsinya cukup tambahkan variabel di bawah ini setelah bagian [mysqld],

innodb-encrypt-log

Jika Anda memerlukan enkripsi untuk tabel sementara dan file sementara di disk, Anda dapat menambahkan yang berikut ini:

encrypt-tmp-disk-tables=1
encrypt-tmp-files=1

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Mencadangkan Basis Data MariaDB Moodle Anda

  2. Menjalankan MariaDB di Hybrid Cloud Setup

  3. Menjalankan ProxySQL sebagai Layanan Kubernetes

  4. Bagaimana RIGHT() Bekerja di MariaDB

  5. Bagaimana ASCII() Bekerja di MariaDB