Làm cách nào tôi có thể thấy tất cả các đặc quyền của người dùng trong MySQL?

Một người dùng bao gồm hai phần. tên người dùng và máy chủ mà người dùng đã kết nối từ đó, vì vậy để có được danh sách người dùng, cần phải bao gồm cả cột người dùng và máy chủ từ bảng người dùng

mysql> SELECT User, Host, CONCAT(User, '@', Host) AS Username
  FROM mysql.user;

Bạn cũng có thể chạy lệnh sau để kiểm tra information_schema. thay vào đó là bảng USER_PRIVILEGES

shell> mysql -B -N -e "SELECT DISTINCT CONCAT('SHOW GRANTS FOR ', GRANTEE, ';') FROM information_schema.USER_PRIVILEGES" > show-grants.sql

Ghi chú. Lưu ý rằng việc sử dụng tùy chọn -N sẽ bỏ qua việc hiển thị tên cột ở đầu ra

Để lấy danh sách các đặc quyền cho một người dùng nhất định, có thể sử dụng lệnh SHOW GRANTS, chẳng hạn để lấy các đặc quyền cho người dùng root khi đăng nhập từ máy chủ cục bộ

SHOW GRANTS FOR 'root'@'localhost';

Để có danh sách người dùng được cấp trên một số lược đồ nhất định, có thể sử dụng truy vấn sau (lưu ý rằng các quyền trên lược đồ được duy trì sau khi lược đồ bị hủy)

Để bắt đầu chỉnh sửa các đặc quyền trong MySQL, trước tiên bạn phải đăng nhập vào máy chủ của mình, sau đó kết nối với ứng dụng khách mysql. Thông thường, bạn sẽ muốn kết nối với root hoặc bất kỳ tài khoản nào là tài khoản 'siêu người dùng' chính, ban đầu của bạn có toàn quyền truy cập trong toàn bộ quá trình cài đặt MySQL

Thông thường, người dùng root sẽ được chỉ định mật khẩu xác thực khi MySQL được cài đặt, nhưng nếu không phải như vậy, bạn nên thực hiện các bước để tăng cường bảo mật bằng cách thêm mật khẩu root như được minh họa trong tài liệu chính thức

Kết nối với Công cụ dòng lệnh MySQL

Đối với ví dụ này, chúng tôi sẽ giả sử root là tài khoản MySQL chính. Để bắt đầu sử dụng MySQL Command-Line Tool (_______3_______1), hãy kết nối với máy chủ của bạn với tư cách là người dùng root, sau đó đưa ra lệnh mysql

$ mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 112813
Server version: 5.5.43-0ubuntu0.14.04.1 (Ubuntu)
[...]
mysql>

Nếu thành công, bạn sẽ thấy một số đầu ra về kết nối MySQL của mình và hướng xuống dấu nhắc mysql

Ghi chú. Trong trường hợp bạn không thể kết nối trực tiếp với máy chủ với tư cách là người dùng root trước khi kết nối với mysql, bạn có thể chỉ định người dùng mà bạn muốn kết nối bằng cách thêm cờ

$ mysql --user=username
7

$ mysql --user=username

Cấp đặc quyền

Bây giờ bạn đang ở dấu nhắc

$ mysql --user=username
1, bạn chỉ cần đưa ra lệnh
$ mysql --user=username
9 với các tùy chọn cần thiết để áp dụng các quyền thích hợp

Các loại đặc quyền

Lệnh

$ mysql --user=username
9 có khả năng áp dụng nhiều loại đặc quyền, mọi thứ từ khả năng
mysql> GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
1 bảng và cơ sở dữ liệu, đọc hoặc viết
mysql> GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
2 và thậm chí cả máy chủ
mysql> GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
3. Có nhiều loại cờ và tùy chọn có sẵn cho lệnh, vì vậy bạn có thể muốn tự làm quen với những gì
$ mysql --user=username
9 thực sự có thể thực hiện bằng cách duyệt qua tài liệu chính thức

Đặc quyền dành riêng cho cơ sở dữ liệu

Trong hầu hết các trường hợp, bạn sẽ cấp đặc quyền cho người dùng MySQL dựa trên

mysql> GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
5 cụ thể mà tài khoản đó sẽ có quyền truy cập. Ví dụ, thông lệ phổ biến là mỗi MySQL
mysql> GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
5 duy nhất trên một máy chủ sẽ có một
mysql> GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
7 duy nhất được liên kết với nó, sao cho chỉ một
mysql> GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
7 duy nhất có quyền truy cập xác thực vào một
mysql> GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
5 duy nhất và ngược lại

Để

mysql> GRANT ALL PRIVILEGES ON books.authors  TO 'tolkien'@'localhost';
0 đặc quyền cho một
mysql> GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
7, cho phép người dùng đó toàn quyền kiểm soát một
mysql> GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';
5 cụ thể, hãy sử dụng cú pháp sau

mysql> GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';

Với lệnh đó, chúng tôi đã nói với MySQL để

  • $ mysql --user=username
    
    9
    mysql> GRANT ALL PRIVILEGES ON books.authors  TO 'tolkien'@'localhost';
    
    4 thuộc loại
    mysql> GRANT ALL PRIVILEGES ON books.authors  TO 'tolkien'@'localhost';
    
    5 (do đó tất nhiên là mọi thứ). Ghi chú. Hầu hết các bản cài đặt MySQL hiện đại không yêu cầu từ khóa
    mysql> GRANT ALL PRIVILEGES ON books.authors  TO 'tolkien'@'localhost';
    
    4 tùy chọn
  • Những đặc quyền này dành cho
    mysql> GRANT ALL PRIVILEGES ON books.authors  TO 'tolkien'@'localhost';
    
    7 và nó áp dụng cho tất cả các bảng của cơ sở dữ liệu đó, được biểu thị bằng
    mysql> GRANT ALL PRIVILEGES ON books.authors  TO 'tolkien'@'localhost';
    
    8 theo sau
  • Các đặc quyền này được gán cho
    mysql> GRANT ALL PRIVILEGES ON books.authors  TO 'tolkien'@'localhost';
    
    9 khi
    mysql> GRANT ALL PRIVILEGES ON books.authors  TO 'tolkien'@'localhost';
    
    9 đó được kết nối thông qua cục bộ, như được chỉ định bởi
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'tolkien'@'%';
    
    1. Để chỉ định bất kỳ máy chủ hợp lệ nào, hãy thay thế
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'tolkien'@'%';
    
    2 bằng
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'tolkien'@'%';
    
    3

Thay vì cung cấp tất cả các đặc quyền cho toàn bộ cơ sở dữ liệu, có lẽ bạn chỉ muốn cung cấp cho người dùng

mysql> GRANT ALL PRIVILEGES ON *.* TO 'tolkien'@'%';
4 khả năng đọc dữ liệu (_______31_______5) từ bảng
mysql> GRANT ALL PRIVILEGES ON *.* TO 'tolkien'@'%';
6 của cơ sở dữ liệu
mysql> GRANT ALL PRIVILEGES ON *.* TO 'tolkien'@'%';
7. Điều đó sẽ dễ dàng được thực hiện như vậy

mysql> GRANT ALL PRIVILEGES ON books.authors  TO 'tolkien'@'localhost';

Tạo một siêu người dùng khác

Mặc dù không đặc biệt an toàn, nhưng trong một số trường hợp, bạn có thể muốn tạo một 'siêu người dùng' khác, có TẤT CẢ các đặc quyền trên TẤT CẢ các cơ sở dữ liệu trên máy chủ. Điều đó có thể được thực hiện tương tự như trên, nhưng bằng cách thay thế

mysql> GRANT ALL PRIVILEGES ON books.authors  TO 'tolkien'@'localhost';
7 bằng dấu hoa thị ký tự đại diện

mysql> GRANT ALL PRIVILEGES ON *.* TO 'tolkien'@'%';

Bây giờ

mysql> GRANT ALL PRIVILEGES ON *.* TO 'tolkien'@'%';
4 có các đặc quyền giống như tài khoản root mặc định, hãy cẩn thận

Lưu thay đổi của bạn

Là bước cuối cùng sau bất kỳ cập nhật nào đối với các đặc quyền của người dùng, hãy đảm bảo lưu các thay đổi bằng cách đưa ra lệnh

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
1 từ dấu nhắc mysql

Làm cách nào để xem đặc quyền của người dùng?

Truy vấn Chế độ xem đặc quyền DBA/NGƯỜI DÙNG . CHỌN * TỪ DBA_SYS_PRIVS ; . GRANTEE là tên, vai trò hoặc người dùng được chỉ định đặc quyền.

Làm cách nào để kiểm tra các đặc quyền của bảng trong MySQL?

Hướng dẫn này cho biết cách kiểm tra đặc quyền của người dùng trên máy chủ MySQL. .
Truy cập vào dòng lệnh/thiết bị đầu cuối. MySQL được cài đặt và cấu hình. .
Xác định tên người dùng và máy chủ lưu trữ chính xác cho bước tiếp theo. .
Không có tên máy chủ, lệnh sẽ kiểm tra máy chủ mặc định '%'. .
Đầu ra in một bảng với tất cả các đặc quyền truy cập

Làm cách nào tôi có thể thấy vai trò của người dùng trong MySQL?

TỔNG CẤP HIỂN THỊ MySQL .
Đầu tiên, chỉ định tên của tài khoản người dùng hoặc vai trò mà bạn muốn hiển thị các đặc quyền đã được cấp trước đó cho tài khoản hoặc vai trò người dùng sau từ khóa FOR. .
Thứ hai, sử dụng mệnh đề USING để kiểm tra các đặc quyền liên quan đến vai trò của người dùng

Các đặc quyền được lưu trữ trong MySQL ở đâu?

Thông tin về đặc quyền của tài khoản được lưu trữ trong bảng cấp trong cơ sở dữ liệu hệ thống mysql . Để biết mô tả về cấu trúc và nội dung của các bảng này, hãy xem Phần 6. 2. 3, “Bảng tài trợ”.