Como obter uma lista de contas de usuário usando a linha de comando no MySQL?

1348

Estou usando o utilitário de linha de comando MySQL e posso navegar através de um banco de dados. Agora eu preciso ver uma lista de contas de usuário. Como posso fazer isso?

Eu estou usando a versão MySQL 5.4.1.

burntsugar
fonte
@Mustapha Por que o título mudou? As respostas aqui são SQL que você pode executar de qualquer lugar, não apenas uma linha de comando. E o que essa tag adiciona à pergunta?
Rup
O objetivo da minha edição era manter a consistência entre o título e a descrição, mas acho que você tem um bom argumento. Faça a sua edição Mr. @Rup
Mustapha Hadid

Respostas:

1848

Use esta consulta:

SELECT User FROM mysql.user;

O que produzirá uma tabela como esta:

+-------+
| User  |
+-------+
| root  |
+-------+
| user2 |
+-------+

Como Matthew Scharley aponta nos comentários desta resposta , você pode agrupar pela Usercoluna se quiser ver apenas nomes de usuários exclusivos.

desconhecidos
fonte
47
Eu acho que pode ser necessário agrupar Usertambém, para obter apenas valores de usuário únicos, pois há uma linha separada para cada entrada user@ host.
Matthew Scharley 16/07/2009
5
Como encontrar a mesma informação sem consulta sql?
Divyanshu Das
8
@ barrycarter é DELETE FROM mysql.user;melhor ter WHERE user='someuser' and host='somehost';Se o fizer DELETE FROM mysql.user;, todos os usuários se foram. Logins após o próximo mysql reiniciam ou FLUSH PRIVILEGES;eliminam usuários da memória. Aqui está um exemplo de uma das minhas postagens sobre como agir com DELETE FROM mysql.userresponsabilidade: dba.stackexchange.com/questions/4614/…
RolandoMySQLDBA
3
@GeoffreySHOW GRANTS FOR 'user'@'host';
fancyPants
5
em vez de agrupar, você pode simplesmente usar a DISTINCTpalavra-chave:SELECT DISTINCT user FROM mysql.user;
user2683246
445

Acho esse formato o mais útil, pois inclui o campo host, que é importante no MySQL para distinguir entre os registros do usuário.

select User,Host from mysql.user;
spkane
fonte
1
Apenas curioso. Quando isso hostentrará em jogo ao trabalhar com bancos de dados mysql? [Mysql Noob]
Prabhakar Undurthi 12/03/16
7
O @Packer hostentra em ação quando você está se conectando a partir de um servidor diferente. É possível conceder acesso diferente a 'packer'@'example.com'e'packer'@'google.com'
Ray Baxter
118

Uma conta de usuário inclui o nome de usuário e o acesso no nível do host.

Portanto, essa é a consulta que fornece todas as contas de usuário

SELECT CONCAT(QUOTE(user),'@',QUOTE(host)) UserAccount FROM mysql.user;
RolandoMySQLDBA
fonte
7
Isso é basicamente o mesmo que a resposta de spkane . Qual é o benefício de concatenar as colunas de usuário e host?
Iain Samuel McLean Elder
8
Um exemplo: o user@hostformato é usado para definir senhas. Omitir o host do SET PASSWORDcomando produz um erro. SET PASSWORD FOR wordpressuser = PASSWORD('...');produz o erro ERROR 1133 (42000): Can't find any matching row in the user table. Inclua o host e ele funciona. SET PASSWORD FOR wordpressuser@localhost = PASSWORD('...');produz Query OK, 0 rows affected (0.00 sec).
Iain Samuel McLean Elder
3
Melhor resposta, seja lá o que os opositores possam reclamar. A única coisa que eu mudaria era anexar um ORDER BY usera ele.
sjas
48

para evitar repetições de usuários quando eles se conectam de origem diferente:

select distinct User from mysql.user;
Nicolas Manzini
fonte
31

O MySQL armazena as informações do usuário em seu próprio banco de dados. O nome do banco de dados é MySQL. Dentro desse banco de dados, as informações do usuário estão em uma tabela, um conjunto de dados, nomeado user. Se você deseja ver quais usuários estão configurados na tabela de usuários do MySQL, execute o seguinte comando:

SELECT User, Host FROM mysql.user;

+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| root             | localhost |
| root             | demohost  |
| root             | 127.0.0.1 |
| debian-sys-maint | localhost |
|                  | %         |
+------------------+-----------+
VPK
fonte
30

Se você está se referindo aos usuários reais do MySQL, tente:

select User from mysql.user;
Jesse Vogt
fonte
23
SELECT * FROM mysql.user;

É uma mesa grande, portanto, você pode querer ser mais seletivo em quais campos escolher.

Etzeitet
fonte
2
Eu tenho 3 usuários root com hosts diferentes. localhost, 127.0.0.1E ::1. Qual devo manter e o que devo excluir? Obrigado!
emotality 28/01
4
Se você não deseja que as pessoas se conectem via rede, o padrão antigo era excluir todas elas. Hoje em dia, porém, parece que a recomendação é manter os hosts locais, pois eles não são acessíveis pela rede; isso significa que você deve manter todos eles.
trysis
18

Entre no mysql como root e digite a seguinte consulta

select User from mysql.user;

+------+
| User |
+------+
| amon |
| root |
| root |
+------+
sandip divekar
fonte
Eu diria +1 por mencionar o login como raiz. Tentei sem fazer isso e não funcionou;)
leenephi
Você precisa conceder privilégios ao usuário1 para exibir a lista de usuários. Sem usuário root, você receberá um erro. Então, primeiro forneça os privilégios. Efetue login como usuário root e digite command GRANT SELECT ON mysql.user TO 'user1'@'localhost'; agora entre como user1 e digite command select User from mysql.user; Você verá a lista de usuários exibida. :) +1 Enjoy
sandip divekar
15

A tabela mysql.db é possivelmente mais importante na determinação dos direitos do usuário. Eu acho que uma entrada nele é criada se você mencionar uma tabela no comando GRANT. No meu caso, a tabela mysql.users não mostrou permissões para um usuário quando obviamente conseguiu conectar e selecionar, etc.

mysql> select * from mysql.db;
mysql> select * from db;
+---------------+-----------------+--------+-------------+-------------+-------------+--------
| Host          | Db              | User   | Select_priv | Insert_priv | Update_priv | Del...
Brad Dre
fonte
1
Na minha opinião, o importante é o que os usuários podem fazer no banco de dados. Portanto, "SHOW GRANTS" é bastante útil, pois mostra quem tem permissão para fazer o que.
Developer Marius Žilėnas
12

Eu uso isso para classificar os usuários, para que os hosts permitidos sejam mais fáceis de identificar:

mysql> SELECT User,Host FROM mysql.user ORDER BY User,Host;
Tobias Holm
fonte
11

Peter e Jesse estão corretos, mas apenas certifique-se de selecionar primeiro o banco de dados mysql.

use mysql;

select User from mysql.user;

isso deve fazer o seu truque

Armin Nehzat
fonte
22
Não é necessário, use mysql;no caso de você colocar a tabela no banco de dados mysql, como você fez. Você pode apenasselect User from mysql.user;
vitaLee 26/03
5
Adicionando use mysql;é apenas para que você pode usar select User from user;em vez select User from mysql.user;desde que é geralmente uma consulta uma vez, não há necessidade de usar o banco de dados mysql
Dan
1
depois, use mysqlse você tivesse usado, select user from user;isso poderia ter sido algo, mas você está usando mysql.user, o que torna o uso use mysqlno início desnecessário.
13136
10

Isso exibe a lista de usuários únicos:

SELECT DISTINCT User FROM mysql.user;
Nikhil Chavda
fonte
5
$>  mysql -u root -p -e 'Select user from mysql.user' > allUsersOnDatabase.txt

A execução deste comando no prompt do linux solicitará primeiro a senha do usuário root do mysql; ao fornecer a senha correta, imprimirá todos os usuários do banco de dados no arquivo de texto.

Mian Asbat Ahmad
fonte
3

Achei o seu mais útil, pois fornece informações adicionais sobre os privilégios DML e DDL

SELECT user, Select_priv, Insert_priv , Update_priv, Delete_priv, 
       Create_priv, Drop_priv, Shutdown_priv, Create_user_priv 
FROM mysql.user;
Alper t. Turker
fonte
0
SELECT User FROM mysql.user;

use a consulta acima para obter usuários do Mysql

Arun Karnawat
fonte