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

Di chuyển cơ sở dữ liệu MariaDB sang trạng thái được mã hóa và không được mã hóa

Trong blog này, chúng tôi trình bày một cách để chuyển cơ sở dữ liệu hiện có trước tiên sang trạng thái được mã hóa, sau đó là cách chuyển cơ sở dữ liệu của bạn sang trạng thái không được mã hóa.

Để sử dụng mã hóa, bạn cần tải một plugin để quản lý các khóa mã hóa. Xem các plugin mã hóa hiện được hỗ trợ. Mỗi khóa sử dụng một số nguyên 32 bit làm mã định danh khóa (key_id) và khóa thực. Khóa có thể được tạo phiên bản để dữ liệu được mã hóa lại từ khóa cũ hơn sang phiên bản mới hơn của khóa. Trong blog này, chúng tôi sẽ sử dụng plugin quản lý khóa tệp làm ví dụ (xem phần quản lý khóa mã hóa). Chúng tôi cũng giả định rằng bạn đang sử dụng phiên bản mới nhất của Máy chủ MariaDB (blog này giả định rằng MDEV-15566 đã được sửa, tức là phiên bản MariaDB phải là 10.1.33, 10.2.15 hoặc 10.3.6).

Di chuyển cơ sở dữ liệu sang trạng thái được mã hóa hoặc sang trạng thái không được mã hóa được thực hiện bằng cách sử dụng key_rotation. Xoay khóa di chuyển cơ sở dữ liệu từ trạng thái được mã hóa hiện có sang trạng thái khác. Lưu ý rằng ở đây không gian bảng có thể không có trạng thái được mã hóa (tức là không gian bảng không được mã hóa) hoặc không gian bảng có thể có trạng thái mã hóa được chuyển sang trạng thái không được mã hóa. Việc xoay khóa có thể diễn ra theo định kỳ (dựa trên biến cấu hình innodb-crypt-rot-key-age tức là khóa cũ có thể có trước khi được xoay), do quản trị viên cơ sở dữ liệu yêu cầu (ví dụ:bằng cách phát hành set global innodb_encrypt_tables =ON ; ) hoặc bằng hệ thống quản lý khóa mã hóa (xem ví dụ:xoay khóa).

Người quản trị cơ sở dữ liệu cần phải đưa ra quyết định nếu chỉ mã hóa từng bảng riêng lẻ (xem mã hóa dữ liệu cho InnoDB) hoặc toàn bộ cơ sở dữ liệu bao gồm cả vùng bảng hệ thống là đủ. Lưu ý rằng dữ liệu bảng cũng được ghi để làm lại nhật ký và hoàn tác nhật ký. Do đó, nếu cơ sở dữ liệu chứa các bảng có chứa dữ liệu rất nhạy cảm thì innodb-encode-log cũng nên được kích hoạt. Trong blog này, chúng tôi hướng dẫn cách mã hóa toàn bộ cơ sở dữ liệu.

Di chuyển cơ sở dữ liệu sang trạng thái được mã hóa

Trước khi cơ sở dữ liệu có thể được chuyển sang trạng thái mã hóa, chúng ta cần thêm cấu hình plugin mã hóa vào tệp cấu hình (xem mô tả chi tiết về các thông số):

# File Key Management
plugin-load-add = file_key_management
file-key-management-filename = /mnt/flash/keys.txt
file-key-management-encryption-algorithm = aes_ctr

# InnoDB encryption setup
innodb-encrypt-tables=ON
innodb-encrypt-log=ON
innodb-encryption-rotate-key-age=1024
innodb-encryption-threads=4
innodb-tablespaces-encryption

Sau khi khởi động lại, tiến trình của hoạt động mã hóa có thể được theo dõi từ bảng INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION. Trong ví dụ sau, chúng tôi truy vấn tên của vùng bảng, trang hiện tại trong vòng xoay khóa và trang tối đa trong vùng bảng cho những bảng chưa được mã hóa:

MariaDB [(none)]> select name, KEY_ROTATION_PAGE_NUMBER, KEY_ROTATION_MAX_PAGE_NUMBER from information_schema.innodb_tablespaces_encryption where min_key_version = 0 or ROTATING_OR_FLUSHING = 1;
+---------------+--------------------------+------------------------------+
| name          | KEY_ROTATION_PAGE_NUMBER | KEY_ROTATION_MAX_PAGE_NUMBER |
+---------------+--------------------------+------------------------------+
| innodb_system |                    17641 |                      1397504 |
+---------------+--------------------------+------------------------------+
1 row in set (0.000 sec)

Đương nhiên, bạn cũng có thể truy vấn trạng thái của tất cả các bảng:

MariaDB [tpcc1000]> select * from information_schema.innodb_tablespaces_encryption;
+-------+-------------------+-------------------+--------------------+-----------------+---------------------+--------------------------+------------------------------+----------------+----------------------+
| SPACE | NAME              | ENCRYPTION_SCHEME | KEYSERVER_REQUESTS | MIN_KEY_VERSION | CURRENT_KEY_VERSION | KEY_ROTATION_PAGE_NUMBER | KEY_ROTATION_MAX_PAGE_NUMBER | CURRENT_KEY_ID | ROTATING_OR_FLUSHING |
+-------+-------------------+-------------------+--------------------+-----------------+---------------------+--------------------------+------------------------------+----------------+----------------------+
|     0 | innodb_system     |                 1 |                  1 |               1 |                   1 |                     NULL |                         NULL |              1 |                    0 |
|     3 | tpcc1000/customer |                 1 |                  1 |               0 |                   1 |                     2401 |                      1317888 |              1 |                    1 |
+-------+-------------------+-------------------+--------------------+-----------------+---------------------+--------------------------+------------------------------+----------------+----------------------+
2 rows in set (0.000 sec)

Từ đó, chúng ta có thể thấy rằng không gian bảng hệ thống đã được mã hóa nhưng khách hàng bảng từ cơ sở dữ liệu tpcc1000 hiện đang được mã hóa. Nếu hệ thống của bạn có tài nguyên phần cứng và quá trình mã hóa có vẻ chậm, bạn có thể thử các thông số sau:

# Set close to number of cores
set global innodb_encryption_threads=16;
# For SSD increase number of I/O operations used for encryption in second
set global innodb_encryption_rotation_iops=40000;

Mã hóa cơ sở dữ liệu hoàn tất khi không có bảng nào ở trạng thái chưa được mã hóa:

MariaDB [tpcc1000]> select name, KEY_ROTATION_PAGE_NUMBER, KEY_ROTATION_MAX_PAGE_NUMBER from information_schema.innodb_tablespaces_encryption where min_key_version = 0 or ROTATING_OR_FLUSHING = 1;
Empty set (0.001 sec)

Và để xác minh, hãy liệt kê tất cả các bảng đã được mã hóa:

MariaDB [tpcc1000]> select * from information_schema.innodb_tablespaces_encryption where min_key_version != 0;
+-------+---------------------+-------------------+--------------------+-----------------+---------------------+--------------------------+------------------------------+----------------+----------------------+
| SPACE | NAME                | ENCRYPTION_SCHEME | KEYSERVER_REQUESTS | MIN_KEY_VERSION | CURRENT_KEY_VERSION | KEY_ROTATION_PAGE_NUMBER | KEY_ROTATION_MAX_PAGE_NUMBER | CURRENT_KEY_ID | ROTATING_OR_FLUSHING |
+-------+---------------------+-------------------+--------------------+-----------------+---------------------+--------------------------+------------------------------+----------------+----------------------+
|     0 | innodb_system       |                 1 |                  1 |               1 |                   1 |                     NULL |                         NULL |              1 |                    0 |
|     3 | tpcc1000/customer   |                 1 |                  1 |               1 |                   1 |                     NULL |                         NULL |              1 |                    0 |
|     2 | tpcc1000/district   |                 1 |                  1 |               1 |                   1 |                     NULL |                         NULL |              1 |                    0 |
|     4 | tpcc1000/history    |                 1 |                  1 |               1 |                   1 |                     NULL |                         NULL |              1 |                    0 |
|     8 | tpcc1000/item       |                 1 |                  1 |               1 |                   1 |                     NULL |                         NULL |              1 |                    0 |
|     5 | tpcc1000/new_orders |                 1 |                  1 |               1 |                   1 |                     NULL |                         NULL |              1 |                    0 |
|     7 | tpcc1000/order_line |                 1 |                  1 |               1 |                   1 |                     NULL |                         NULL |              1 |                    0 |
|     6 | tpcc1000/orders     |                 1 |                  1 |               1 |                   1 |                     NULL |                         NULL |              1 |                    0 |
|     9 | tpcc1000/stock      |                 1 |                  1 |               1 |                   1 |                     NULL |                         NULL |              1 |                    0 |
|     1 | tpcc1000/warehouse  |                 1 |                  1 |               1 |                   1 |                     NULL |                         NULL |              1 |                    0 |
+-------+---------------------+-------------------+--------------------+-----------------+---------------------+--------------------------+------------------------------+----------------+----------------------+
10 rows in set (0.000 sec)

Có thể thấy, tất cả các không gian bảng đều sử dụng ENCRYPTION_SCHEME =1 (được mã hóa) và MIN_KEY_VERSION =1 . Sau giai đoạn này, người quản trị cơ sở dữ liệu nên xem xét giảm số lượng các luồng mã hóa được sử dụng và các vòng quay. Hơn nữa, nhu cầu xoay khóa thêm cũng nên được xem xét vì plugin quản lý khóa tệp không hỗ trợ xoay khóa thực. Xoay khóa có thể bị vô hiệu hóa bằng cách sử dụng innodb-encode-Rot-key-age =0 . Lưu ý rằng ngay cả với thiết lập đó, tất cả các bảng mới được tạo đều được coi là mã hóa.

Di chuyển cơ sở dữ liệu sang trạng thái không được mã hóa

Ở đây chúng tôi giả định rằng bạn có một cơ sở dữ liệu đã được mã hóa và không cần mã hóa dữ liệu nữa hoặc việc bảo vệ dữ liệu được thực hiện theo cách khác. Chúng tôi sẽ sử dụng cơ sở dữ liệu tương tự như một ví dụ như trong chuyển cơ sở dữ liệu sang trạng thái được mã hóa. Tại thời điểm này, không cần phải khởi động lại máy chủ. Thay vào đó, việc chuyển cơ sở dữ liệu sang trạng thái không được mã hóa có thể được thực hiện như một hoạt động trực tuyến. Trước tiên, người quản trị cơ sở dữ liệu nên kiểm tra xem không có bảng nào sử dụng mã hóa rõ ràng, tức là có một bảng mà ở đó tùy chọn tạo bảng được sử dụng ENCRYPTED =YES. Giờ đây, việc di chuyển cơ sở dữ liệu sang trạng thái không được mã hóa có thể được thực hiện đơn giản bằng cách phát hành:

SET GLOBAL innodb_encrypt_tables=OFF;

Thao tác này sẽ bắt đầu giải mã tất cả các không gian bảng bao gồm cả không gian bảng hệ thống và tiến trình của hoạt động này có thể được theo dõi bởi:

MariaDB [tpcc1000]> select * from information_schema.innodb_tablespaces_encryption where min_key_version != 0;
+-------+---------------------+-------------------+--------------------+-----------------+---------------------+--------------------------+------------------------------+----------------+----------------------+
| SPACE | NAME                | ENCRYPTION_SCHEME | KEYSERVER_REQUESTS | MIN_KEY_VERSION | CURRENT_KEY_VERSION | KEY_ROTATION_PAGE_NUMBER | KEY_ROTATION_MAX_PAGE_NUMBER | CURRENT_KEY_ID | ROTATING_OR_FLUSHING |
+-------+---------------------+-------------------+--------------------+-----------------+---------------------+--------------------------+------------------------------+----------------+----------------------+
|     7 | tpcc1000/order_line |                 1 |                  1 |               1 |                   1 |                    76564 |                      1947904 |              1 |                    1 |
|     6 | tpcc1000/orders     |                 1 |                  1 |               1 |                   1 |                     NULL |                         NULL |              1 |                    0 |
|     9 | tpcc1000/stock      |                 1 |                  1 |               1 |                   1 |                     NULL |                         NULL |              1 |                    0 |
|     1 | tpcc1000/warehouse  |                 1 |                  1 |               1 |                   1 |                     NULL |                         NULL |              1 |                    0 |
|    10 | tpcc1000/t1         |                 1 |                  1 |               1 |                   1 |                     NULL |                         NULL |              1 |                    0 |
+-------+---------------------+-------------------+--------------------+-----------------+---------------------+--------------------------+------------------------------+----------------+----------------------+
5 rows in set (0.001 sec)

Từ đó, chúng ta có thể thấy rằng bảng order_line từ cơ sở dữ liệu tpcc1000 đang được xoay. Hoạt động kết thúc khi không có bảng nào sử dụng mã hóa, tức là có min_key_version! =0.

MariaDB [tpcc1000]> select * from information_schema.innodb_tablespaces_encryption where min_key_version != 0 or rotating_or_flushing = 1;
Empty set (0.000 sec)

Nếu thiết lập mã hóa cần được xóa khỏi cấu hình, bây giờ là lúc để tắt máy chủ. Nếu cấu hình sử dụng mã hóa nhật ký làm lại, tức là innodb-encode-log =ON sao lưu từ cơ sở dữ liệu của bạn bao gồm các tệp nhật ký InnoDB và sau đó xóa các tệp nhật ký InnoDB vì chúng không thể sử dụng được nếu chúng chứa dữ liệu được mã hóa.

rm -rf ib_logfile*

Xóa thiết lập mã hóa khỏi cấu hình và khởi động lại máy chủ. Bây giờ bạn có một phiên bản cơ sở dữ liệu mà không có mã hóa nào được sử dụng.

Kết luận

Di chuyển cơ sở dữ liệu sang trạng thái được mã hóa như đã thấy ở trên yêu cầu khởi động lại máy chủ và yêu cầu cấu hình plugin mã hóa cẩn thận. Thao tác này mất bao lâu tùy thuộc vào số lượng bàn và độ lớn của các bảng này. Chúng tôi đã trình bày một cách để theo dõi tiến trình này và cách tăng tốc nó nếu phần cứng được sử dụng có đủ tài nguyên. Di chuyển cơ sở dữ liệu sang trạng thái không được mã hóa chỉ yêu cầu thiết lập một biến toàn cục. Tuy nhiên, nếu cần mã hóa lâu hơn và cần xóa tất cả các tham chiếu đến nó, thì cần phải khởi động lại một lần. Chúng tôi đã chỉ ra cách theo dõi quá trình chuyển đổi này và cách xóa hoàn toàn thiết lập mã hóa khỏi cơ sở dữ liệu và cấu hình.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách hiển thị tất cả các ngôn ngữ trong MariaDB

  2. MariaDB LENGTH () vs LENGTHB ():Sự khác biệt là gì?

  3. Query Outlier là gì và Cách khắc phục

  4. Cách thiết lập múi giờ được đặt tên trong MariaDB

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