MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Khám phá các cách khác nhau để mã hóa dữ liệu MariaDB của bạn

Mã hóa cơ sở dữ liệu MariaDB của bạn, cho dù nó đang vận chuyển và đang dừng, là một trong những điều quan trọng nhất mà một tổ chức nên xem xét nếu bạn coi trọng dữ liệu của mình.

Các tổ chức giải quyết các giao dịch tài chính, hồ sơ y tế, thông tin bí mật hoặc thậm chí dữ liệu cá nhân phải yêu cầu loại bảo vệ dữ liệu này. Về cơ bản, mã hóa cơ sở dữ liệu sẽ chuyển đổi dữ liệu có thể đọc của bạn thành một định dạng không thể đọc được (hoặc ít nhất là khó giải mã) bởi bất kỳ người dùng trái phép nào.

Mã hóa dữ liệu của bạn ngăn chặn việc tin tặc hoặc nhân viên không được phép sử dụng sai mục đích hoặc có ý đồ xấu có thể gây thiệt hại cho doanh nghiệp của bạn. Dữ liệu không được mã hóa dễ bị tấn công bởi tin tặc đưa dữ liệu độc hại có thể làm hỏng cơ sở hạ tầng của bạn hoặc đánh cắp thông tin. Gần đây, Quartz đã phát hành một bài báo về vụ vi phạm lớn nhất xảy ra dọc theo những dòng này và điều đáng báo động là dữ liệu đã bị đánh cắp từ hàng tỷ tài khoản trong hai thập kỷ qua.

Các tài nguyên liên quan Cách mã hóa Bảo mật cơ sở dữ liệu sao lưu MySQL &MariaDB của bạn - Mã hóa sao lưu trong quá trình chuyển tiếp &cập nhật lúc nghỉ:Trở thành một DBA ClusterControl - Quản lý khóa SSL và mã hóa dữ liệu MySQL khi chuyển tuyến

Trong blog này, chúng tôi sẽ thảo luận về các cách khác nhau để mã hóa dữ liệu MariaDB của bạn cho dù dữ liệu đó đang ở trạng thái nghỉ hay đang chuyển. Chúng tôi sẽ cung cấp cho bạn hiểu biết cơ bản về mã hóa và cách sử dụng mã hóa để bạn có thể sử dụng các phương pháp này để giữ an toàn cho dữ liệu của mình.

Mã hóa dữ liệu MariaDB:Đang chuyển tuyến

MariaDB, theo mặc định, không sử dụng mã hóa trong quá trình truyền dữ liệu qua mạng từ máy chủ đến máy khách. Tuy nhiên, việc sử dụng thiết lập mặc định có thể kích động một tin tặc tiềm năng nghe trộm một kênh không an toàn / không được mã hóa. Nếu bạn đang hoạt động trên một môi trường bị cô lập hoặc bảo mật cao, trạng thái mặc định này có thể được chấp nhận. Tuy nhiên, điều này không lý tưởng khi máy khách và mạng của bạn ở trên mạng khác nhau vì nó thiết lập cơ sở dữ liệu của bạn cho một cuộc tấn công “man-in-the-middle” tiềm ẩn.

Để tránh các cuộc tấn công này, MariaDB cho phép bạn mã hóa dữ liệu đang chuyển tiếp giữa máy chủ và máy khách bằng giao thức Bảo mật lớp truyền tải (TLS) (trước đây gọi là Lớp cổng bảo mật hoặc SSL). Để bắt đầu, bạn cần đảm bảo rằng máy chủ MariaDB của bạn đã được biên dịch với hỗ trợ TLS. Bạn có thể xác minh điều này bằng cách chạy câu lệnh SHOW GLOBAL VARIABLES như được hiển thị bên dưới:

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)

Bạn có thể nhầm lẫn giữa SSL và TSL khác nhau như thế nào. Tài liệu có thể sử dụng thuật ngữ SSL và các biến cho cấu hình cũng sử dụng tiền tố ssl_ *, tuy nhiên, MariaDB chỉ hỗ trợ các phiên bản kế thừa bảo mật và không còn là các phiên bản SSL cũ hơn. Bạn có thể phải xác định và sử dụng đúng phiên bản MariaDB yêu cầu sự hỗ trợ phù hợp của các phiên bản TLS mà bạn yêu cầu để sử dụng. Ví dụ:PCI DSS v3.2 khuyến nghị sử dụng phiên bản giao thức tối thiểu của TLSv1.2 mà các phiên bản cũ của MariaDB hỗ trợ. Tuy nhiên, với TLS 1.3, yêu cầu OpenSSL 1.1.1, nhanh hơn do bắt tay hiệu quả hơn giữa hai hệ thống đang giao tiếp và điều này được hỗ trợ kể từ MariaDB 10.2.16 và MariaDB 10.3.8.

Để sử dụng các mật mã có sẵn cho một phiên bản TLS cụ thể, bạn có thể xác định nó bằng cách sử dụng --ssl-cipher trong mysqld lệnh hoặc ssl-cipher biến trong tệp cấu hình. Lưu ý rằng không thể loại trừ mật mã TLSv1.3 khi sử dụng OpenSSL, ngay cả khi sử dụng biến hệ thống ssl_cipher.

Tham số cấu hình để mã hóa dữ liệu trong quá trình truyền

Để mã hóa dữ liệu khi chuyển tiếp, bạn có thể thực hiện theo chuỗi lệnh được liệt kê bên dưới:

Tạo chứng chỉ 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

Tạo chứng chỉ máy chủ

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

Tạo chứng chỉ ứng dụng khách

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

Hãy lưu ý rằng Tên thường gọi (CN) của bạn trong -subj đối số phải là duy nhất so với chứng chỉ CA, máy chủ và ứng dụng khách mà bạn đang tạo. Về mặt kỹ thuật, CA và Máy chủ có thể có cùng CN nhưng tốt nhất nên đặt nó là định danh duy nhất cho ba CN này. Nếu không, bạn sẽ gặp lỗi như sau:

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

Được rồi, chứng chỉ và khóa đã sẵn sàng. Bạn cần chỉ định đường dẫn bằng cách sử dụng các biến ssl_ * trong tệp cấu hình MySQL của mình (ví dụ:/etc/my.cnf cho Hệ điều hành dựa trên RHEL hoặc /etc/mysql/my.cnf cho Hệ điều hành Debian / Ubuntu). Xem cấu hình ví dụ bên dưới:

[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

Tất nhiên, bạn phải chỉ định đường dẫn chính xác nơi bạn đã đặt chứng chỉ và khóa của mình.

Sau đó, đặt các thông số này trong [client-mariadb] của tệp cấu hình của bạn như bên dưới:

[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

Như đã đề cập trước đó, bạn có thể chỉ định loại mật mã mà cấu hình SSL / TLS của bạn có thể sử dụng. Điều này có thể được thực hiện bằng cách chỉ định thiết lập cấu hình bên dưới:

[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

Hoặc bạn có thể sử dụng cấu hình sau như sau:

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.

Dòng cuối cùng biểu thị lệnh tương đương với lệnh này:

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

Điều này sẽ loại trừ các mật mã yếu và những mật mã ở dạng tiền tố như DHE-DSS-AES256-GCM-SHA384 mật mã chẳng hạn.

Tạo chứng chỉ của bạn bằng ClusterControl

Ngoài ra, bạn có thể sử dụng ClusterControl để tạo các chứng chỉ và khóa cho bạn. Để làm điều này, bạn có thể làm như sau:

  1. Chọn Cụm MariaDB của bạn, sau đó đi tới Bảo mật và chọn Mã hóa SSL. Trong ví dụ của tôi bên dưới, đây là Cụm MariaDB Galera:
  2. Chọn Mã hóa SSL và kích hoạt nó. Bạn sẽ có thể tạo chứng chỉ mới hoặc chọn chứng chỉ hiện có. Đối với mẫu này, tôi sẽ chọn tùy chọn "Tạo chứng chỉ":
  3. Bước cuối cùng là định cấu hình các ngày hết hạn cho chứng chỉ của bạn. Xem bên dưới: Nếu bạn nhấp vào "Khởi động lại nút", ClusterControl sẽ thực hiện khởi động lại theo chu kỳ. Hãy lưu ý, nếu bạn đang sử dụng MariaDB 10.4 (hiện đang có phiên bản RC), bạn có thể sử dụng SSL mà không cần khởi động lại máy chủ MariaDB của mình. Chỉ cần sử dụng lệnh FLUSH SSL, một tính năng mới được thêm vào phiên bản MariaDB 10.4.

Một cách khác để xử lý chứng chỉ / khóa TLS / SSL của bạn, bạn cũng có thể sử dụng Quản lý khóa trong ClusterControl. Hãy xem blog này để tìm hiểu thêm về cách thực hiện việc này.

Tạo người dùng MariaDB TLS / SSL của bạn

Trong trường hợp bạn nghĩ rằng bạn đã hoàn thành, bạn không phải vậy. Bạn cần đảm bảo rằng người dùng của bạn được yêu cầu sử dụng SSL khi họ kết nối với máy chủ. Người dùng này sẽ được yêu cầu luôn tương tác với máy chủ thông qua một kênh riêng tư. Điều này rất quan trọng vì bạn cần đảm bảo rằng tất cả khách hàng của bạn sẽ tương tác với máy chủ của bạn một cách rất an toàn và riêng tư.

Để làm điều này, chỉ cần thực hiện ví dụ sau:

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)

Đảm bảo rằng khi kết nối với máy khách / máy chủ ứng dụng của bạn, hãy sao chép chứng chỉ mà bạn đã tạo dựa trên các bước trước đó.

Xác minh kết nối của bạn

Kiểm tra kết nối của bạn xem nó có được mã hóa hay không là rất quan trọng để xác định trạng thái. Để làm điều đó, bạn có thể thực hiện lệnh sau:

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

Ngoài ra, OpenSSL phiên bản 1.1.1 đã thêm hỗ trợ cho -starttls mysql . Có một tệp nhị phân openssl được biên dịch tĩnh có sẵn mà bạn có thể lấy tại đây https://testssl.sh/openssl-1.0.2k-dev-chacha.pm.ipv6.Linux+FreeBSD.tar.gz (hoặc xem bản trình bày này ở định dạng PDF) . Sau đó, bạn có thể thực hiện lệnh sau:

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

Kết quả ví dụ sẽ như sau:

$ 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 cho Toàn bộ Cơ sở dữ liệu Cơ sở hạ tầng của bạnTìm hiểu những tính năng mới khác trong ClusterControlInstall ClusterControl MIỄN PHÍ

Mã hóa dữ liệu MariaDB:At-Rest

Dữ liệu được mã hóa được lưu trữ vật lý bên trong bộ lưu trữ phần cứng của bạn (tức là ở chế độ nghỉ) mang lại sự ổn định hơn và bảo vệ chống lại vi phạm dữ liệu. Nếu kẻ tấn công độc hại có thể đăng nhập vào cơ sở dữ liệu MariaDB của bạn, thì chúng có thể đọc dữ liệu ở dạng văn bản thuần túy. Tương tự như sử dụng lệnh chuỗi trong Linux, bạn có thể dễ dàng truy xuất dữ liệu từ cơ sở dữ liệu. Hơn nữa, nó sẽ gây thêm nguy hiểm nếu kẻ tấn công có hiểu biết nâng cao về định dạng tệp của vùng bảng.

Mã hóa không hoạt động là một biện pháp bảo vệ bổ sung, nhưng nó không thay thế cho tường lửa tốt, mật khẩu mạnh, quyền người dùng chính xác và mã hóa chuyển tiếp giữa máy khách và máy chủ.

Hỗ trợ của MariaDB cho mã hóa trên bảng và không gian bảng đã được thêm vào trong phiên bản 10.1.3. Với việc các bảng của bạn được mã hóa, dữ liệu của bạn hầu như không thể bị ai đó lấy cắp. Loại mã hóa này cũng cho phép tổ chức của bạn tuân thủ các quy định của chính phủ như GPDR.,

Khi bạn đã bật mã hóa dữ liệu ở trạng thái nghỉ trong MariaDB, các bảng được xác định với ENCRYPTED =YES hoặc với innodb_encrypt_tables =ON, sẽ được mã hóa dữ liệu được lưu trữ của bạn. Nó chỉ được giải mã khi được truy cập qua cơ sở dữ liệu của MariaDB, nếu không, dữ liệu không thể đọc được.

Ví dụ:đọc một dữ liệu không được mã hóa, nó sẽ hiển thị cho bạn như vậy:

$ 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

nhưng với dữ liệu được mã hóa, vùng bảng của bạn sẽ không thể đọc được giống như ví dụ bên dưới:

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

Cũng cần lưu ý rằng mã hóa Data-At-Rest của MariaDB bổ sung chi phí kích thước dữ liệu khoảng 3-5%. Mã hóa MariaDB cũng được hỗ trợ đầy đủ khi sử dụng công cụ lưu trữ XtraDB và InnoDB. Mã hóa cũng được hỗ trợ cho công cụ lưu trữ Aria, nhưng chỉ cho các bảng được tạo bằng ROW_FORMAT =PAGE (mặc định) và cho nhật ký nhị phân (nhật ký sao chép). MariaDB thậm chí còn cho phép người dùng linh hoạt mã hóa những gì. Trong XtraDB hoặc InnoDB, người ta có thể chọn mã hóa:

  • mọi thứ - tất cả không gian bảng (với tất cả các bảng)
  • các bảng riêng lẻ
  • mọi thứ, ngoại trừ các bảng riêng lẻ

Ngoài ra, người ta có thể chọn mã hóa tệp nhật ký XtraDB / InnoDB (được khuyến nghị).

MariaDB có những hạn chế của nó. Ví dụ:Galera Cluster gcache không được mã hóa nhưng nó được lên kế hoạch như một phần của phiên bản MariaDB 10.4. Bạn có thể tìm thấy danh sách đầy đủ các giới hạn tại đây.

Cách thiết lập và định cấu hình MariaDB để mã hóa dữ liệu lúc khôi phục

  1. Tạo khóa mã hóa ngẫu nhiên bằng lệnh openssl rand.
    $ mkdir -p /etc/mysql/encryption
    $ for i in {1..5}; do openssl rand -hex 32 >> /etc/mysql/encryption/keyfile;  done;
    Bây giờ, hãy mở và chỉnh sửa tệp / etc / mysql / crypt / keyfile và thêm ID khóa mà đây sẽ là tham chiếu khi tạo các bảng được mã hóa vì đó là id khóa mã hóa. Xem ENCRYPTION_KEY_ID để biết thêm chi tiết. Do đó, định dạng sau phải như sau:
    <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. Hãy tạo hoặc tạo mật khẩu ngẫu nhiên bằng lệnh tương tự từ bước 1:
    $ openssl rand -hex 128 > /etc/mysql/encryption/keyfile.key
  3. Trước khi tiếp tục bước tiếp theo, điều quan trọng là phải lưu ý các chi tiết sau về mã hóa tệp khóa:
    • Thuật toán duy nhất mà MariaDB hiện hỗ trợ để mã hóa tệp khóa là chế độ Chuỗi khối mật mã (CBC) của Tiêu chuẩn mã hóa nâng cao (AES).
    • Kích thước khóa mã hóa có thể là 128 bit, 192 bit hoặc 256 bit.
    • Khóa mã hóa được tạo từ hàm băm SHA-1 của mật khẩu mã hóa.
    • Mật khẩu mã hóa có độ dài tối đa là 256 ký tự.
    Bây giờ, để mã hóa tệp khóa bằng lệnh mã openssl, hãy chạy lệnh sau:
    $ 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. Thêm các biến sau vào tệp cấu hình MySQL của bạn (tức là /etc/my.cnf trên Hệ điều hành Linux dựa trên RHEL hoặc /etc/mysql/my.cnf trong Hệ điều hành dựa trên 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. Khởi động lại Máy chủ MariaDB ngay bây giờ
    $ systemctl start mariadb

Xác minh và Kiểm tra Mã hóa

Để xác minh và kiểm tra mã hóa, chỉ cần tạo một bảng mẫu. Ví dụ:tạo bảng bằng cách thực hiện các câu lệnh SQL sau:

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)

Sau đó, hãy thêm một số dữ liệu vào các bảng:

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

Để kiểm tra và xem bảng được mã hóa là gì, chỉ cần chạy CHỌN sau truy vấn bên dưới:

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)

Tạo bảng InnoDB không cần chỉ định từ khóa ENCRYPTED =YES. Nó được tạo tự động như chúng tôi đã chỉ định trong tệp cấu hình để có innodb_encrypt_tables =ON.

Nếu bạn muốn chỉ định id mã hóa của bảng được sử dụng, bạn cũng có thể thực hiện như sau:

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

ENCRYPTION_KEY_ID được lấy từ tệp khóa mã hóa mà chúng tôi đã tạo trước đó.

Ngoài ra, nếu bạn muốn thử nghiệm nhiều hơn thông qua shell, bạn có thể sử dụng chuỗi lệnh mà tôi đã chỉ cho bạn trước đó.

Thông tin bổ sung về mã hóa MariaDB

Nếu phiên bản MariaDB của bạn không được chứa bất kỳ bảng nào chưa được mã hóa, chỉ cần thiết lập biến trong tệp cấu hình my.cnf của bạn trong [mysqld] phần như sau:

innodb_encrypt_tables = FORCE.

Để mã hóa binlog, chỉ cần thêm phần sau

encrypt_binlog = 1

Nhật ký làm lại của InnoDB không được mã hóa theo mặc định. Để mã hóa nó, chỉ cần thêm biến bên dưới sau phần [mysqld],

innodb-encrypt-log

Nếu bạn cần mã hóa cho các bảng tạm thời trên đĩa và các tệp tạm thời của mình, bạn có thể thêm những thứ sau:

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. Mẹo và Thủ thuật sử dụng Ghi nhật ký kiểm tra cho MariaDB

  2. Khôi phục sau thảm họa cho cụm Galera được triển khai cho một đám mây lai

  3. Cách hoạt động của toán tử LIKE trong MariaDB

  4. 4 cách để tìm hàng có chứa chữ hoa trong MariaDB

  5. Galera Cluster Recovery 101 - Đi sâu vào phân vùng mạng