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;