Hướng dẫn mã hóa MySQL

GHI CHÚ. Chúng tôi đang trong quá trình sửa đổi cấu trúc và cấu hình tệp cho nhiều ngăn xếp Bitnami. Do những thay đổi này, đường dẫn tệp được nêu trong hướng dẫn này có thể thay đổi tùy thuộc vào việc ngăn xếp Bitnami của bạn sử dụng các gói hệ thống Linux gốc [Phương pháp A] hay nếu đó là bản cài đặt độc lập [Phương pháp B]. Để xác định loại cài đặt Bitnami của bạn và cách tiếp cận cần tuân theo, hãy chạy lệnh bên dưới

 $ test ! -f "/opt/bitnami/common/bin/openssl" && echo "Approach A: Using system packages." || echo "Approach B: Self-contained installation."

Đầu ra của lệnh cho biết phương pháp cài đặt nào [A hoặc B] được sử dụng và sẽ cho phép bạn xác định các đường dẫn, cấu hình và lệnh sẽ sử dụng trong hướng dẫn này. Tham khảo Câu hỏi thường gặp để biết thêm thông tin về những thay đổi này

GHI CHÚ. Hỗ trợ mã hóa bảng chỉ khả dụng cho các bảng InnoDB được lưu trữ dưới dạng các tệp riêng lẻ [tùy chọn innodb_file_per_table, được bật theo mặc định]

Thực hiện theo các bước bên dưới để định cấu hình hỗ trợ mã hóa bảng

  • Chỉnh sửa tệp cấu hình, tùy thuộc vào loại cài đặt của bạn sẽ ở một trong các vị trí sau

    • Đối với cài đặt Bitnami theo Phương pháp A [sử dụng gói hệ thống Linux]. /opt/bitnami/mysql/conf/my. cnf
    • Đối với cài đặt Bitnami theo Phương pháp B [cài đặt khép kín]. /opt/bitnami/mysql/my. cnf
  • Thêm các dòng sau vào tệp cấu hình, trong phần [mysqld], để kích hoạt plugin keyring_file

      early-plugin-load=keyring_file.so
      keyring_file_data=/opt/bitnami/mysql/data/keyring
    

    GHI CHÚ. Tệp khóa sẽ được tạo tự động ở vị trí trên khi bảng đầu tiên được mã hóa. Giữ một bản sao lưu của tệp này vì dữ liệu được lưu trữ trong các bảng được mã hóa không thể phục hồi nếu không có nó

  • Khởi động lại máy chủ MySQL

      $ sudo /opt/bitnami/ctlscript.sh restart mysql
    
  • Xác nhận rằng plugin keyring_file đang hoạt động bằng cách chạy truy vấn bên dưới trong máy khách MySQL

      SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'keyring%';
    

Bây giờ bạn có thể tạo một bảng được mã hóa bằng cách thêm mệnh đề ENCRYPTED=‘Y’ vào bất kỳ lệnh CREATE TABLE nào. Đây là một ví dụ

CREATE TABLE mytable [id INT, value VARCHAR[255]] ENCRYPTION='Y'

Các bảng chưa được mã hóa có thể được mã hóa bằng cách sử dụng lệnh ALTER TABLE, chẳng hạn như lệnh bên dưới

Từ “dữ liệu” rất quan trọng kể từ đầu năm 2000 và trong khoảng thời gian 2 thập kỷ này, nó ngày càng trở nên quan trọng hơn. Theo Forbes Google tin rằng trong tương lai mọi tổ chức sẽ dẫn đến việc trở thành một công ty dữ liệu. Chà, khi nói đến dữ liệu, bảo mật là một trong những mối quan tâm chính mà chúng ta phải đối mặt.  

Chúng tôi có một số kỹ thuật phổ biến để lưu trữ dữ liệu trong môi trường ngày nay như MySql, Oracle, MsSql, Cassandra, Mongo, v.v. và những công nghệ này sẽ tiếp tục thay đổi trong tương lai. Nhưng theo DataAnyz, MySql vẫn chiếm 33% thị phần. Vì vậy, ở đây chúng tôi có một kỹ thuật để bảo mật dữ liệu MySQL của chúng tôi

Trước khi tìm hiểu thêm về bài viết này, hãy cho chúng tôi biết những cách tiếp cận kết hợp có thể có để bảo mật dữ liệu MySQL

  1. Làm cứng máy chủ Mysql
  2. Làm cứng cấp ứng dụng Mysql
  3. Mã hóa dữ liệu Mysql khi chuyển tiếp
  4. Dữ liệu Mysql khi mã hóa phần còn lại
  5. Mã hóa đĩa Mysql

Bạn có thể khám phá tất cả các cách tiếp cận nhưng trong bài viết này, chúng ta sẽ hiểu khái niệm về dữ liệu Mysql khi mã hóa và thực hành nữa

Khái niệm  “Mã hóa dữ liệu ở trạng thái nghỉ”  trong MySQL đã được giới thiệu trong Mysql 5. 7 chỉ với sự hỗ trợ ban đầu của công cụ lưu trữ InnoDB và theo thời gian, nó đã phát triển đáng kể. Vì vậy, hãy hiểu về “Mã hóa dữ liệu khi nghỉ ngơi” trong MySQL

"Mã hóa dữ liệu ở trạng thái nghỉ" trong MySql là gì?

Khái niệm "mã hóa dữ liệu ở trạng thái lưu trữ" sử dụng cấu trúc khóa mã hóa hai tầng, được sử dụng bên dưới hai khóa

  1. Phím không gian bảng. Đây là khóa mã hóa được lưu trữ trong tiêu đề vùng bảng
  2. Khóa chính. Khóa chính được sử dụng để giải mã các khóa vùng bảng

Vì vậy, hãy hiểu hoạt động của nó

Giả sử chúng ta có một MySQL đang chạy với công cụ lưu trữ InnoDB và không gian bảng được mã hóa bằng một khóa, được gọi là khóa không gian bảng. Khóa này sau đó được mã hóa bằng khóa chính và được lưu trữ trong tiêu đề không gian bảng

Bây giờ, khi một yêu cầu được thực hiện để truy cập dữ liệu MySQL, InnoDB sử dụng khóa chính để giải mã tiêu đề không gian bảng hiện tại của khóa vùng bảng. Sau khi nhận được khóa vùng bảng được giải mã, vùng bảng được giải mã và sẵn sàng thực hiện các thao tác đọc/ghi

Ghi chú. Phiên bản được giải mã của khóa không gian bảng không bao giờ thay đổi, nhưng khóa chính có thể được xoay

Mã hóa dữ liệu ở trạng thái nghỉ được triển khai bằng cách sử dụng plugin tệp khóa để quản lý và mã hóa khóa chính

Sau khi hiểu khái niệm về mã hóa và giải mã, dưới đây là một số ưu và nhược điểm khi sử dụng  DRE

ưu

  • Mã hóa mạnh mẽ của AES 256 được sử dụng để mã hóa các bảng InnoDB
  • Nó trong suốt đối với tất cả các ứng dụng vì chúng tôi không cần bất kỳ thay đổi mã ứng dụng, lược đồ hoặc loại dữ liệu nào
  • Quản lý khóa không được thực hiện bởi DBA
  • Các phím có thể được lưu trữ an toàn khỏi dữ liệu và việc xoay phím rất đơn giản

Nhược điểm

  • Chỉ mã hóa  bảng InnoDB
  • Không thể mã hóa nhật ký nhị phân, nhật ký làm lại, chuyển tiếp nhật ký trên các phần phụ không được mã hóa, nhật ký chậm, nhật ký lỗi, nhật ký chung và nhật ký kiểm tra

Mặc dù chúng tôi không thể mã hóa nhật ký nhị phân, làm lại nhật ký, chuyển tiếp nhật ký trên Mysql 5. 7 nhưng MariaDB đã triển khai điều này với cơ chế mã hóa nhật ký hoàn tác/làm lại, nhật ký nhị phân/nhật ký chuyển tiếp, v.v. bằng cách bật một số cờ trong Tệp cấu hình MariaDB

innodb_sys_tablespace_encrypt=ON
innodb_temp_tablespace_encrypt=ON
innodb_parallel_dblwr_encrypt=ON
innodb_encrypt_online_alter_logs=ON
innodb_encrypt_tables=FORCE
encrypt_binlog=ON
encrypt_tmp_files=ON

Tuy nhiên, có một số hạn chế

Hãy thảo luận về vấn đề/giải pháp của nó và một vài giải pháp cho chúng
  1. Chạy MySQL trên máy chủ sẽ có quyền truy cập từ người dùng root và người dùng MySQL và cả hai đều có thể truy cập tệp khóa [tệp khóa] có trên cùng một hệ thống. Đối với sự cố này, chúng tôi có thể có các khóa trên ổ đĩa gắn kết/ngắt kết nối có thể được ngắt kết nối sau khi khởi động lại MySQL
  2. Dữ liệu sẽ không ở dạng mã hóa khi nó được tải vào RAM và có thể được kết xuất và đọc
  3. Nếu MySQL được khởi động lại với các bảng bỏ qua cấp thì một lần nữa nó lại bị tàn phá nhưng điều này có thể được loại bỏ bằng cách sử dụng một ổ đĩa không đếm được để tạo khóa
  4. Vì khóa không gian bảng vẫn giữ nguyên nên bảo mật của chúng tôi dựa vào xoay vòng Khóa chính. Bạn có thể sử dụng khóa này để lưu khóa chính của mình

GHI CHÚ. Đừng để mất file master key vì chúng ta không thể giải mã dữ liệu và sẽ bị mất dữ liệu

Làm là học, vì vậy hãy cố gắng

Là điều kiện tiên quyết, chúng tôi cần một máy có máy chủ MySQL đang hoạt động. Bây giờ để mã hóa dữ liệu ở trạng thái nghỉ hoạt động, chúng tôi cần kích hoạt

Bật tệp trên mỗi bảng với sự trợ giúp của tệp cấu hình.   

 

[root@mysql ~]#  vim /etc/my.cnf
[mysqld]

innodb_file_per_table=ON

Cùng với tham số trên, hãy bật plugin keyring và đường dẫn keyring. Tham số này phải luôn ở trên cùng trong cấu hình để nó sẽ được tải ban đầu khi MySQL khởi động. Keyring plugin đã được cài đặt trong máy chủ MySQL, chúng ta chỉ cần kích hoạt nó.  

[root@mysql ~]#  vim /etc/my.cnf
[mysqld]
early-plugin-load=keyring_file.so
keyring_file_data=/var/lib/mysql/keyring-data/keyring
innodb_file_per_table=ON

Và lưu tệp với khởi động lại vào MySQL

________số 8

Chúng tôi có thể kiểm tra plugin đã bật và xác minh cấu hình của mình

mysql> SELECT plugin_name, plugin_status FROM INFORMATION_SCHEMA.PLUGINS WHERE plugin_name LIKE 'keyring%';
+--------------+---------------+
| plugin_name  | plugin_status |
+--------------+---------------+
| keyring_file | ACTIVE        |
+--------------+---------------+
1 rows in set [0.00 sec]


xác minh rằng chúng tôi có một plugin keyring đang chạy và vị trí của nó

  early-plugin-load=keyring_file.so
  keyring_file_data=/opt/bitnami/mysql/data/keyring
0

Xác minh rằng chúng tôi đã bật tệp trên mỗi bảng

  early-plugin-load=keyring_file.so
  keyring_file_data=/opt/bitnami/mysql/data/keyring
1

Bây giờ chúng tôi sẽ kiểm tra thiết lập của mình bằng cách tạo một DB thử nghiệm với một bảng và chèn một số giá trị vào bảng bằng các lệnh bên dưới

  early-plugin-load=keyring_file.so
  keyring_file_data=/opt/bitnami/mysql/data/keyring
2

Sau khi tạo dữ liệu thử nghiệm thành công, hãy chạy lệnh bên dưới từ trình bao Linux để kiểm tra xem bạn có thể đọc tệp InnoDB cho bảng đã tạo của mình không i. e. Trước khi mã hóa

Cùng với đó, chúng tôi thấy rằng tệp khóa của chúng tôi cũng trống trước khi mã hóa được bật

  early-plugin-load=keyring_file.so
  keyring_file_data=/opt/bitnami/mysql/data/keyring
3

 

Tại thời điểm này, nếu chúng tôi cố gắng kiểm tra tệp khóa của mình, chúng tôi sẽ không tìm thấy gì

  early-plugin-load=keyring_file.so
  keyring_file_data=/opt/bitnami/mysql/data/keyring
4

Bây giờ, hãy mã hóa bảng của chúng tôi bằng lệnh bên dưới và kiểm tra nội dung tệp khóa và tệp InnoDB của chúng tôi

[root@mysql ~]#  vim /etc/my.cnf
[mysqld]

innodb_file_per_table=ON
0

Nội dung trên rõ ràng rằng dữ liệu tệp không thể đọc được và không gian bảng được mã hóa. Vì dữ liệu tệp khóa oy trước đây không có/trống, vì vậy bây giờ nó phải có một số dữ liệu

Ghi chú. Vui lòng xem  Khóa chính và dấu thời gian [chúng tôi sẽ triển khai xoay vòng phím ]

[root@mysql ~]#  vim /etc/my.cnf
[mysqld]

innodb_file_per_table=ON
1

Với mối lo ngại về bảo mật đã biết đối với khóa chính bị xâm phạm, thỉnh thoảng chúng tôi có thể sử dụng kỹ thuật xoay vòng khóa chính để lưu khóa của mình

[root@mysql ~]#  vim /etc/my.cnf
[mysqld]

innodb_file_per_table=ON
2

Sau lệnh này, chúng tôi nhận ra rằng dấu thời gian chính của chúng tôi hiện đã thay đổi và chúng tôi có một khóa mới.  

[root@mysql ~]#  vim /etc/my.cnf
[mysqld]

innodb_file_per_table=ON
3

Một số lệnh hữu ích

Dưới đây là một số lệnh hữu ích mà chúng tôi có thể sử dụng trong một hệ thống được mã hóa

1. Liệt kê tất cả các bảng có bật mã hóa

[root@mysql ~]#  vim /etc/my.cnf
[mysqld]

innodb_file_per_table=ON
4

2. Mã hóa bảng trong cơ sở dữ liệu

[root@mysql ~]#  vim /etc/my.cnf
[mysqld]

innodb_file_per_table=ON
5

3. Tắt mã hóa cho bảng InnoDB

[root@mysql ~]#  vim /etc/my.cnf
[mysqld]

innodb_file_per_table=ON
6

Phần kết luận.  

Bạn có thể mã hóa dữ liệu ở trạng thái nghỉ bằng cách sử dụng plugin khóa và chúng tôi có thể kiểm soát và quản lý dữ liệu đó bằng cách xoay khóa chính. Tạo một thiết lập tệp dữ liệu Mysql được mã hóa đơn giản bằng cách thực hiện một vài lệnh đơn giản. Việc sử dụng một hệ thống được mã hóa cũng minh bạch đối với các dịch vụ, ứng dụng và người dùng với tác động tối thiểu đến tài nguyên hệ thống. Hơn nữa với Mã hóa dữ liệu khi lưu trữ, chúng tôi cũng có thể triển khai mã hóa khi truyền.  

Tôi hy vọng bạn tìm thấy bài viết này nhiều thông tin và thú vị. Tôi thực sự đánh giá cao bất kỳ và tất cả thông tin phản hồi

Bạn có thể mã hóa cơ sở dữ liệu MySQL không?

Để kích hoạt mã hóa cho vùng bảng hệ thống mysql, hãy chỉ định tên vùng bảng và tùy chọn ENCRYPTION trong câu lệnh ALTER TABLESPACE . mysql> THAY ĐỔI TABLESPACE mysql ENCRYPTION = 'Y'; .

Làm cách nào để mã hóa một giá trị trong MySQL?

Hàm MySQL AES_ENCRYPT được sử dụng để mã hóa chuỗi bằng thuật toán Tiêu chuẩn mã hóa nâng cao [AES]. Hàm MySQL AES_ENCRYPT mã hóa dữ liệu với độ dài khóa 128 bit nhưng nó có thể được mở rộng lên tới độ dài khóa 256 bit. Nó mã hóa một chuỗi và trả về một chuỗi nhị phân

Làm cách nào để mã hóa một cột trong MySQL?

Mã hóa cấp độ cột trong MySQL .
TẠO BẢNG pii_data [ user_id int unsigned PRIMARY KEY,.
CHÈN VÀO mytable [id, secret_data] GIÁ TRỊ [1, TO_BASE64[AES_ENCRYPT[“dữ liệu siêu bí mật”, “khóa của tôi”]]]; .
plaintextData = “nội dung siêu bí mật”.
CHỌN secretData, key TỪ mytable;

Làm cách nào để kiểm tra mã hóa trong MySQL?

Nếu một vùng bảng chung chứa các bảng, hãy kiểm tra thông tin bảng để xem bảng đó có được mã hóa hay không . Khi không gian bảng chung không chứa bảng, bạn có thể xác minh xem không gian bảng có được mã hóa hay không. Đối với các không gian bảng đơn lẻ, hãy xác minh tùy chọn ENCRYPTION bằng INFORMATION_SCHEMA.

Chủ Đề