考虑具有全局数据库访问权限的用户:
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY PASSWORD 'xxx' WITH GRANT OPTION
由于遗留问题和涉及的数据库数量,我想REVOKE
从该用户那里获得一小部分数据库的许可,而不要管其余部分。当然,这不起作用:
REVOKE ALL PRIVILEGES ON mydatabase.* FROM 'myuser'@'%';
ERROR 1141 (42000): There is no such grant defined for user 'myuser' on host '%'
我明白为什么会这样,因为访问是全局的,但是 MySQL 有我可以使用的排除机制吗?
如果没有,任何人都可以指向一个脚本,我可以在其中提取所有数据库名称以使授权更细化吗?将全局拨款分解为单独的每个数据库拨款的陷阱是什么?
正确,MySQL 没有特权否定。如果用户有特权,
*.*
那么你必须撤销他们的全局特权,并专门为你希望他们访问的模式分配特权。您可以使用以下任一 SQL 查询获取模式列表:
或者