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?
mysql
permissions
Adam Matan
fonte
fonte
ERROR 1146 (42S02): Table 'common_schema.sql_show_grants' doesn't exist
information_schema.user_privileges
?EDITAR:
Como mencionado por Shlomi Noach:
fonte
information_schema.user_privileges
lista apenas privilégios no nível do usuário, comoSUPER
,RELOAD
etc. Também lista subvenções DML gerais comoSELECT
. Ele não lista privilégios específicos de banco de dados, específicos de tabela, específicos de coluna e específicos de rotina. Lá na frente, a concessãoGRANT SELECT ON mydb.* TO myuser@localhost
se não mostrar eminformation_schema.user_privileges
. Acommon_schema
solução apresentada acima agrega dados deuser_privileges
e outras tabelas para fornecer uma visão completa.Este fragmento de shell do Linux faz um loop em todos os usuários do MySQL e faz um SHOW GRANTS para cada um:
Funciona melhor se você pode 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.
fonte
mysql --defaults-file=/auth/root-mysql.cnf --batch --skip-column-names --execute "SELECT User, Host from mysql.user" | while read user host; do echo "SHOW GRANTS FOR '${user}'@'${host}';"; done | mysql --defaults-file=/auth/root-mysql.cnf --batch | sed 's/^Grants for/-- Grants for/'
select * from mysql.user;
Pode dar a você a lista de usuários e privilégios atribuídos a cada um deles,
mysql.user
embora exija acesso à tabela e oroot
usuário a possua.fonte
mysql.db
. Privilégios em tabelas específicas estão dentromysql.tables_priv
e assim por diante. Portanto, não é tão simples.select * from mysql.user
no crackstation.net e veja a saída unificada.Um liner (mude
-uroot
para-u$USER_NAME
para uso com outro usuário) em uma festa do Unix (por causa dos backticks):ou sem backticks e com senha embutida (o espaço na frente do comando o exclui do histórico do Bash no Ubuntu):
No Windows:
fonte
Se você pode executar as seguintes instruções SELECT sem erro:
fique à vontade para usar o seguinte código (abaixo), escrito na sintaxe .sql.
Projetei essa consulta na tentativa de recriar 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 a vinculação de senha de usuário, mas como atualizamos frequentemente senhas, isso não estava no escopo deste projeto.
É um prazer responder / verificar quaisquer dúvidas ou preocupações
fonte
Isso lhe dará uma visão melhor ...
fonte
O comando
SHOW GRANTS [FOR user]
pode mostrar qualquer usuário que você desejar. Veja aqui para mais detalhes.fonte
Conforme mencionado nesta resposta , você pode executar o seguinte conjunto de comandos para listar os privilégios específicos de banco de dados, de tabela, de coluna e de 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.
fonte
Se você estiver administrando bancos de dados com frequência, provavelmente desejará manter privilégios restritos. Você pode usar um procedimento armazenado para executar rapidamente uma verificação. Este exemplo de trabalho no 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 para reorganizar as colunas e adicionando algumas ordens para organizar melhor a saída.
Usando um login raiz:
Você pode alterar o procedimento para verificar a tabela mysql.user.
Uso, usando um login raiz:
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 sequência de hosts separados por vírgulas para que apenas um conjunto de '' seja usado:
Você também pode tornar a coluna variável incluindo outro parâmetro no procedimento e chamá-lo com ShowUnknownHosts (usuário, 'usuário1, usuário2'); por exemplo.
fonte