Como conhecer todos os usuários que podem acessar um banco de dados (MySQL)?

19

Como conhecer todos os usuários que podem acessar um banco de dados?

user79483
fonte

Respostas:

14

Conecte-se à instância do mysql como um usuário administrador (geralmente como root) e dê o seguinte comando ...

select user from mysql.db where db='DB_NAME';
user79644
fonte
Eu apenas executei isso em um MariaDB ao vivo (fork do MySQL) e ele retornou 2 linhas em branco.
Chris S
11
Qual é o nome do seu banco de dados? você precisa substituir "DB_NAME" pelo nome do seu banco de dados.
user79644
A execução select user from mysql.dbsem qualificação retorna 2 linhas em branco também.
Chris S
Não tenho certeza de quais são as diferenças entre o MariaDB e o MySQL, mas essa consulta é executada conforme o esperado em uma instalação padrão do MySQL 5.
FVR
Isso é apenas parte da resposta ao OP. O campo mysql.user.db pode conter caracteres curinga que correspondem a vários bancos de dados. o uso da consulta proposta não os atende. dev.mysql.com/doc/refman/5.0/en/grant.html
user4514
10

A resposta de user79644 fornece aos usuários privilégios no nível do banco de dados, mas sentirá falta dos usuários com apenas privilégios no nível da tabela, no nível da coluna ou no nível do procedimento. Para encontrar todos eles, use as seguintes instruções:

SELECT user,host FROM db WHERE db='name';
SELECT user,host FROM tables_priv WHERE db='name';
SELECT user,host FROM columns_priv WHERE db='name';
SELECT user,host FROM procs_priv WHERE db='name';

Pelo menos no MySQL 5.5, parece que ter privilégios no nível da coluna implica que você possui privilégios no nível da tabela. Ter privilégios no nível da tabela não implica que você tenha privilégios no nível do banco de dados. Não tenho certeza sobre os privilégios no nível do procedimento.

Scott Duckworth
fonte
11
Isso é apenas parte da resposta. O campo mysql.user.db pode conter caracteres curinga que correspondem a vários bancos de dados. o uso da consulta proposta não os atende. dev.mysql.com/doc/refman/5.0/en/grant.html
user4514
Qual banco de dados? Estou recebendo #ERROR 1046 (3D000): No database selected
user124384
@ user124384 O que não é dito na resposta é que você deve usar o mysqlbanco de dados. É aí que todos os dados usados ​​pelo MySQL são armazenados. Dê o comando USE mysql;de adicionar o nome do banco de dados aos nomes da tabela, como FROM mysql.dbouFROM mysql.tables_priv
Gypsy Spellweaver
8
# current users that access the db
mysql> show processlist;
+-----+------+-----------+------+---------+------+-------+------------------+
| Id  | User | Host      | db   | Command | Time | State | Info             |
+-----+------+-----------+------+---------+------+-------+------------------+
| 214 | root | localhost | NULL | Query   |    0 | NULL  | show processlist |
+-----+------+-----------+------+---------+------+-------+------------------+

# who can access what at anytime and his privilege level
mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+

# what privileges are available
mysql> show privileges;
silviud
fonte
2
show concessões mostra apenas as concessões do usuário atual (conectado)
nl-x
como root, você também pode fazer concessões para
Rowan Hawkins
2

Você deve ter em mente que o MySQLGRANT para bancos de dados pode conter caracteres curinga . Isso deve ser levado em consideração usando LIKEa consulta:

SELECT user,host FROM db WHERE 'name' LIKE db;
SELECT user,host FROM tables_priv WHERE db='name';
SELECT user,host FROM columns_priv WHERE db='name';
SELECT user,host FROM procs_priv WHERE db='name';
user4514
fonte