Comment obtenir une liste de comptes d'utilisateurs en utilisant la ligne de commande dans MySQL?


1348

J'utilise l'utilitaire de ligne de commande MySQL et je peux naviguer dans une base de données. Maintenant, je dois voir une liste de comptes d'utilisateurs. Comment puis-je faire ceci?

J'utilise la version MySQL 5.4.1.


@Mustapha Pourquoi le titre change-t-il? Ces réponses sont SQL que vous pouvez exécuter de n'importe où, pas seulement une ligne de commande. Et qu'est-ce que cette balise ajoute à la question?
Rup

Le but de mon montage était de maintenir la cohérence entre le titre et la description, mais je pense que vous avez un bon point. Faites votre montage Mr. @Rup
Mustapha Hadid

Réponses:


1848

Utilisez cette requête:

SELECT User FROM mysql.user;

Qui affichera un tableau comme celui-ci:

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

Comme le souligne Matthew Scharley dans les commentaires sur cette réponse , vous pouvez regrouper par Usercolonne si vous souhaitez uniquement voir des noms d'utilisateur uniques.


47
Je pense qu'il peut être nécessaire de grouper Useraussi, pour obtenir uniquement des valeurs utilisateur uniques, car il y a une ligne distincte pour chaque entrée user@ host.
Matthew Scharley

5
Comment trouver les mêmes informations sans requête SQL ??
Divyanshu Das

8
@barrycarter a DELETE FROM mysql.user;mieux WHERE user='someuser' and host='somehost';Si vous le faites DELETE FROM mysql.user;, tous les utilisateurs ont disparu. Les connexions après le prochain redémarrage de mysql ou FLUSH PRIVILEGES;éliminer les utilisateurs de la mémoire. Voici un exemple de l'un de mes messages sur la façon de faire de manière DELETE FROM mysql.userresponsable: dba.stackexchange.com/questions/4614/…
RolandoMySQLDBA

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

5
au lieu de regrouper, vous pouvez simplement utiliser le DISTINCTmot-clé:SELECT DISTINCT user FROM mysql.user;
user2683246

445

Je trouve ce format le plus utile car il inclut le champ hôte qui est important dans MySQL pour distinguer les enregistrements d'utilisateurs.

select User,Host from mysql.user;

1
Juste curieux. Quand cela hostentrera-t-il en jeu lorsque vous travaillerez avec des bases de données mysql? [Mysql Noob]
Prabhakar Undurthi

7
@Packer hostentre en jeu lorsque vous vous connectez à partir d'un autre serveur. Il est possible d'accorder un accès différent à 'packer'@'example.com'et'packer'@'google.com'
Ray Baxter

118

Un compte utilisateur comprend le nom d'utilisateur et l'accès au niveau de l'hôte.

Par conséquent, c'est la requête qui donne à tous les comptes d'utilisateurs

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

7
C'est fondamentalement la même chose que la réponse de spkane . Quel est l'avantage de concaténer les colonnes utilisateur et hôte?
Iain Samuel McLean Elder

8
Un exemple: le user@hostformat est utilisé pour définir les mots de passe. Omettre l'hôte de la SET PASSWORDcommande génère une erreur. SET PASSWORD FOR wordpressuser = PASSWORD('...');produit l'erreur ERROR 1133 (42000): Can't find any matching row in the user table. Incluez l'hôte et cela fonctionne. SET PASSWORD FOR wordpressuser@localhost = PASSWORD('...');produit Query OK, 0 rows affected (0.00 sec).
Iain Samuel McLean Elder

3
Meilleure réponse, quoi que les opposants puissent se plaindre. La seule chose que je changerais était d'y ajouter un ORDER BY user.
sjas

48

pour éviter les répétitions d'utilisateurs lorsqu'ils se connectent d'origine différente:

select distinct User from mysql.user;

31

MySQL stocke les informations utilisateur dans sa propre base de données. Le nom de la base de données est MySQL. À l'intérieur de cette base de données, les informations utilisateur se trouvent dans une table, un ensemble de données, nommé user. Si vous souhaitez voir quels utilisateurs sont configurés dans la table d'utilisateurs MySQL, exécutez la commande suivante:

SELECT User, Host FROM mysql.user;

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

30

Si vous faites référence aux utilisateurs réels de MySQL, essayez:

select User from mysql.user;

23
SELECT * FROM mysql.user;

C'est un grand tableau, vous voudrez peut-être être plus sélectif sur les champs que vous choisissez.


2
J'ai eu 3 utilisateurs root avec différents hôtes. localhost, 127.0.0.1et ::1. Laquelle dois-je conserver et que dois-je supprimer? Merci!
emotality

4
Si vous ne voulez pas que les gens se connectent via le réseau, l'ancienne norme consistait à supprimer tout cela. De nos jours, cependant, il semble que la recommandation est de conserver les hôtes locaux, car ils ne sont de toute façon pas accessibles sur le réseau; cela signifie que vous devriez plutôt tous les conserver .
trysis

18

Connectez-vous à mysql en tant que root et tapez la requête suivante

select User from mysql.user;

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

Je dirais +1 pour avoir mentionné la connexion en tant que root. J'ai essayé sans le faire et cela n'a pas fonctionné;)
leenephi

Vous devez donner des privilèges à user1 pour afficher la liste des utilisateurs. Sans utilisateur root, vous obtiendrez une erreur. Alors, accordez d'abord les privilèges. Connectez-vous en tant qu'utilisateur root puis tapez commande GRANT SELECT ON mysql.user TO 'user1'@'localhost'; maintenant connectez- vous en tant qu'utilisateur1 et tapez commande select User from mysql.user; Vous verrez la liste des utilisateurs affichée. :) +1 Profitez
sandip divekar

15

La table mysql.db est peut-être plus importante pour déterminer les droits des utilisateurs. Je pense qu'une entrée est créée si vous mentionnez une table dans la commande GRANT. Dans mon cas, la table mysql.users n'a montré aucune autorisation pour un utilisateur quand il était évidemment capable de se connecter et de sélectionner, etc.

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

1
À mon avis, ce qui est important, c'est ce que les utilisateurs sont autorisés à faire sur la base de données. "SHOW GRANTS" est donc très utile car il montre qui est autorisé à faire quoi.
Développeur Marius Žilėnas

12

J'utilise ceci pour trier les utilisateurs, donc les hôtes autorisés sont plus faciles à repérer:

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

11

Peter et Jesse ont raison, mais assurez-vous d'abord de sélectionner la base de données mysql.

use mysql;

select User from mysql.user;

ça devrait faire l'affaire


22
Il n'est pas nécessaire que vous étendiez use mysql;la table à la base de données mysql comme vous l'avez fait. Vous pouvez simplementselect User from mysql.user;
vitaLee

5
L'ajout use mysql;est juste pour que vous puissiez utiliser à la select User from user;place, select User from mysql.user;car il s'agit généralement d'une requête unique, il n'est pas nécessaire d'utiliser la base de données mysql
Dan

1
après use mysqlsi vous en aviez utilisé, select user from user;cela aurait pu être quelque chose, mais à la place vous utilisez mysql.user, ce qui rend l'utilisation use mysqlau début inutile.
Sнаđошƒаӽ

10

Cela affiche la liste des utilisateurs uniques:

SELECT DISTINCT User FROM mysql.user;

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

L'exécution de cette commande sur l'invite linux demandera d'abord le mot de passe de l'utilisateur root mysql, en fournissant un mot de passe correct, il imprimera tous les utilisateurs de la base de données dans le fichier texte.


3

J'ai trouvé le sien plus utile car il fournit des informations supplémentaires sur les privilèges DML et 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;

utiliser la requête ci-dessus pour obtenir les utilisateurs Mysql

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.