Hướng dẫn mysql table encryption - mã hóa bảng mysql

Hướng dẫn mysql table encryption - mã hóa bảng mysql

MySQL 5.7.11 đã giới thiệu mã hóa không gian bảng trong suốt Innodb, cho phép hỗ trợ cho các không gian bảng tệp cho mỗi bảng và tính năng này được thảo luận trong blog này.

Sau đó trong MySQL 8.0.13, mã hóa cho không gian bảng chung & nbsp; đã được giới thiệu.

Để cải thiện khả năng sử dụng xử lý mã hóa, MySQL 8.0.16 đã thêm một số tính năng để kích hoạt, vô hiệu hóa và thực thi mã hóa bảng cho các bảng trong lược đồ, không gian bảng chung hoặc toàn bộ hệ thống MySQL. Điều này cho phép kiểm soát chi tiết hơn cho quản trị viên cơ sở dữ liệu. Các phần dưới đây thảo luận về một số tính năng này với các ví dụ

1. Mã hóa xảy ra ở mức không gian bảng

MySQL mã hóa các bảng ở cấp độ lưu trữ, bằng cách mã hóa nội dung của các khối hệ thống tập tin. Một không gian bảng không thể có hỗn hợp các khối không được mã hóa. Vì vậy, một không gian bảng hoặc không được mã hóa hoặc được mã hóa. Đối với các bảng người dùng, MySQL hỗ trợ hai loại không gian bảng. Mặc định là các không gian bảng tệp theo bảng, trong đó mỗi bảng được lưu trữ trong một không gian bảng riêng. Loại thứ hai là một không gian bảng chung, trong đó nhiều bảng có thể được lưu trữ trong một không gian bảng. Sau đó, theo sau rằng các không gian bảng chung không thể có hỗn hợp các bảng không được mã hóa và được mã hóa.

Hướng dẫn mysql table encryption - mã hóa bảng mysql
Mã hóa có thể được kiểm soát ở nhiều cấp độ trong hệ thống MySQL. Mã hóa xảy ra ở lớp lưu trữ. Usecase 1: Tôi muốn tất cả các bảng trong hệ thống của mình được mã hóaUsecase 1: I want all tables in my system to be encrypted

Tôi muốn tất cả các bảng trong hệ thống của mình được mã hóa. Điều này có thể dễ dàng đạt được với cài đặt cấu hình rộng hệ thống, default_table_encryption. Nếu bạn định cấu hình default_table_encryption = xông y, tất cả các bảng mới sẽ được mã hóa. & Nbsp; Trong hình trên này sẽ được cấu hình ở cấp hệ thống. Xem Phần 2 để biết cách kiểm tra điều này.

Usecase 2: Tôi muốn tất cả các bảng trong lược đồ của mình được mã hóa I want all tables in my schema to be encrypted

Tôi có một lược đồ mà tôi muốn tất cả các bảng của tôi được mã hóa. Khi tạo lược đồ, một thuộc tính mã hóa mặc định có thể được đặt. Tất cả các bảng được tạo trong lược đồ sau đó sẽ kế thừa cài đặt mã hóa mặc định lược đồ này. Nhìn vào hình trên, nếu mã hóa được cấu hình cho ‘DB1, & NBSP; Tất cả các bảng sẽ được mã hóa cả hai không gian bảng cho mỗi bảng như cho ‘TS1, và cho các không gian bảng chung như‘ TS2, & NBSP; Xem Phần 3 và 4 để biết thêm chi tiết.

Usecase 3: Tôi có một không gian bảng chung và muốn nó được mã hóa I have a general tablespace and want it to be encrypted

Tôi đang sử dụng các không gian bảng chung và tôi muốn tất cả các bảng trong một không gian bảng được mã hóa. Chúng tôi biết rằng một không gian bảng chung chỉ có thể giữ các bảng được mã hóa hoặc không được mã hóa. Nhìn vào hình trên, chúng tôi muốn ‘TS2, được mã hóa. Vì vậy, chúng tôi tạo không gian bảng và cấu hình nó được mã hóa. Bảng ‘T2, từ lược đồ‘ DB1, sau đó sẽ được tạo và lưu trữ trong ‘TS2, được mã hóa như‘ DB1, đã được tạo với bộ mã hóa mặc định. Khi ‘TS1, trong‘ DB2, được tạo, một mệnh đề mã hóa phải được thêm vào để tạo thành công bảng sẽ được lưu trữ trong ‘TS2. Xem Phần 4 để biết thêm chi tiết.

Usecase 4: Tôi muốn chặn các cài đặt mã hóa mặc định ghi đè I want to block overriding default encryption settings

Có các mệnh đề để ghi đè cài đặt mã hóa mặc định. Tôi muốn cấm bất kỳ sự ghi đè của các cài đặt này. Nhìn vào hình trên và ‘DB1, có bộ mã hóa mặc định và‘ DB2, có mã hóa mặc định không được đặt và ‘TS2, được tạo dưới dạng không gian bảng được mã hóa, tôi muốn & nbsp; Cấm ‘T1, từ‘ DB2, được tạo ra trong ‘TS2, & NBSP; Chúng ta có thể đạt được điều này với cài đặt cấu hình & NBSP; Có thể yêu cầu máy chủ sẽ cấm ghi đè cài đặt mã hóa. & NBSP; Người dùng có đặc quyền TABE_ENCRYPTY_ADMIN luôn có thể ghi đè bất kỳ kiểm tra nào. & NBSP; Xem Phần 5 để biết thêm chi tiết.

2. Mặc định mã hóa rộng hệ thống MySQL

MySQL 8.0.16 Cung cấp một biến hệ thống máy chủ Default_table_encryption được đặt thành ‘N, theo mặc định khi khởi động máy chủ. Tạo một lược đồ hoặc một không gian bảng chung sẽ kế thừa cài đặt này. Ví dụ: với trên

$ Tạo lược đồ DB1;CREATE SCHEMA db1;

$ Show Tạo lược đồ DB1;SHOW CREATE SCHEMA db1;

| Cơ sở dữ liệu | Tạo cơ sở dữ liệuDatabase|Create Database

|--

| db1 & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; |db1      |CREATE DATABASE`db1`

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; /*! 40100 ký tự mặc định đặt UTF8MB4/*!40100 DEFAULT CHARACTER SET utf8mb4

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Đối chiếu UTF8MB4_0900_AI_CI *//

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; / *! 80016 Mã hóa mặc định = 'y' *///*!80016 DEFAULT ENCRYPTION='Y' */

$ Tạo không gian bảng TS2 Thêm dataFile'df1.ibd ';CREATE TABLESPACE ts2 ADD DATAFILE'df1.ibd';

$ Chọn tên, mã hóaSELECT NAME,ENCRYPTION

& nbsp; & nbsp; & nbsp; & nbsp; từ thông tin_schema.innodb_tablespaceFROM INFORMATION_SCHEMA.INNODB_TABLESPACES

& nbsp; & nbsp; & nbsp; & nbsp; trong đó tên like'ts2 ';WHERE NAME LIKE'ts2';

| Tên & nbsp; & nbsp; | Mã hóaNAME   |ENCRYPTION

|--

| db1 & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; |ts2    |Y

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; /*! 40100 ký tự mặc định đặt UTF8MB4

LƯU Ý: Các biến ‘DEFAULT_TABLE_ENCRYPTY Cài đặt có thể được thay đổi trong thời gian chạy bởi những người dùng sở hữu các đặc quyền System_Variables_Admin và Table_encryption_admin hoặc siêu đặc quyền.

3. Mặc định mã hóa rộng lược đồ

Mã hóa mặc định cho lược đồ được đặt bằng mệnh đề mã hóa mặc định mới được giới thiệu trong MySQL 8.0.16 khi tạo hoặc thay đổi lược đồ. Ví dụ.,:

Tạo lược đồ db1 defaultEncryption = 'y';SCHEMA db1 DEFAULTENCRYPTION='y';

Bất kỳ bảng nào được tạo theo lược đồ ‘DB1, sẽ kế thừa cài đặt mệnh đề mã hóa mặc định lược đồ. Ví dụ.,:
E.g.,:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

$ Tạo Bảng DB1.T1 (F1 Int);CREATE TABLE db1.t1(f1 int);

$ Show Tạo bảng DB1.T1;SHOW CREATE TABLE db1.t1;

| Bảng | Tạo bảngTable|Create Table

|--

| T1 & nbsp; & nbsp; & nbsp; & nbsp;t1    |CREATE TABLE`t1`(

        `f1`intDEFAULTNULL`f1`intDEFAULTNULL

& nbsp; & nbsp; & nbsp; & nbsp;)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;COLLATE=utf8mb4_0900_ai_ci ENCRYPTION='Y'

$ Select Table_name, created_optionsSELECT TABLE_NAME,CREATE_OPTIONS

& nbsp; & nbsp; & nbsp; & nbsp; từ thông tin_schema.tablesFROM INFORMATION_SCHEMA.TABLES

& nbsp; & nbsp; & nbsp; & nbsp; trong đó table_name = 't1';WHERE TABLE_NAME='t1';

| Table_Name & nbsp; & nbsp; & nbsp; & nbsp; | created_optionsTABLE_NAME    |CREATE_OPTIONS

|--

| T1 & nbsp; & nbsp; & nbsp; & nbsp;t1            |ENCRYPTION='Y'

& nbsp; & nbsp; & nbsp; & nbsp;

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;CREATE TABLE db1.t4(f1 int)ENCRYPTION='n';

$ Select Table_name, created_options

& nbsp; & nbsp; & nbsp; & nbsp; từ thông tin_schema.tables

& nbsp; & nbsp; & nbsp; & nbsp; trong đó table_name = 't1';


| Table_Name & nbsp; & nbsp; & nbsp; & nbsp; | created_options

| T1 & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

Chúng tôi có thể ghi đè mã hóa bảng mặc định bằng cách đặt rõ ràng nó trong câu lệnh Creat của bạn. Cố gắng tạo một & nbsp; Bảng không được mã hóa trong lược đồ với mã hóa mặc định = ‘Y, sẽ tạo ra một cảnh báo. Ví dụ.,:CREATE TABLESPACE ts2

$ Tạo bảng db1.t4 (f1 int) mã hóa = 'n';ADD DATAFILE'df1.ibd'ENCRYPTION='y';

# Cảnh báo:CREATE SCHEMA db1 DEFAULTENCRYPTION='y';

# CẢNH BÁO 3824 Tạo một bảng không được mã hóa trongCREATE TABLE db1.t2(f1 int)TABLESPACE=ts2;

#& nbsp; & nbsp; Một cơ sở dữ liệu với mã hóa mặc định được bật.SHOW CREATE TABLE db1.t2;

| Bảng | Tạo bảngTable|Create Table

|--

| T1 & nbsp; & nbsp; & nbsp; & nbsp;t2    |CREATE TABLE`t2`(

        `f1`intDEFAULTNULL`f1`intDEFAULTNULL

& nbsp; & nbsp; & nbsp; & nbsp;)/*!50100 TABLESPACE `ts2` */ENGINE=InnoDB

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;DEFAULTCHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

        /*!80016ENCRYPTION='Y'*/*!80016ENCRYPTION='Y'*

$ Select Table_name, created_optionsSELECT NAME,ENCRYPTION

& nbsp; & nbsp; & nbsp; & nbsp; từ thông tin_schema.tablesFROM INFORMATION_SCHEMA.INNODB_TABLESPACES

& nbsp; & nbsp; & nbsp; & nbsp; trong đó table_name = 't1';WHERE NAME LIKE'ts2';

| Table_Name & nbsp; & nbsp; & nbsp; & nbsp; | created_optionsNAME|ENCRYPTION

|--

| T1 & nbsp; & nbsp; & nbsp; & nbsp;ts2  |Y

& nbsp; & nbsp; & nbsp; & nbsp;

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;CREATE TABLESPACE ts4 ADD DATAFILE'df1.ibd'ENCRYPTION='n';

# Cảnh báo:CREATE SCHEMA db1 DEFAULTENCRYPTION='y';

# CẢNH BÁO 3824 Tạo một bảng không được mã hóa trongCREATE TABLE db1.t1(f1 int)TABLESPACE=ts4 ENCRYPTION='n';

$ Select Table_name, created_options

& nbsp; & nbsp; & nbsp; & nbsp; từ thông tin_schema.tables

& nbsp; & nbsp; & nbsp; & nbsp; trong đó table_name = 't1';

| Table_Name & nbsp; & nbsp; & nbsp; & nbsp; | created_options

| T1 & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp;

Chúng tôi có thể ghi đè mã hóa bảng mặc định bằng cách đặt rõ ràng nó trong câu lệnh Creat của bạn. Cố gắng tạo một & nbsp; Bảng không được mã hóa trong lược đồ với mã hóa mặc định = ‘Y, sẽ tạo ra một cảnh báo. Ví dụ.,:

$ Tạo bảng db1.t4 (f1 int) mã hóa = 'n';

# Cảnh báo:

# CẢNH BÁO 3824 Tạo một bảng không được mã hóa trong Trying to create a schema with DEFAULT ENCRYPTION = ‘N’ will throw an error.

#& nbsp; & nbsp; Một cơ sở dữ liệu với mã hóa mặc định được bật.CREATE SCHEMA db1 DEFAULTENCRYPTION='n';

4. Không gian bảng chung và Lược đồ Mã hóa mặc định

Chúng ta hãy giả sử chúng ta có lược đồ ‘DB1, với mã hóa mặc định được đặt thành‘ Y, và chúng ta muốn tạo một bảng bằng cách sử dụng một không gian bảng chung trong ‘DB1. MySQL hy vọng người dùng sẽ sử dụng không gian bảng chung được mã hóa. Ví dụ.,:

$ Tạo không gian bảng TS2

& nbsp; & nbsp; thêm dataFile'df1.ibd'encryption = 'y'; Trying to create a table with encryption type which does not match the schema encryption will also result in similar error. E.g.,:

$CREATESCHEMAdb1;CREATESCHEMAdb1;

$ Tạo lược đồ DB1 DefaultEncryption = 'y';

$ Tạo bảng DB1.T2 (F1 Int) TableSpace = TS2;

$CREATETABLEdb1.t1(f1int)ENCRYPTION='n';CREATETABLEdb1.t1(f1int)ENCRYPTION='n';

# Lỗi Hy000: Mã hóa bảng khác với nó

#& nbsp; & nbsp; mã hóa mặc định cơ sở dữ liệu và người dùng không

#& nbsp; & nbsp; có đủ đặc quyền.

c) Cố gắng tạo một không gian bảng chung với mã hóa = Hiện N, sẽ gây ra lỗi. Trying to create a general tablespace with ENCRYPTION=’N’ will throw an error.

$ Tạo không gian bảng TS1CREATE TABLESPACE ts1

& nbsp; & nbsp; thêm dataFile'ts1.ibd'encryption = 'n';ADD DATAFILE'ts1.ibd'ENCRYPTION='n';

# Lỗi Hy000: Mã hóa không gian bảng khác với

#& nbsp; & nbsp; Cài đặt 'default_table_encryption' và người dùng

#& nbsp; & nbsp; Không có đủ đặc quyền.

Với có thể sử dụng, có thể thực hiện và giả mạo Ví dụ: nếu người dùng cố gắng tạo cơ sở dữ liệu với mã hóa mặc định = xông y, hoặc tạo bảng với mã hóa = hồi y, & nbsp; Lệnh sẽ thất bại với các thông báo lỗi tương ứng. & NBSP; Một người dùng sở hữu đặc quyền Table_encryption_admin sẽ có thể thực thi các câu lệnh trên ghi đè kiểm tra đặc quyền.

Đó là tất cả cho bây giờ! & NBSP; Vui lòng tham khảo các tài liệu sau đây để biết thêm thông tin.

https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-additions https://dev.mysql.com/doc/refman/8.0/en -encryption.html https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_table_encryption https:/dev.mysql.com/doc -System-variable.html#sysvar_table_encryption_privilege_check https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_table-cryption-admin /8.0/en/create-database.html https://dev.mysql.com/doc/refman/8.0/en/alter-database.html https://dev.mysql.com/doc/refman/8.0/en /create-TableSpace.html https://dev.mysql.com/doc/refman/8.0/en/alter-tablespace.html https://dev.mysql.com/doc/refman/8.0/en/encreate . //dev.mysql.com/doc/refman/8.0/en/tables-table.html
https://dev.mysql.com/doc/refman/8.0/en/innodb-tablespace-encryption.html
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_table_encryption
https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_table_encryption_privilege_check
https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_table-encryption-admin
https://dev.mysql.com/doc/refman/8.0/en/create-database.html
https://dev.mysql.com/doc/refman/8.0/en/alter-database.html
https://dev.mysql.com/doc/refman/8.0/en/create-tablespace.html
https://dev.mysql.com/doc/refman/8.0/en/alter-tablespace.html
https://dev.mysql.com/doc/refman/8.0/en/create-table.html
https://dev.mysql.com/doc/refman/8.0/en/alter-table.html
https://dev.mysql.com/doc/refman/8.0/en/schemata-table.html
https://dev.mysql.com/doc/refman/8.0/en/tables-table.html

Cảm ơn bạn đã sử dụng MySQL!