Bạn đang xem tài liệu về phiên bản cũ hơn của cơ sở dữ liệu TiDB [TiDB v5. 0]. Bạn nên sử dụng phiên bản LTS mới nhất của cơ sở dữ liệu TiDB
TiDB hỗ trợ MySQL 5. Hệ thống quản lý đặc quyền của 7, bao gồm cú pháp và các loại đặc quyền. Bắt đầu với TiDB 3. 0, hỗ trợ cho Vai trò SQL cũng có sẵn
Tài liệu này giới thiệu các hoạt động TiDB liên quan đến đặc quyền, các đặc quyền cần thiết cho các hoạt động của TiDB và triển khai hệ thống đặc quyền
Cấp đặc quyền
Câu lệnh
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
5 cấp đặc quyền cho tài khoản người dùngVí dụ: sử dụng câu lệnh sau để cấp cho người dùng
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
6 đặc quyền đọc cơ sở dữ liệu GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
7GRANT SELECT ON test.* TO 'xxx'@'%';
Sử dụng câu lệnh sau để cấp cho người dùng
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
6 tất cả các đặc quyền trên tất cả các cơ sở dữ liệuGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
Theo mặc định, câu lệnh
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
5 sẽ trả về lỗi nếu người dùng chỉ định không tồn tại. Hành vi này phụ thuộc vào việc Chế độ SQL mysql> SET sql_mode=DEFAULT;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]
mysql> SELECT * FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
mysql> GRANT ALL PRIVILEGES ON test.* TO 'idontexist';
ERROR 1105 [HY000]: You are not allowed to create a user with GRANT
mysql> SELECT user,host,password FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
0 có được chỉ định hay khôngmysql> SET sql_mode=DEFAULT;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]
mysql> SELECT * FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
mysql> GRANT ALL PRIVILEGES ON test.* TO 'idontexist';
ERROR 1105 [HY000]: You are not allowed to create a user with GRANT
mysql> SELECT user,host,password FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
Trong ví dụ sau, người dùng
mysql> SET sql_mode=DEFAULT;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]
mysql> SELECT * FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
mysql> GRANT ALL PRIVILEGES ON test.* TO 'idontexist';
ERROR 1105 [HY000]: You are not allowed to create a user with GRANT
mysql> SELECT user,host,password FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
1 được tạo tự động với mật khẩu trống vì Chế độ SQL mysql> SET sql_mode=DEFAULT;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]
mysql> SELECT * FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
mysql> GRANT ALL PRIVILEGES ON test.* TO 'idontexist';
ERROR 1105 [HY000]: You are not allowed to create a user with GRANT
mysql> SELECT user,host,password FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
0 không được đặt. Điều này không được khuyến khích vì nó có rủi ro bảo mật. viết sai chính tả tên người dùng sẽ dẫn đến một người dùng mới được tạo bằng mật khẩu trốngGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
1Bạn có thể sử dụng kết hợp mờ trong
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
5 để cấp đặc quyền cho cơ sở dữ liệuGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
3Trong ví dụ này, vì
mysql> SET sql_mode=DEFAULT;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]
mysql> SELECT * FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
mysql> GRANT ALL PRIVILEGES ON test.* TO 'idontexist';
ERROR 1105 [HY000]: You are not allowed to create a user with GRANT
mysql> SELECT user,host,password FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
4 trong mysql> SET sql_mode=DEFAULT;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]
mysql> SELECT * FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
mysql> GRANT ALL PRIVILEGES ON test.* TO 'idontexist';
ERROR 1105 [HY000]: You are not allowed to create a user with GRANT
mysql> SELECT user,host,password FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
5, tất cả các cơ sở dữ liệu bắt đầu bằng mysql> SET sql_mode=DEFAULT;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]
mysql> SELECT * FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
mysql> GRANT ALL PRIVILEGES ON test.* TO 'idontexist';
ERROR 1105 [HY000]: You are not allowed to create a user with GRANT
mysql> SELECT user,host,password FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
6 đều được cấp đặc quyềnThu hồi đặc quyền
Câu lệnh
mysql> SET sql_mode=DEFAULT;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]
mysql> SELECT * FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
mysql> GRANT ALL PRIVILEGES ON test.* TO 'idontexist';
ERROR 1105 [HY000]: You are not allowed to create a user with GRANT
mysql> SELECT user,host,password FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
7 cho phép quản trị viên hệ thống thu hồi các đặc quyền từ tài khoản người dùngCâu lệnh
mysql> SET sql_mode=DEFAULT;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]
mysql> SELECT * FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
mysql> GRANT ALL PRIVILEGES ON test.* TO 'idontexist';
ERROR 1105 [HY000]: You are not allowed to create a user with GRANT
mysql> SELECT user,host,password FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
7 tương ứng với câu lệnh mysql> SET sql_mode=DEFAULT;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]
mysql> SELECT * FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
mysql> GRANT ALL PRIVILEGES ON test.* TO 'idontexist';
ERROR 1105 [HY000]: You are not allowed to create a user with GRANT
mysql> SELECT user,host,password FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
7GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
0Để thu hồi đặc quyền, bạn cần khớp chính xác. Nếu không tìm thấy kết quả phù hợp, một lỗi sẽ được hiển thị
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
1Giới thiệu về kết hợp mờ, thoát, chuỗi và mã định danh
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
2Ví dụ này sử dụng đối sánh chính xác để tìm cơ sở dữ liệu có tên
mysql> SET sql_mode=DEFAULT;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]
mysql> SELECT * FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
mysql> GRANT ALL PRIVILEGES ON test.* TO 'idontexist';
ERROR 1105 [HY000]: You are not allowed to create a user with GRANT
mysql> SELECT user,host,password FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
5. Lưu ý rằng mysql> SET sql_mode=DEFAULT;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]
mysql> SELECT * FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
mysql> GRANT ALL PRIVILEGES ON test.* TO 'idontexist';
ERROR 1105 [HY000]: You are not allowed to create a user with GRANT
mysql> SELECT user,host,password FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
4 sử dụng ký tự thoát GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
12 để mysql> SET sql_mode=DEFAULT;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]
mysql> SELECT * FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
mysql> GRANT ALL PRIVILEGES ON test.* TO 'idontexist';
ERROR 1105 [HY000]: You are not allowed to create a user with GRANT
mysql> SELECT user,host,password FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
4 không được coi là ký tự đại diệnMột chuỗi được đặt trong dấu nháy đơn [''], trong khi mã định danh được đặt trong dấu gạch ngược [``]. Xem sự khác biệt dưới đây
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
7Nếu bạn muốn sử dụng các từ khóa đặc biệt làm tên bảng, hãy đặt chúng trong dấu gạch ngược [``]. Ví dụ
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
8Kiểm tra các đặc quyền được cấp cho người dùng
Bạn có thể sử dụng câu lệnh
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
14 để xem những đặc quyền nào được cấp cho người dùng. Ví dụGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
0Ví dụ: tạo người dùng
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
15 và cấp cho người dùng đặc quyền ghi trên bảng GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
16 và đặc quyền đọc toàn cầuGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
1Hiển thị các đặc quyền được cấp của người dùng
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
15GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
2Các đặc quyền cần thiết cho hoạt động của TiDB
Bạn có thể kiểm tra đặc quyền của người dùng TiDB trong bảng
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
18Privilege typePrivilege variablePrivilege descriptionALLGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
19All the privilegesDropGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
30Deletes a schema or tableIndexGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
31Creates or deletes an indexAlterGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
32Executes the GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
33 statementSuperGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
34All the privilegesCreateGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
35Creates a schema or tableSelectGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
36Reads the table dataInsertGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
37Inserts data to a tableUpdateGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
38Updates the table dataDeleteGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
39Deleted the table dataReloadGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
00Executes the GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
01 statementConfigGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
02Dynamically reloads configurationTriggerGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
03/ProcessGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
04Displays the running taskExecuteGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
05Executes the GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
06 statementDrop RoleGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
07Executes THAY ĐỔI
- Đối với tất cả các câu lệnh
33, người dùng phải có đặc quyềnGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
33 cho bảng tương ứngGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
- Đối với các câu lệnh ngoại trừ
19 vàGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
20, người dùng phải có đặc quyềnGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
21 vàGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
22 cho bảng tương ứngGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
- Đối với câu lệnh
19, người dùng phải có đặc quyềnGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
24 cho bảng tương ứngGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
- Đối với câu lệnh
20, người dùng phải có đặc quyềnGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
24 cho bảng trước khi đổi tên và đặc quyềnGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
22 vàGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
21 cho bảng sau khi đổi tênGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
Trong MySQL5. 7, người dùng cần có đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
21 và GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
22 để thực hiện thao tác GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
33 trên bảng. Nhưng trong thực tế đối với MySQL 5. 7. 25, chỉ yêu cầu đặc quyền GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
33 trong trường hợp này. Hiện tại, đặc quyền GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
33 trong TiDB phù hợp với hành vi thực tế trong MySQLTẠO NÊN CƠ SỞ DỮ LIỆU
Yêu cầu đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
22 cho cơ sở dữ liệuTẠO CHỈ SỐ
Yêu cầu đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
75 cho bảngTẠO BẢNG
Yêu cầu đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
22 cho bảngĐể thực thi câu lệnh
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
77, cần có đặc quyền GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
78 cho bảngTẠO CHẾ ĐỘ XEM
Yêu cầu đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
79Nếu người dùng hiện tại không phải là người dùng tạo Chế độ xem, cả hai đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
79 và GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
81 đều được yêu cầuCƠ SỞ DỮ LIỆU THẢ
Yêu cầu đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
24 cho bảngCHỈ SỐ THẢ
Yêu cầu đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
75 cho bảngBÀN THẢ
Yêu cầu đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
24 cho bảngTẢI DỮ LIỆU
Yêu cầu đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
21 cho bảngYêu cầu đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
24 cho bảngBẢNG ĐỔI TÊN
Yêu cầu các đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
33 và GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
24 cho bảng trước khi đổi tên và các đặc quyền GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
22 và GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
21 cho bảng sau khi đổi tênBẢNG PHÂN TÍCH
Yêu cầu các đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
21 và GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
78 cho bảngTRÌNH DIỄN
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
03 yêu cầu bất kỳ đặc quyền nào đối với bảngGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
10 yêu cầu đặc quyền GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
05GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
14 yêu cầu đặc quyền GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
78 đối với cơ sở dữ liệu GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
08. Nếu người dùng mục tiêu là người dùng hiện tại, thì GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
14 không yêu cầu bất kỳ đặc quyền nàoTẠO VAI TRÒ/NGƯỜI DÙNG
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
15 yêu cầu đặc quyền GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
15GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
12 yêu cầu đặc quyền GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
12THẢ VAI TRÒ/NGƯỜI DÙNG
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
08 yêu cầu đặc quyền GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
08GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
16 yêu cầu đặc quyền GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
12THAY ĐỔI NGƯỜI DÙNG
Yêu cầu đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
12KHOẢN TRỢ CẤP
Yêu cầu đặc quyền của
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
5 với các đặc quyền được cấp bởi GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
5Yêu cầu thêm đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
12 để tạo người dùng hoàn toànGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
22 yêu cầu đặc quyền GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
81THU HỒI
Yêu cầu đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
5 và những đặc quyền đó được nhắm mục tiêu bởi câu lệnh mysql> SET sql_mode=DEFAULT;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]
mysql> SELECT * FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
mysql> GRANT ALL PRIVILEGES ON test.* TO 'idontexist';
ERROR 1105 [HY000]: You are not allowed to create a user with GRANT
mysql> SELECT user,host,password FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
7GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
26 yêu cầu đặc quyền GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
81THIẾT LẬP TOÀN CẦU
Yêu cầu đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
81 để đặt biến toàn cầuQUẢN TRỊ VIÊN
Yêu cầu đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
81ĐẶT VAI TRÒ MẶC ĐỊNH
Yêu cầu đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
81GIẾT CHẾT
Yêu cầu đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
81 để giết các phiên người dùng khácThực hiện hệ thống đặc quyền
Bảng ưu đãi
Các bảng hệ thống sau là đặc biệt vì tất cả dữ liệu liên quan đến đặc quyền được lưu trữ trong đó
32 [tài khoản người dùng, đặc quyền toàn cầu]GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
33 [đặc quyền cấp cơ sở dữ liệu]GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
34 [đặc quyền cấp bảng]GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
35 [đặc quyền cấp cột; hiện không được hỗ trợ]GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
Các bảng này chứa phạm vi hiệu quả và thông tin đặc quyền của dữ liệu. Ví dụ, trong bảng
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
32GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
3Trong bản ghi này,
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
37 và GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
38 xác định rằng yêu cầu kết nối được gửi bởi người dùng GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
39 từ bất kỳ máy chủ nào [mysql> SET sql_mode=DEFAULT;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]
mysql> SELECT * FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
mysql> GRANT ALL PRIVILEGES ON test.* TO 'idontexist';
ERROR 1105 [HY000]: You are not allowed to create a user with GRANT
mysql> SELECT user,host,password FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
4] đều có thể được chấp nhận. GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
41 và GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
42 có nghĩa là người dùng có đặc quyền toàn cầu đối với GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
43 và GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
44. Phạm vi hiệu quả trong bảng GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
32 là toàn cầuGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
37 và GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
38 trong GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
33 xác định cơ sở dữ liệu nào người dùng có thể truy cập. Phạm vi hiệu quả là cơ sở dữ liệuBạn chỉ nên cập nhật các bảng đặc quyền thông qua cú pháp được cung cấp, chẳng hạn như
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
5, GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
12 và GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
16. Thực hiện các chỉnh sửa trực tiếp đối với các bảng đặc quyền cơ bản sẽ không tự động cập nhật bộ đệm đặc quyền, dẫn đến hành vi không thể đoán trước cho đến khi GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
52 được thực thiKhi máy khách gửi yêu cầu kết nối, máy chủ TiDB sẽ xác minh thao tác đăng nhập. Đầu tiên máy chủ TiDB kiểm tra bảng
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
32. Nếu bản ghi của GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
38 và GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
37 khớp với yêu cầu kết nối, thì máy chủ TiDB sẽ xác minh GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
56Danh tính người dùng dựa trên hai mẩu thông tin.
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
37, máy chủ bắt đầu kết nối và GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
38, tên người dùng. Nếu tên người dùng không trống, bắt buộc phải khớp chính xác tên người dùngGRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
38+GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
37 có thể khớp với một số hàng trong bảng GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
61. Để giải quyết tình huống này, các hàng trong bảng GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
61 được sắp xếp. Các hàng của bảng sẽ được kiểm tra từng cái một khi máy khách kết nối; . Khi sắp xếp, Host được xếp trước UserKhi kết nối thành công, quá trình xác minh yêu cầu sẽ kiểm tra xem hoạt động có đặc quyền hay không
Đối với các yêu cầu liên quan đến cơ sở dữ liệu [
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
21, GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
64], quy trình xác minh yêu cầu trước tiên sẽ kiểm tra các đặc quyền chung của người dùng trong bảng GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
32. Nếu đặc quyền được cấp, bạn có thể truy cập trực tiếp. Nếu không, hãy kiểm tra bảng GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
33Bảng
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
61 có đặc quyền toàn cầu bất kể cơ sở dữ liệu mặc định. Ví dụ: đặc quyền GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
68 trong GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
61 có thể áp dụng cho bất kỳ hàng, bảng hoặc cơ sở dữ liệu nàoTrong bảng
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
70, một người dùng trống sẽ khớp với tên người dùng ẩn danh. Ký tự đại diện không được phép trong cột GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
38. Giá trị cho các cột GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
37 và GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
73 có thể sử dụng mysql> SET sql_mode=DEFAULT;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]
mysql> SELECT * FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
mysql> GRANT ALL PRIVILEGES ON test.* TO 'idontexist';
ERROR 1105 [HY000]: You are not allowed to create a user with GRANT
mysql> SELECT user,host,password FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
4 và GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
75, có thể sử dụng đối sánh mẫuDữ liệu trong bảng
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
61 và GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
70 cũng được sắp xếp khi tải vào bộ nhớViệc sử dụng
mysql> SET sql_mode=DEFAULT;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]
mysql> SELECT * FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
mysql> GRANT ALL PRIVILEGES ON test.* TO 'idontexist';
ERROR 1105 [HY000]: You are not allowed to create a user with GRANT
mysql> SELECT user,host,password FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
4 trong GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
79 và GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
80 là tương tự, nhưng giá trị cột trong GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
73, GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
82 và GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
83 không được chứa mysql> SET sql_mode=DEFAULT;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]
mysql> SELECT * FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
mysql> GRANT ALL PRIVILEGES ON test.* TO 'idontexist';
ERROR 1105 [HY000]: You are not allowed to create a user with GRANT
mysql> SELECT user,host,password FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
4. Việc sắp xếp cũng tương tự khi tảiKhi TiDB khởi động, một số bảng kiểm tra đặc quyền được tải vào bộ nhớ, sau đó dữ liệu được lưu trong bộ nhớ cache được sử dụng để xác minh các đặc quyền. Việc thực thi các câu lệnh quản lý đặc quyền như
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
5, mysql> SET sql_mode=DEFAULT;
Query OK, 0 rows affected [0.00 sec]
mysql> SELECT @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set [0.00 sec]
mysql> SELECT * FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
mysql> GRANT ALL PRIVILEGES ON test.* TO 'idontexist';
ERROR 1105 [HY000]: You are not allowed to create a user with GRANT
mysql> SELECT user,host,password FROM mysql.user WHERE user='idontexist';
Empty set [0.00 sec]
7, GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
12, GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
16 sẽ có hiệu lực ngay lập tứcChỉnh sửa thủ công các bảng như
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
32 với các câu lệnh như GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
21, GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
68, GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
64 sẽ không có hiệu lực ngay lập tức. Hành vi này tương thích với MySQL và bộ đệm đặc quyền có thể được cập nhật bằng câu lệnh sau