【发布时间】:2019-08-24 20:06:38
【问题描述】:
我有一个包含 250 多个表的 Mysql 数据库,我需要阻止单个用户对其中一个表的删除权限。
我们已经尝试过授权,但是这个数据库有删除权限,所以单个表的授权查询没有生效,我仍然可以从这个表中删除行。我做到了:
GRANT SELECT, INSERT, UPDATE ON db.table TO 'user'@'host';
全局权限:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER ON `db`.* TO 'user'@'host'
有没有办法覆盖单个表的权限,或者我们必须删除全局权限并为每个表中的用户设置权限? 也许某种方式可以为除一个之外的所有 (*) 设置全局权限,以便第二次授权生效?
还尝试了@kiks73 帖子:
REVOKE DELETE ON db.table FROM 'user'@'host';
获取:
ERROR 1147 (42000): There is no such grant defined for user 'user' on host 'host' on table 'table'
但是有这个用户的全局权限集,包括这个表的删除权限。
谢谢
【问题讨论】:
-
不幸的是,MySQL 不能拒绝访问,它只知道(累积)授权。参见例如MySQL grant all privileges to database except one table(8 年后仍然有效),您还可以在那里找到允许您自动生成授权的脚本。
标签: mysql permissions