Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySql:Cấp các tùy chọn chỉ đọc?

Nó phụ thuộc vào cách bạn xác định "tất cả đã đọc".

"Đọc" từ các bảng và dạng xem là SELECT đặc ân. Nếu đó là ý của bạn khi nói "tất cả đã đọc" thì có:

GRANT SELECT ON *.* TO 'username'@'host_or_wildcard' IDENTIFIED BY 'password';

Tuy nhiên, nghe có vẻ như ý bạn là khả năng "nhìn thấy" mọi thứ, "nhìn nhưng không chạm". Vì vậy, đây là các kiểu đọc khác mà bạn nghĩ đến:

"Đọc" định nghĩa về chế độ xem là SHOW VIEW đặc quyền.

"Đọc" danh sách các truy vấn hiện đang được thực thi bởi những người dùng khác là PROCESS đặc quyền.

"Đọc" trạng thái sao chép hiện tại là REPLICATION CLIENT đặc quyền.

Lưu ý rằng bất kỳ hoặc tất cả những điều này có thể tiết lộ nhiều thông tin hơn bạn định tiết lộ, tùy thuộc vào bản chất của người dùng được đề cập.

Nếu đó là cách đọc bạn muốn thực hiện, bạn có thể kết hợp bất kỳ nội dung nào trong số đó (hoặc bất kỳ nội dung nào khác trong số các đặc quyền có sẵn ) trong một GRANT tuyên bố.

GRANT SELECT, SHOW VIEW, PROCESS, REPLICATION CLIENT ON *.* TO ...

Tuy nhiên, không có đặc quyền duy nhất nào cấp cho một số tập hợp con các đặc quyền khác, đó là những gì có vẻ như bạn đang yêu cầu.

Nếu bạn đang làm mọi việc theo cách thủ công và đang tìm cách dễ dàng hơn để thực hiện việc này mà không cần nhớ chính xác khoản trợ cấp mà bạn thường cấp cho một lớp người dùng nhất định, bạn có thể tra cứu bảng sao kê để tạo lại khoản trợ cấp của người dùng tương đương và thay đổi nó xung quanh để tạo người dùng mới với các đặc quyền tương tự:

mysql> SHOW GRANTS FOR 'not_leet'@'localhost';
+------------------------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                                      |
+------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, REPLICATION CLIENT ON *.* TO 'not_leet'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' |
+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

Thay đổi 'not_leet' và 'localhost' để khớp với người dùng mới mà bạn muốn thêm, cùng với mật khẩu, sẽ dẫn đến GRANT có thể sử dụng lại để tạo người dùng mới.

Ngoài ra, nếu bạn muốn một thao tác duy nhất để thiết lập và cấp một tập hợp đặc quyền giới hạn cho người dùng và có thể loại bỏ bất kỳ đặc quyền nào chưa được kế thừa, điều đó có thể được thực hiện bằng cách tạo một thủ tục được lưu trữ đóng gói mọi thứ bạn muốn làm. Trong phần nội dung của thủ tục, bạn sẽ xây dựng GRANT câu lệnh với SQL động và / hoặc thao tác trực tiếp với chính các bảng cấp.

Trong câu hỏi gần đây này về Quản trị viên cơ sở dữ liệu , người đăng muốn khả năng cho người dùng không có đặc quyền sửa đổi người dùng khác, điều này tất nhiên không phải là điều bình thường có thể làm được - người dùng có thể sửa đổi người dùng khác, theo định nghĩa, không phải là người dùng không có đặc quyền - tuy nhiên - - các thủ tục được lưu trữ cung cấp một giải pháp tốt trong trường hợp đó, vì chúng chạy với ngữ cảnh bảo mật của DEFINER của chúng người dùng, cho phép bất kỳ ai có EXECUTE đặc quyền về thủ tục để tạm thời đảm nhận các đặc quyền đã leo thang để cho phép họ làm những việc cụ thể mà thủ tục hoàn thành.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - mất bao lâu để tạo một chỉ mục?

  2. Loại dữ liệu để lưu trữ Kinh độ / Vĩ độ trong Mysql

  3. NOW () Ví dụ - MySQL

  4. Sự khác biệt giữa CHỌN VÀO VÀ CHÈN VÀO trong MySQL

  5. Cấu hình Tomcat sử dụng DBCP