Come ottenere un elenco di account utente utilizzando la riga di comando in MySQL?


1348

Sto usando l'utilità della riga di comando di MySQL e posso navigare attraverso un database. Ora ho bisogno di vedere un elenco di account utente. Come posso fare questo?

Sto usando la versione di MySQL 5.4.1.


@Mustapha Perché il titolo cambia? Queste risposte qui sono SQL che puoi eseguire da qualsiasi luogo, non solo una riga di comando. E cosa aggiunge quel tag alla domanda?
Rup,

Lo scopo della mia modifica era di mantenere la coerenza tra il titolo e la descrizione, ma penso che tu abbia un buon punto. Apporta la tua modifica Mr. @Rup
Mustapha Hadid

Risposte:


1848

Usa questa query:

SELECT User FROM mysql.user;

Che produrrà una tabella come questa:

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

Come sottolinea Matthew Scharley nei commenti su questa risposta , puoi raggruppare per Usercolonna se desideri vedere solo nomi utente univoci.


47
Penso che potrebbe essere necessario raggruppare Useranche per ottenere valori utente univoci, poiché esiste una riga separata per ogni voce user@ host.
Matthew Scharley,

5
Come trovare le stesse informazioni senza query sql ??
Divyanshu Das,

8
@barrycarter DELETE FROM mysql.user;better have WHERE user='someuser' and host='somehost';Se lo fai DELETE FROM mysql.user;, tutti gli utenti se ne sono andati. Gli accessi dopo il successivo mysql si riavviano o FLUSH PRIVILEGES;eliminano gli utenti dalla memoria. Ecco un esempio di uno dei miei post sul fare DELETE FROM mysql.userresponsabilmente: dba.stackexchange.com/questions/4614/…
RolandoMySQLDBA

3
@GeoffreySHOW GRANTS FOR 'user'@'host';
fancyPants

5
invece di raggruppare puoi semplicemente usare la DISTINCTparola chiave:SELECT DISTINCT user FROM mysql.user;
user2683246

445

Trovo questo formato il più utile in quanto include il campo host che è importante in MySQL per distinguere tra i record degli utenti.

select User,Host from mysql.user;

1
Solo curioso. Quando hostentrerà in gioco quando si lavora con i database mysql? [Mysql Noob]
Prabhakar Undurthi,

7
@Packer hostentra in gioco quando ci si connette da un altro server. È possibile concedere un accesso diverso a 'packer'@'example.com'e'packer'@'google.com'
Ray Baxter il

118

Un account utente comprende il nome utente e l'accesso a livello di host.

Pertanto, questa è la query che fornisce tutti gli account utente

SELECT CONCAT(QUOTE(user),'@',QUOTE(host)) UserAccount FROM mysql.user;

7
Questo è fondamentalmente lo stesso della risposta di Spkane . Qual è il vantaggio di concatenare le colonne utente e host?
Iain Samuel McLean Elder,

8
Un esempio: il user@hostformato viene utilizzato per impostare le password. L'omissione dell'host dal SET PASSWORDcomando produce un errore. SET PASSWORD FOR wordpressuser = PASSWORD('...');produce l'errore ERROR 1133 (42000): Can't find any matching row in the user table. Includi l'host e funziona. SET PASSWORD FOR wordpressuser@localhost = PASSWORD('...');produce Query OK, 0 rows affected (0.00 sec).
Iain Samuel McLean Elder,

3
La migliore risposta, qualunque cosa possano lamentarsi gli oppositori. L'unica cosa che avrei cambiato sarebbe stata l'aggiunta di un ORDER BY user.
sjas,

48

per evitare ripetizioni degli utenti quando si connettono da origini diverse:

select distinct User from mysql.user;

31

MySQL memorizza le informazioni dell'utente nel proprio database. Il nome del database è MySQL. All'interno di quel database, le informazioni dell'utente si trovano in una tabella, un set di dati, denominato user. Se vuoi vedere quali utenti sono impostati nella tabella utenti MySQL, esegui il seguente comando:

SELECT User, Host FROM mysql.user;

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

30

Se ti riferisci agli utenti MySQL attuali, prova:

select User from mysql.user;

23
SELECT * FROM mysql.user;

È un grande tavolo, quindi potresti voler essere più selettivo su quali campi scegli.


2
Ho 3 utenti root con host diversi. localhost, 127.0.0.1E ::1. Quale devo conservare e cosa devo cancellare? Grazie!
emotività

4
Se non si desidera che le persone si connettano tramite la rete, il vecchio standard era quello di eliminare tutti questi. Al giorno d'oggi, tuttavia, sembra che la raccomandazione sia quella di mantenere quelli localhost, poiché non sono comunque accessibili sulla rete; questo significa che dovresti invece tenerli tutti.
trysis

18

Accedi a mysql come root e digita la seguente query

select User from mysql.user;

+------+
| User |
+------+
| amon |
| root |
| root |
+------+

Direi +1 per menzionare l'accesso come root. Ho provato senza farlo e non ha funzionato;)
leenephi il

È necessario assegnare i privilegi a user1 per visualizzare l'elenco utenti. Senza l'utente root verrà visualizzato l'errore. Quindi, innanzitutto fornire i privilegi. Accedi come utente root quindi digita il comando GRANT SELECT ON mysql.user TO 'user1'@'localhost'; ora accedi come user1 e digita comando select User from mysql.user; Verrà visualizzato l'elenco utenti. :) +1 Divertiti
sandip divekar

15

La tabella mysql.db è forse più importante nel determinare i diritti dell'utente. Penso che venga creata una voce se si menziona una tabella nel comando GRANT. Nel mio caso la tabella mysql.users non mostrava autorizzazioni per un utente quando ovviamente era in grado di connettersi e selezionare, ecc.

mysql> select * from mysql.db;
mysql> select * from db;
+---------------+-----------------+--------+-------------+-------------+-------------+--------
| Host          | Db              | User   | Select_priv | Insert_priv | Update_priv | Del...

1
A mio avviso, ciò che è importante è ciò che gli utenti sono autorizzati a fare sul database. Quindi "SHOW GRANTS" è abbastanza utile poiché mostra a chi è permesso fare cosa.
Sviluppatore Marius Žilėnas,

12

Lo uso per ordinare gli utenti, quindi gli host consentiti sono più facili da individuare:

mysql> SELECT User,Host FROM mysql.user ORDER BY User,Host;

11

Peter e Jesse sono corretti, ma assicurati di selezionare prima il database mysql.

use mysql;

select User from mysql.user;

quello dovrebbe fare il tuo trucco


22
Non è necessario use mysql;nel caso in cui la tabella venga portata nel database mysql come hai fatto tu. Puoi soloselect User from mysql.user;
vitaLee,

5
L'aggiunta use mysql;è solo per poter utilizzare select User from user;invece select User from mysql.user;poiché di solito è una query singola, non è necessario utilizzare mysql db
Dan

1
dopo use mysqlse avessi usato select user from user;di quello avrebbe potuto essere qualcosa, ma invece stai usando mysql.user, il che rende l'uso use mysqlall'inizio inutile.
Sнаđошƒаӽ,

10

Viene visualizzato un elenco di utenti unici:

SELECT DISTINCT User FROM mysql.user;

5
$>  mysql -u root -p -e 'Select user from mysql.user' > allUsersOnDatabase.txt

L'esecuzione di questo comando sul prompt di Linux richiederà prima la password dell'utente root mysql, fornendo una password corretta stamperà tutti gli utenti del database nel file di testo.


3

Ho trovato il suo più utile in quanto fornisce ulteriori informazioni sui privilegi 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;

0
SELECT User FROM mysql.user;

utilizzare la query sopra per ottenere utenti Mysql

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.