Устранить недействительные привилегии из 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;
Другие вопросы по тегам