MySQL对单个表的覆盖权限

时间:2019-04-03 10:16:29

标签: mysql permissions

我有一个包含250个以上表的Mysql DB,我需要阻止单个用户在其中一个表上的删除权限。

我们已经尝试过使用Grant,但是该数据库具有删除权限,因此单个表的Grant查询不会生效,我仍然可以从该表中删除行。我做到了:

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'

但是为此用户设置了全局权限,包括该表的删除权限。

谢谢

1 个答案:

答案 0 :(得分:2)

我认为您需要使用REVOKE语句,因为您必须删除先前授予的权限:

REVOKE DELETE ON db.table FROM 'user'@'host';

更新

请参阅此Super User Q&A,如果在该表上没有该用户的特定授权要撤销,则应尝试删除GRANT ALL ON db.*并将授权分配给每个用户单个表,但特定表上的特定用户除外,该表仅被授予插入和更新的权限。

如果有250个表,则可以创建一个脚本,结合此SQL来获取用户创建的表的列表:

SELECT * from information_schema.tables 
WHERE table_schema not in ('information_schema', 'mysql', 'performance_schema')

和用户:

SELECT User FROM mysql.user;

使用所需的授权创建SQL字符串。