Đặc quyền TRUNCATE của MySQL

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ùng

Ví 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'@'%';
7

GRANT 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ệu

GRANT 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ô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]

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ống

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
1

Bạ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ệu

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
3

Trong 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ền

Thu 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ùng

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 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]
7

GRANT 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'@'%';
1

Giới thiệu về kết hợp mờ, thoát, chuỗi và mã định danh

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
2

Ví 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ện

Mộ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'@'%';
7

Nế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'@'%';
8

Kiể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'@'%';
0

Ví 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ầu

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
1

Hiển thị các đặc quyền được cấp của người dùng

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
15

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
2

Cá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'@'%';
18

Privilege typePrivilege variablePrivilege descriptionALL
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
19All the privilegesDrop
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
30Deletes a schema or tableIndex
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
31Creates or deletes an indexAlter
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
32Executes the
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
33 statementSuper
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
34All the privilegesCreate
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
35Creates a schema or tableSelect
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
36Reads the table dataInsert
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
37Inserts data to a tableUpdate
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
38Updates the table dataDelete
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
39Deleted the table dataReload
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
00Executes the
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
01 statementConfig
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
02Dynamically reloads configurationTrigger
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
03/Process
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
04Displays the running taskExecute
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
05Executes the
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
06 statementDrop Role
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
07Executes

THAY ĐỔI

  • Đối với tất cả các câu lệnh
    GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
    
    33, người dùng phải có đặc quyền
    GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
    
    33 cho bảng tương ứng
  • Đối với các câu lệnh ngoại trừ
    GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
    
    19 và
    GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
    
    20, người dùng phải có đặc quyền
    GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
    
    21 và
    GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
    
    22 cho bảng tương ứng
  • Đối với câu lệnh
    GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
    
    19, người dùng phải có đặc quyền
    GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
    
    24 cho bảng tương ứng
  • Đối với câu lệnh
    GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
    
    20, người dùng phải có đặc quyền
    GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
    
    24 cho bảng trước khi đổi tên và đặ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ên

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 MySQL

TẠ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ệu

TẠO CHỈ SỐ

Yêu cầu đặc quyền

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
75 cho bảng

TẠ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ảng

TẠO CHẾ ĐỘ XEM

Yêu cầu đặc quyền

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
79

Nế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ầu

CƠ SỞ DỮ LIỆU THẢ

Yêu cầu đặc quyền

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
24 cho bảng

CHỈ SỐ THẢ

Yêu cầu đặc quyền

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
75 cho bảng

BÀN THẢ

Yêu cầu đặc quyền

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
24 cho bảng

TẢI DỮ LIỆU

Yêu cầu đặc quyền

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
21 cho bảng

Yêu cầu đặc quyền

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
24 cho bảng

BẢ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ên

BẢ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ảng

TRÌ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ảng

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
10 yêu cầu đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
05

GRANT 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ào

TẠ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'@'%';
15

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
12 yêu cầu đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
12

THẢ 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'@'%';
08

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
16 yêu cầu đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
12

THAY ĐỔI NGƯỜI DÙNG

Yêu cầu đặc quyền

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
12

KHOẢ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'@'%';
5

Yêu cầu thêm đặc quyền

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
12 để tạo người dùng hoàn toàn

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
22 yêu cầu đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
81

THU 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]
7

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
26 yêu cầu đặc quyền
GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
81

THIẾ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ầu

QUẢ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'@'%';
81

GIẾ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ác

Thự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 đó

  • GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
    
    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ợ]

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'@'%';
32

GRANT ALL PRIVILEGES ON *.* TO 'xxx'@'%';
3

Trong 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ầu

GRANT 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ệu

Bạ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 thi

Khi 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'@'%';
56

Danh 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ùng

GRANT 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 User

Khi 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'@'%';
33

Bả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ào

Trong 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ẫu

Dữ 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ải

Khi 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ức

Chỉ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

Các cấp đặc quyền trong MySQL là gì?

Các mức đặc quyền trong MySQL . toàn cục, cơ sở dữ liệu, bảng, cột, thủ tục hoặc hàm được lưu trữ và proxy , như trong hình bên dưới.

Chúng ta có thể sử dụng TRUNCATE với mệnh đề where không?

Lệnh truncate xóa tất cả các hàng của bảng. Ở đây, bạn không thể sử dụng mệnh đề Where . Đơn đặt hàng DDL là như vậy. Để xóa tất cả dữ liệu, lệnh SQL Truncate sẽ khóa bảng và trang.

Siêu đặc quyền trong MySQL là gì?

SUPER có thể được sử dụng để chấm dứt các phiên khác hoặc thay đổi cách máy chủ hoạt động . Các đặc quyền được cấp cho chính cơ sở dữ liệu hệ thống mysql có thể được sử dụng để thay đổi mật khẩu và thông tin đặc quyền truy cập khác. Mật khẩu được lưu trữ mã hóa, vì vậy người dùng độc hại không thể chỉ cần đọc chúng để biết mật khẩu văn bản thuần túy.

MySQL có thể xử lý 1 triệu bản ghi không?

Hàng triệu hàng cũng được , hàng chục triệu hàng cũng được - miễn là bạn có một máy chủ tốt từ xa, tôi. e. một vài Gbs RAM, nhiều dung lượng ổ đĩa. Bạn sẽ cần tìm hiểu về index để truy xuất nhanh, nhưng về mặt MySQL có thể xử lý được thì không vấn đề gì. Lưu câu trả lời này.

Chủ Đề