Tôi có một người dùng, người mà tôi muốn cấp tất cả quyền ĐỌC trên giản đồ db.
Một cách là:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
Có cách nào để nhóm tất cả các thao tác đọc trong quyền không?
Tôi có một người dùng, người mà tôi muốn cấp tất cả quyền ĐỌC trên giản đồ db.
Một cách là:
GRANT SELECT, SHOW_VIEW ON test.* TO 'readuser'@'%';
Có cách nào để nhóm tất cả các thao tác đọc trong quyền không?
Câu trả lời:
Nếu có bất kỳ đặc quyền duy nhất nào là viết tắt của TẤT CẢ các hoạt động ĐỌC trên cơ sở dữ liệu.
Nó phụ thuộc vào cách bạn định nghĩa "tất cả đã đọc".
"Đọc" từ các bảng và chế độ xem là SELECT
đặc quyền. Nếu đó là những gì bạn có nghĩa là "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à những kiểu đọc khác mà bạn nghĩ đến:
"Đọc" định nghĩa của các khung nhìn là một SHOW VIEW
đặc ân.
"Đọc" danh sách các truy vấn hiện đang thực hiện của người dùng khác là PROCESS
đặc quyền.
"Đọc" trạng thái sao chép hiện tại là một 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à bài đọc bạn muốn thực hiện, bạn có thể kết hợp bất kỳ quyền nào trong số đó (hoặc bất kỳ đặc quyền nào khác ) trong một GRANT
câu lệnh duy nhất .
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 thực hiện 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 nhóm người dùng nhất định, bạn có thể tra cứu báo cáo để tạo lại các 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 not_leet@localhost |
+------------------------------------------------------------------------------------------------------------------------------------+
| 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' để phù hợ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 một GRANT
câu lệnh 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 tập hợp đặc quyền giới hạn cho người dùng và có thể xóa bất kỳ đặc quyền nào không đượ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 bằng 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 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, thì không. một 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
người dùng của họ , cho phép bất kỳ ai có EXECUTE
đặc quyền trên quy trình tạm thời giả định các đặc quyền đã được nâng cấp để cho phép họ làm những việc cụ thể thủ tục hoàn thành.
GRANT SELECT ON *.* TO 'user'@'localhost' IDENTIFIED BY 'password';
Điều này sẽ tạo một người dùng có SELECT
đặc quyền cho tất cả cơ sở dữ liệu bao gồm cả Chế độ xem.
Các quyền khác nhau mà bạn có thể cấp cho người dùng là
ALL PRIVILEGES- This would allow a MySQL user all access to a designated database (or if no database is selected, across the system)
CREATE- allows them to create new tables or databases
DROP- allows them to them to delete tables or databases
DELETE- allows them to delete rows from tables
INSERT- allows them to insert rows into tables
SELECT- allows them to use the Select command to read through databases
UPDATE- allow them to update table rows
GRANT OPTION- allows them to grant or remove other users' privileges
Để cung cấp cho một người dùng cụ thể quyền, bạn có thể sử dụng khung này:
GRANT [type of permission] ON [database name].[table name] TO ‘[username]’@'localhost’;
Tôi tìm thấy này bài viết rất hữu ích
Hướng dẫn từng bước tôi tìm thấy ở đây .
Để tạo tài khoản người dùng cơ sở dữ liệu chỉ đọc cho MySQL
Tại lời nhắc UNIX, hãy chạy chương trình dòng lệnh MySQL và đăng nhập với tư cách quản trị viên bằng cách nhập lệnh sau:
mysql -u root -p
Nhập mật khẩu cho tài khoản gốc. Tại dấu nhắc mysql, hãy thực hiện một trong các bước sau:
Để cấp cho người dùng quyền truy cập vào cơ sở dữ liệu từ bất kỳ máy chủ nào, hãy nhập lệnh sau:
grant select on database_name.* to 'read-only_user_name'@'%' identified by 'password';
Nếu bộ sưu tập sẽ được cài đặt trên cùng một máy chủ với cơ sở dữ liệu, hãy nhập lệnh sau:
grant select on database_name.* to 'read-only_user_name' identified by 'password';
Lệnh này chỉ cấp cho người dùng quyền truy cập chỉ đọc vào cơ sở dữ liệu từ máy chủ cục bộ. Nếu bạn biết tên máy chủ hoặc địa chỉ IP của máy chủ mà bộ thu thập sẽ được cài đặt, hãy nhập lệnh sau:
grant select on database_name.* to 'read-only_user_name'@'host_name or IP_address' identified by 'password';
Tên máy chủ phải có thể phân giải được bằng DNS hoặc bằng tệp máy chủ cục bộ. Tại dấu nhắc mysql, nhập lệnh sau:
flush privileges;
Gõ quit
.
Sau đây là danh sách các lệnh mẫu và thông báo xác nhận:
mysql> grant select on dbname.* to 'readonlyuser'@'%' identified
by 'pogo$23';
Query OK, 0 rows affected (0.11 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Ngay cả người dùng đã có câu trả lời và @Michael - sqlbot đã bao gồm hầu hết các điểm rất tốt trong bài đăng của mình nhưng thiếu một điểm, vì vậy chỉ cố gắng che đi.
Nếu bạn muốn cung cấp quyền đọc cho một người dùng đơn giản (Không phải loại quản trị viên) -
GRANT SELECT, EXECUTE ON DB_NAME.* TO 'user'@'localhost' IDENTIFIED BY 'PASSWORD';
Lưu ý: Ở đây cần có EXECUTE để người dùng có thể đọc dữ liệu nếu có một thủ tục được lưu trữ tạo ra một báo cáo (có một vài câu lệnh select).
Thay thế localhost bằng IP cụ thể mà từ đó người dùng sẽ kết nối với DB.
Quyền Đọc Bổ sung là-
Nếu bạn muốn dạng xem chỉ được đọc sau khi cấp quyền đọc, bạn có thể sử dụng ALGORITHM = TEMPTABLE trong định nghĩa dạng xem DDL.
Lưu ý đối với MySQL 8 thì khác
Bạn cần thực hiện theo hai bước:
CREATE USER 'readonly_user'@'localhost' IDENTIFIED BY 'some_strong_password';
GRANT SELECT, SHOW VIEW ON *.* TO 'readonly_user'@'localhost';
flush privileges;
SHOW VIEW
, khôngSHOW_VIEW
, nhưng bạn không cần phải cấp quyền này cho người dùng trừ khi bạn muốn họ có thểSHOW CREATE VIEW
xem ... họ có thể chọn từ các chế độ xem vớiSELECT
đặc quyền duy nhất . Bạn có nghĩa là gì khi "nhóm tất cả các hoạt động đọc trong cấp"?