Cấp quyền cho lượt xem, từ chối chọn trên bảng


9

Tôi có một người dùng MySQL và tôi muốn nó CHỈ xem các lượt xem tôi muốn chứ không phải bất kỳ bảng nào khác trong cơ sở dữ liệu. Tôi đã cấp quyền cho người dùng này chỉ trên một số chế độ xem như sau:

GRANT SHOW VIEW ON `myDatabase`.`awesome_view` TO 'thisUser'@'%'

Nếu tôi làm một show grants;tuyên bố, tôi chỉ có thể thấy quyền này như mong đợi. Tuy nhiên, tôi muốn người dùng này truy vấn CHỈ các chế độ xem chứ không phải các bảng có liên quan đến các chế độ xem này, nhưng tôi không thể tìm ra cách để làm điều này. Có vẻ như là nếu tôi muốn người dùng thực hiện lựa chọn trên màn hình, thì lựa chọn đó cũng phải được cấp cho bảng, hoặc tôi sai?

Nếu tôi từ chối selectcâu lệnh trong phần còn lại của các bảng và trong dòng lệnh tôi cố gắng thực hiện một lựa chọn, tôi đã nhận được như sau:

SELECT * FROM myDatabase.fordibenForYouTable;
ERROR 1142 (42000): SELECT command denied to user 'thisUser'@'localhost' for table 'fordibenForYouTable'

Đó thực sự là những gì tôi muốn, nhưng tôi cũng bị từ chối nếu tôi chọn dữ liệu xem.

Có cách nào tôi có thể cung cấp cho người dùng chỉ các chế độ xem chứ không phải các bảng không?

Câu trả lời:


6

Bạn sẽ phải coi khung cảnh như một cái bàn. Thông tin_schema đã làm

Nếu bạn chạy

SELECT table_name FROM information_schema.tables
WHERE engine IS NULL;

bạn có được tất cả các quan điểm.

Chỉ cần cấp CHỌN trên chế độ xem cho người dùng như sau

GRANT SELECT ON `myDatabase`.`fordibenForYouTable` TO 'thisUser'@'localhost' ;

Khi bạn thực hiện việc này, bạn sẽ có quyền truy cập CHỌN vào bảng.

Để chắc chắn, hãy chạy SHOW GRANTS FOR 'thisUser'@'localhost';

Bạn cũng có thể thấy quyền truy cập cấp bảng nào được cấp cho 'thisUser'@'localhost'

SELECT * FROM mysql.tables_priv
WHERE user='thisUser' and host='localhost'\G

Bạn cũng có thể xem những gì người dùng có quyền truy cập cấp bảng myDatabase.fordibenForYouTable

SELECT * FROM mysql.tables_priv
WHERE db='myDatabase' and table_name='fordibenForYouTable'\G

HÃY THỬ MỘT LẦN !!!


Này, bạn đã làm nó! Cảm ơn! Tôi không thể tìm ra giải pháp cho riêng mình! Cảm ơn rất nhiều!
Metafaniel

5

Tôi biết điều này đã cũ nhưng đây là điều đã giải quyết vấn đề này cho tôi ...

Câu trả lời là với cú pháp "SQL AN NINH".

định nghĩa chế độ xem ban đầu của tôi có SQL AN NINH được đặt thành "HÓA ĐƠN". Điều này có nghĩa là người dùng bị buộc phải có quyền chọn trên cả khung nhìn và bảng.

Khi tôi thay đổi SQL AN NINH thành "DEFINER", tôi chỉ có thể cấp cho người dùng quyền chọn trên chế độ xem.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.