Rất phổ biến khi thấy một tuyên bố cấp phép như sau cho phép truy cập vào tất cả các bảng trong một cơ sở dữ liệu nhất định.
GRANT SELECT, SHOW VIEW
ON mydatabase.*
TO myreaduser@myhost IDENTIFIED BY 'somepassword';
FLUSH PRIVILEGES;
Nơi mydatabase
, myreaduser
, myhoost
và somepassword
là các biến thích hợp cho cơ sở dữ liệu của bạn. Lưu ý rằng FLUSH PRIVILEGES
lệnh đặt lại các đặc quyền của MySQL và bạn sẽ không thể sử dụng các quyền của người dùng mới cho đến khi nó được chạy.
Một người dùng như vậy sẽ có thể đọc và truy cập tất cả các bảng trong cơ sở dữ liệu. Đối với ví dụ này, chúng tôi sẽ sử dụng cơ sở dữ liệu boatio có 3 bảng:boats
, trips
và users
.
mysql> show tables;
+------------------+
| Tables_in_boatio |
+------------------+
| boats |
| trips |
| users |
+------------------+
3 rows in set (0.00 sec)
Nếu chúng tôi muốn tạo một người dùng chỉ có quyền truy cập vào trips
bảng, chúng tôi chỉ cần thay thế biểu tượng ký tự đại diện (*) đại diện cho tất cả các bảng, bằng các bảng cụ thể mà bạn muốn (trong trường hợp này là:trips
).
GRANT SELECT, SHOW VIEW
ON boatio.trips
TO myreaduser@localhost IDENTIFIED BY 'somepassword';
FLUSH PRIVILEGES;
Bây giờ chúng ta có thể đăng nhập với tư cách người dùng mới và chạy các bảng hiển thị để thấy rằng nó chỉ có quyền truy cập vào các trips
bảng chứ không phải hai bảng khác. Người dùng mới này chỉ đơn giản là không biết các bảng khác thậm chí còn tồn tại.
$ mysql -umyreaduser boatio -psomepassword
mysql> show tables;
+------------------+
| Tables_in_boatio |
+------------------+
| trips |
+------------------+
1 row in set (0.00 sec)
Để cấp cho người dùng quyền truy cập vào nhiều bảng hơn, chỉ cần chạy lại cùng một GRANT
câu lệnh với các tên bảng bổ sung. Ví dụ:phần sau sẽ cấp quyền truy cập vào trips
và users
bảng chứ không phải boats
.
GRANT SELECT, SHOW VIEW ON boatio.trips TO myreaduser@localhost IDENTIFIED BY 'somepassword';
GRANT SELECT, SHOW VIEW ON boatio.users TO myreaduser@localhost IDENTIFIED BY 'somepassword';
FLUSH PRIVILEGES;
Và bằng chứng:người dùng hiện có quyền truy cập vào trips
và users
bảng chứ không phải boats
.
$ mysql -umyreaduser boatio -psomepassword
mysql> show tables;
+------------------+
| Tables_in_boatio |
+------------------+
| trips |
| users |
+------------------+
2 rows in set (0.00 sec)