¿Cómo obtener una lista de cuentas de usuario usando la línea de comando en MySQL?

1348

Estoy usando la utilidad de línea de comandos MySQL y puedo navegar a través de una base de datos. Ahora necesito ver una lista de cuentas de usuario. ¿Cómo puedo hacer esto?

Estoy usando la versión MySQL 5.4.1.

azúcar quemada
fuente
@Mustapha ¿Por qué cambia el título? Estas respuestas aquí son SQL que puede ejecutar desde cualquier lugar, no solo desde una línea de comandos. ¿Y qué agrega esa etiqueta a la pregunta?
Rup
El propósito de mi edición era mantener la coherencia entre el título y la descripción, pero creo que tienes un buen punto. Haz tu edición Mr. @Rup
Mustapha Hadid

Respuestas:

1848

Use esta consulta:

SELECT User FROM mysql.user;

Lo que generará una tabla como esta:

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

Como Matthew Scharley señala en los comentarios sobre esta respuesta , puede agrupar por Usercolumna si solo desea ver nombres de usuario únicos.

desconocido
fuente
47
Creo que también puede ser necesario agrupar Userpara obtener valores de usuario únicos, ya que hay una fila separada para cada entrada user@ host.
Matthew Scharley
55
¿Cómo encontrar la misma información sin consulta SQL?
Divyanshu Das
8
@barrycarter DELETE FROM mysql.user;mejor tener WHERE user='someuser' and host='somehost';Si lo hace DELETE FROM mysql.user;, todos los usuarios se han ido. Inicia sesión después del siguiente reinicio de mysql o FLUSH PRIVILEGES;elimina usuarios de la memoria. Aquí hay un ejemplo de una de mis publicaciones sobre cómo hacer de manera DELETE FROM mysql.userresponsable: dba.stackexchange.com/questions/4614/…
RolandoMySQLDBA
3
@GeoffreySHOW GRANTS FOR 'user'@'host';
fancyPants
55
en lugar de agrupar, puede usar la DISTINCTpalabra clave:SELECT DISTINCT user FROM mysql.user;
user2683246
445

Considero que este formato es el más útil, ya que incluye el campo host que es importante en MySQL para distinguir entre registros de usuario.

select User,Host from mysql.user;
spkane
fuente
1
Sólo curioso. ¿Cuándo entrará esto hosten juego cuando trabaje con bases de datos mysql? [Mysql Noob]
Prabhakar Undurthi
77
@Packer the hostentra en juego cuando te conectas desde un servidor diferente. Es posible otorgar acceso diferente a 'packer'@'example.com'y'packer'@'google.com'
Ray Baxter
118

Una cuenta de usuario comprende el nombre de usuario y el acceso a nivel de host.

Por lo tanto, esta es la consulta que da todas las cuentas de usuario

SELECT CONCAT(QUOTE(user),'@',QUOTE(host)) UserAccount FROM mysql.user;
RolandoMySQLDBA
fuente
77
Esto es básicamente lo mismo que la respuesta de spkane . ¿Cuál es el beneficio de concatenar las columnas de usuario y host?
Iain Samuel McLean Élder
8
Un ejemplo: el user@hostformato se usa para configurar contraseñas. Omitir el host del SET PASSWORDcomando produce un error. SET PASSWORD FOR wordpressuser = PASSWORD('...');produce el error ERROR 1133 (42000): Can't find any matching row in the user table. Incluya el host y funciona. SET PASSWORD FOR wordpressuser@localhost = PASSWORD('...');produce Query OK, 0 rows affected (0.00 sec).
Iain Samuel McLean Élder
3
La mejor respuesta, cualquiera que sea la opinión de los detractores. Lo único que cambiaría era agregarle una ORDER BY user.
sjas
48

para evitar repeticiones de usuarios cuando se conectan desde un origen diferente:

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

MySQL almacena la información del usuario en su propia base de datos. El nombre de la base de datos es MySQL. Dentro de esa base de datos, la información del usuario está en una tabla, un conjunto de datos, llamado user. Si desea ver qué usuarios están configurados en la tabla de usuarios de MySQL, ejecute el siguiente comando:

SELECT User, Host FROM mysql.user;

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

Si se refiere a los usuarios reales de MySQL, intente:

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

Es una tabla grande, por lo que es posible que desee ser más selectivo en los campos que elija.

Etzeitet
fuente
2
Tengo 3 usuarios root con diferentes hosts. localhost, 127.0.0.1Y ::1. ¿Cuál debo conservar y qué debo eliminar? ¡Gracias!
emotality
44
Si no desea que las personas se conecten a través de la red, el estándar anterior era eliminar todo esto. Hoy en día, sin embargo, parece que la recomendación es mantener los localeshost, ya que de todos modos no son accesibles a través de la red; Esto significa que, en cambio, debe conservarlos todos.
trysis
18

Inicie sesión en mysql como root y escriba la siguiente consulta

select User from mysql.user;

+------+
| User |
+------+
| amon |
| root |
| root |
+------+
sandip divekar
fuente
Yo diría +1 por mencionar el inicio de sesión como root. Lo intenté sin hacerlo y no funcionó;)
leenephi
Debe otorgar privilegios al usuario1 para mostrar la lista de usuarios. Sin usuario root obtendrá error. Así que primero proporcione los privilegios. Inicie sesión como usuario root, luego escriba command GRANT SELECT ON mysql.user TO 'user1'@'localhost'; ahora inicie sesión como user1 y escriba command select User from mysql.user; Verá la lista de usuarios mostrada. :) +1 Disfruta
sandip divekar
15

La tabla mysql.db es posiblemente más importante para determinar los derechos del usuario. Creo que se crea una entrada si menciona una tabla en el comando GRANT. En mi caso, la tabla mysql.users no mostró permisos para un usuario cuando obviamente pudo conectarse y seleccionar, etc.

mysql> select * from mysql.db;
mysql> select * from db;
+---------------+-----------------+--------+-------------+-------------+-------------+--------
| Host          | Db              | User   | Select_priv | Insert_priv | Update_priv | Del...
Brad Dre
fuente
1
En mi opinión, lo importante es lo que los usuarios pueden hacer en la base de datos. Entonces "SHOW GRANTS" es bastante útil ya que muestra quién tiene permitido hacer qué.
Desarrollador Marius Žilėnas
12

Lo uso para ordenar a los usuarios, por lo que los hosts permitidos son más fáciles de detectar:

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

Peter y Jesse están en lo correcto, pero solo asegúrese de seleccionar primero la base de datos mysql.

use mysql;

select User from mysql.user;

eso debería hacer tu truco

Armin Nehzat
fuente
22
No es necesario use mysql;en caso de que alcance la tabla a la base de datos mysql como lo hizo. Puedes simplementeselect User from mysql.user;
vitaLee
55
Añadiendo use mysql;es sólo para que pueda utilizar select User from user;en su lugar select User from mysql.user;, ya que es por lo general una consulta una vez, no hay necesidad de usar la base de datos mysql
Dan
1
después use mysqlsi lo hubiera usado, select user from user;podría haber sido algo, pero en su lugar lo está usando mysql.user, lo que hace que el uso use mysqlal principio sea innecesario.
Sнаđошƒаӽ
10

Esto muestra la lista de usuarios únicos:

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

Ejecutar este comando en el indicador de Linux primero pedirá la contraseña del usuario root de mysql, al proporcionar la contraseña correcta imprimirá todos los usuarios de la base de datos en el archivo de texto.

Mian Asbat Ahmad
fuente
3

Encontré el suyo más útil ya que proporciona información adicional sobre los privilegios DML y 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
fuente
0
SELECT User FROM mysql.user;

use la consulta anterior para obtener usuarios de Mysql

Arun Karnawat
fuente