Устранить недействительные привилегии из MySQL
У меня есть привилегии, плавающие в 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;