Como posso mostrar os privilégios do usuário no MySQL?

69

Eu sei que posso definir os privilégios do usuário da seguinte maneira simples:

grant all on [database name].[table name] to [user name]@[host name];

Mas como posso ver os privilégios existentes?

Eu preciso ver dados semelhantes aos que são usados ​​na concessão. Em outras palavras, quero saber que um determinado usuário tem um determinado acesso a uma determinada tabela de um determinado banco de dados de um determinado host.

Como posso conseguir?

romano
fonte

Respostas:

75

O comando SHOW GRANTS [FOR user]é o que você está procurando. Veja aqui para mais detalhes.

John Gardeniers
fonte
51

Aqui está a documentação do MySQL para SHOW GRANTS:

SHOW GRANTS [FOR user]

Esta instrução lista a instrução GRANT ou instruções que devem ser emitidas para duplicar os privilégios concedidos a uma conta de usuário do MySQL. A conta é nomeada usando o mesmo formato da declaração GRANT; por exemplo, 'jeffrey' @ 'localhost'. Se você especificar apenas a parte do nome de usuário do nome da conta, será usada uma parte do nome do host de '%'. Para obter informações adicionais sobre a especificação de nomes de contas, consulte a Seção 12.5.1.3, “Sintaxe de GRANT”.

mysql> SHOW GRANTS FOR 'root'@'localhost';
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+

Para listar os privilégios concedidos à conta que você está usando para se conectar ao servidor, você pode usar qualquer uma das seguintes instruções:

SHOW GRANTS;
SHOW GRANTS FOR CURRENT_USER;
SHOW GRANTS FOR CURRENT_USER();

A partir do MySQL 5.0.24, se SHOW GRANTS FOR CURRENT_USER (ou qualquer uma das sintaxes equivalentes) for usado no contexto DEFINER, como em um procedimento armazenado definido com o SQL SECURITY DEFINER), as concessões exibidas são as do definidor e não é o invocador.

SHOW GRANTS exibe apenas os privilégios concedidos explicitamente à conta nomeada. Outros privilégios podem estar disponíveis para a conta, mas eles não são exibidos. Por exemplo, se existir uma conta anônima, a conta nomeada poderá usar seus privilégios, mas o SHOW GRANTS não os exibirá.

SHOW GRANTS requer o privilégio SELECT para o banco de dados mysql.

radiante
fonte
SHOW GRANTS requires the SELECT privilege for the mysql system database, except to display privileges and roles for the current user.
Sandip Bhattacharya