如何在MySQL中设置表级特权

时间:2019-02-12 19:29:09

标签: mysql mariadb privileges

我正在尝试从MySQL数据库的特定表中撤消选择特权。 数据库级别限制有效,而表级别无效。

当我写“表演资助”时 这就是我得到的:

| GRANT USAGE ON *.* TO 'rachit'@'localhost' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' |
| GRANT ALL PRIVILEGES ON `test123`.* TO 'rachit'@'localhost'                                                   |
| GRANT INSERT, UPDATE, DELETE ON `test123`.`names123` TO 'rachit'@'localhost' 

如您所见,我想

从rachit用户撤消'test123'数据库的'names123'表上的选择特权,但是SELECT起作用。

为了方便理解,我在下面附上了屏幕截图。 https://ibb.co/GRtjXX7

2 个答案:

答案 0 :(得分:0)

如果您GRANT ALL ON test123.* TO 'rachit'@'localhost',则无法通过运行REVOKE ALL ON test123.* TO 'rachit'@'localhost'来删除一个表。

某些DBMS系统的特定DENY选项专门拒绝访问特定表,但mysql并非如此。

您可以考虑编写脚本并逐个授予对每个表的访问权限

答案 1 :(得分:0)

讨论:

如果不是专门为GRANTed,则不能为REVOKEd。这是不太友好的Grant / Revoke语法和实施的不幸副作用。

您可以对SELECT使用information_schema.TABLES来自动发现所有其他表。并让SELECT构建所需的GRANTs

可能的解决方法:

解决特定问题的另一种方法是将一个表移动到另一个数据库。然后GRANT对该数据库有不同的权限。