Назад | Перейти на главную страницу

Устранение недопустимых привилегий из MySQL

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