我试图从MySQL DB中撤消特定表中的select权限。数据库级别限制正在运行,但表级别不是。
当我写“show grants”这就是我得到的:
| 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'
正如你在上面我所看到的,我想
在'test123'数据库的'names123'表中撤销rachit用户的select权限,但是SELECT正在运行。
我已附上下面的截图,以便更好地理解。 https://ibb.co/GRtjXX7
如果你GRANT ALL ON test123.* TO 'rachit'@'localhost'
你不能通过运行REVOKE ALL ON test123.* TO 'rachit'@'localhost'
删除一个表。
一些DBMS系统特别是DENY
选项,专门拒绝访问特定的表,但这不是mysql的情况。
您可以考虑编写脚本并逐个访问每个表
讨论:
如果它不是特别GRANTed
,它不能是REVOKEd
。这是不那么用户友好的Grant / Revoke语法和实现的不幸副作用。
你可以使用SELECT
对抗information_schema.TABLES
来自动发现所有其他表。并让SELECT
建立所需的GRANTs
。
可能的解决方法:
解决特定问题的另一种方法是将一个表移动到另一个数据库。然后GRANT
对该数据库的不同权限。