Elimina privilégios inválidos do MySQL

1

Eu tenho privilégios flutuando nas tabelas mysql.* pertencentes a usuários, bancos de dados e tabelas que não existem mais. Existe uma maneira simples de encontrar e remover essas entradas órfãs?

    
por Brad Mace 25.07.2012 / 21:57

1 resposta

1

Este não é o caminho mais simples. Mas você pode obter um pouco do que deseja compondo um conjunto de junções externas que compara as tabelas de privilégio com as tabelas information_schema. Depois de comparar qualquer tabela de privilégios com o esquema, você poderia comparar a tabela de usuários com as tabelas de privilégios para localizar usuários sem privilégios.

A parte desafiadora é que a maioria das tabelas de privilégio permite usar o caractere % como curinga. Assim, você pode permitir database_foo_% , que seria mapeado para database_foo_1 , database_foo_blah e assim por diante. Dado o recurso de curinga, duvido que exista uma configuração totalmente automatizada. Ou, pelo menos, se houver, seria bastante complexo.

Por exemplo, isso irá procurar entradas onde há um banco de dados (esquema) sem privilégios ou um conjunto de privilégios que não correspondem diretamente a um banco de dados.

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;
    
por 25.07.2012 / 22:19