![从 MySQL 中消除无效权限](https://linux22.com/image/590989/%E4%BB%8E%20MySQL%20%E4%B8%AD%E6%B6%88%E9%99%A4%E6%97%A0%E6%95%88%E6%9D%83%E9%99%90.png)
mysql.*
我在不再存在的用户、数据库和表的表中保留了一些权限。有没有简单的方法可以找到并删除这些孤立条目?
答案1
这确实不是简单的方法。但是,您可以通过编写一组外部连接来获得一些您想要的东西,这些外部连接将权限表与 information_schema 表进行比较。将任何权限表与架构进行比较后,您可以将用户表与权限表进行比较,以查找没有任何权限的用户。
具有挑战性的部分是,大多数权限表都允许您使用%
字符作为通配符。因此,您可以允许database_foo_%
映射到的字符database_foo_1
,database_foo_blah
等等。考虑到通配符功能,我怀疑是否存在完全自动化的设置。或者至少如果有的话,它必须非常复杂。
例如,这将查找存在没有权限的数据库(模式)或一组与数据库不直接匹配的权限的条目。
select SCHEMA_NAME,Db
from
information_schema.SCHEMATA left join
mysql.db on
SCHEMATA.SCHEMA_NAME=db.Db
where Db is null
union
select SCHEMA_NAME,Db
from
information_schema.SCHEMATA right join
mysql.db on
SCHEMATA.SCHEMA_NAME=db.Db
where SCHEMA_NAME is null;