У меня есть привилегии, плавающие в mysql.*
таблицы, относящиеся к пользователям, базам данных и таблицам, которых больше нет. Есть ли простой способ найти и удалить эти потерянные записи?
Это действительно не самый простой способ. Но вы можете получить кое-что из того, что хотите, составив набор внешних соединений, которые будут сравнивать таблицы привилегий с таблицами 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;