消除MySQL的无效特权

我有特权在mysql.*有关用户,数据库和表不再存在的表。 有没有简单的方法来查找和删除这些孤儿条目?

这真的不是简单的方法。 但是,通过组合一组外部连接,可以将特权表与information_schema表进行比较,从而获得所需的一些内容。 比较任何特权表和架构后,您可以比较用户表和特权表,find没有任何权限的用户。

具有挑战性的部分是,大多数特权表允许您使用%字符作为通配符。 所以你可能会允许database_foo_%这将映射到database_foo_1database_foo_blah等。 鉴于通配符function,我怀疑是否有完全自动化的设置。 或者至less如果有一个,它将非常复杂。

例如,这将查找哪里有一个没有权限的数据库(模式)或一组不直接匹配数据库的权限。

 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;