Encontrei a visão geral contida em este artigo ainda mais útil do que a própria documentação do MySQL para descrever o quadro geral de como os privilégios do MySQL são concedidos ou negados.
A essência do artigo de visão geral é que os privilégios são controlados por uma série de tabelas de permissões cada vez mais refinadas no
mysql
banco de dados:mysql.user
, mysql.db
, mysql.host
, mysql.tables_priv
, mysql.columns_priv
, mysql.procs_priv
. A regra geral é que um valor "Y" para um privilégio em uma tabela mais refinada anula um valor "N" em uma tabela mais refinada. Portanto, a estratégia recomendada é começar negando a maioria dos privilégios no user
table (que fornece o controle mais grosseiro) e, em seguida, faça apenas as substituições específicas desejadas nas tabelas mais refinadas. Em particular, há um privilégio chamado SHOW_DATABASES que é determinado pelo
Show_db_priv
coluna no mysql.user
tabela; você vai querer definir isso como "N" para o usuário em questão (e como descrito acima, você pode querer definir a maioria das outras permissões na tabela de usuários para "N" também) e, em seguida, conceder apenas os privilégios que o usuário realmente precisa no mysql.db
ou mysql.tables_priv
tabela ou o que for apropriado para o seu caso particular.