从 MySQL 中消除无效权限

从 MySQL 中消除无效权限

mysql.*我在不再存在的用户、数据库和表的表中保留了一些权限。有没有简单的方法可以找到并删除这些孤立条目?

答案1

这确实不是简单的方法。但是,您可以通过编写一组外部连接来获得一些您想要的东西,这些外部连接将权限表与 information_schema 表进行比较。将任何权限表与架构进行比较后,您可以将用户表与权限表进行比较,以查找没有任何权限的用户。

具有挑战性的部分是,大多数权限表都允许您使用%字符作为通配符。因此,您可以允许database_foo_%映射到的字符database_foo_1database_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;

相关内容