¿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.


@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.


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;

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;

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;

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 |
|                  | %         |
+------------------+-----------+

30

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

select User from mysql.user;

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.


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 |
+------+

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...

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;

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


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;

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.


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;

0
SELECT User FROM mysql.user;

use la consulta anterior para obtener usuarios de Mysql

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.