O MySQL SHOW GRANTS
mostra as permissões do usuário atual.
Existe uma maneira de fazer login como root e mostrar as permissões de todos os usuários?
O MySQL SHOW GRANTS
mostra as permissões do usuário atual.
Existe uma maneira de fazer login como root e mostrar as permissões de todos os usuários?
EDITAR:
Como mencionado por Shlomi Noach:
Nada embutido. Porém, você tem duas opções:
Use
common_schema
a visualização sql_show_grants do . Por exemplo, você pode consultar:Ou você pode consultar usuários específicos, por exemplo:
Para instalar
common_schema
, siga as instruções aqui .Isenção de responsabilidade: sou o autor desta ferramenta.
Use o Percona Toolkit
pt-show-grants
, por exemplo:Em ambos os casos você pode pedir o
GRANT
comando ou o comandoREVOKE
(oposto).O primeiro caso requer que você instale um esquema, o último requer que você instale scripts PERL + dependências.
Este fragmento de shell do Linux faz um loop sobre todos os usuários do MySQL e faz um SHOW GRANTS para cada um:
Funciona melhor se você puder se conectar ao MySQL sem uma senha.
A saída é formatada para que possa ser executada em um shell MySQL. Cuidado: A saída também contém as permissões e a senha do usuário root do MySQL! Remova essas linhas se você não quiser que o usuário root do MySQL seja alterado.
Um liner (mude
-uroot
para-u$USER_NAME
uso com outro usuário) em um bash Unix (por causa dos backticks):ou sem backticks e com senha inline (espaço na frente do comando o exclui do histórico do Bash no Ubuntu):
No Windows:
select * from mysql.user;
Pode fornecer lista de usuários e privilégios atribuídos a cada um deles,
mysql.user
mas requer acesso à tabela eroot
o usuário o possui.Se você puder executar as seguintes instruções SELECT sem erros:
então sinta-se à vontade para usar o seguinte código (abaixo), escrito em sintaxe .sql.
Projetei essa consulta em uma tentativa de reconstruir as instruções GRANT para todas as permissões existentes (para manutenção frequente durante a migração do banco de dados). Existem alguns problemas a serem resolvidos, como vinculação de senha de usuário, mas como frequentemente atualizamos as senhas, isso não estava no escopo deste projeto.
Feliz em responder/verificar quaisquer dúvidas ou preocupações
Assim você terá uma visão melhor...
Conforme mencionado nesta resposta , você pode executar o seguinte conjunto de comandos para listar os privilégios específicos do banco de dados, específicos da tabela, específicos da coluna e específicos da rotina de todos os usuários. Observe que você precisa executar isso no shell, não no prompt de comando do MySQL.
A vantagem dessa abordagem é que você não precisa instalar software adicional.
O comando
SHOW GRANTS [FOR user]
pode mostrar qualquer usuário que você quiser. Veja aqui para mais detalhes.Se você estiver administrando bancos de dados com frequência, provavelmente desejará manter privilégios restritos. Você pode usar um procedimento armazenado para executar uma verificação rapidamente. Este exemplo funciona em mariadb pode precisar de um ajuste para funcionar com a versão padrão do mysql.
Usando a resposta de Mansur Ali com um pequeno ajuste, reordenando as colunas e adicionando alguns pedidos para organizar melhor a saída.
Usando um login root:
Você pode alterar o procedimento para verificar a tabela mysql.user.
Uso, usando um login root:
Eu usei o mysql workbench no Ubuntu para executar a parte do procedimento de criação desta resposta.
Como um aparte e um pouco fora do tópico aqui, você também pode ter um procedimento para mostrar hosts ou usuários desconhecidos. Um exemplo para hosts desconhecidos:
Nota de uso: Forneça uma string de hosts separados por vírgulas para que apenas um conjunto de '' seja usado:
Você também pode tornar a variável de coluna incluindo outro parâmetro no procedimento e chamá-lo com ShowUnknownHosts(user,'user1,user2'); por exemplo.