Bagaimana cara mendapatkan daftar akun pengguna menggunakan baris perintah di MySQL?

1348

Saya menggunakan utilitas baris perintah MySQL dan dapat menavigasi melalui database. Sekarang saya perlu melihat daftar akun pengguna. Bagaimana saya bisa melakukan ini?

Saya menggunakan versi MySQL 5.4.1.

burntsugar
sumber
@Mustapha Mengapa judulnya berubah? Jawaban di sini adalah SQL yang dapat Anda jalankan dari mana saja, bukan hanya baris perintah. Dan apa yang ditambahkan tag ke pertanyaan?
Rup
Tujuan edit saya adalah untuk menjaga konsistensi antara judul dan deskripsi, tetapi saya pikir Anda memiliki poin yang bagus. Buat edit Anda Tn. @Rup
Mustapha Hadid

Jawaban:

1848

Gunakan kueri ini:

SELECT User FROM mysql.user;

Yang akan menampilkan tabel seperti ini:

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

Seperti yang ditunjukkan Matthew Scharley dalam komentar pada jawaban ini , Anda dapat mengelompokkan berdasarkan Userkolom jika Anda hanya ingin melihat nama pengguna yang unik.

tidak diketahui
sumber
47
Saya pikir mungkin perlu untuk dikelompokkan Userjuga, untuk hanya mendapatkan nilai pengguna yang unik, karena ada baris terpisah untuk setiap entri user@ host.
Matthew Scharley
5
Bagaimana menemukan info yang sama tanpa kueri sql ??
Divyanshu Das
8
@barrycarter DELETE FROM mysql.user;lebih baik miliki. WHERE user='someuser' and host='somehost';Jika Anda melakukannya DELETE FROM mysql.user;, semua pengguna hilang. Login setelah mysql berikutnya restart atau FLUSH PRIVILEGES;menghilangkan pengguna dari memori. Berikut adalah contoh dari salah satu posting saya tentang melakukan secara DELETE FROM mysql.userbertanggung jawab: dba.stackexchange.com/questions/4614/…
RolandoMySQLDBA
3
@ GeoffreySHOW GRANTS FOR 'user'@'host';
fancyPants
5
alih-alih mengelompokkan Anda hanya dapat menggunakan DISTINCTkata kunci:SELECT DISTINCT user FROM mysql.user;
user2683246
445

Saya menemukan format ini yang paling berguna karena termasuk bidang host yang penting di MySQL untuk membedakan antara catatan pengguna.

select User,Host from mysql.user;
spkane
sumber
1
Hanya penasaran. Kapan ini hostmulai berperan saat bekerja dengan database mysql? [Mysql Noob]
Prabhakar Undurthi
7
@Packer hostikut bermain saat Anda terhubung dari server yang berbeda. Dimungkinkan untuk memberikan akses yang berbeda ke 'packer'@'example.com'dan'packer'@'google.com'
Ray Baxter
118

Akun pengguna terdiri atas nama pengguna dan akses tingkat host.

Oleh karena itu, ini adalah kueri yang memberikan semua akun pengguna

SELECT CONCAT(QUOTE(user),'@',QUOTE(host)) UserAccount FROM mysql.user;
RolandoMySQLDBA
sumber
7
Ini pada dasarnya sama dengan jawaban Spkane . Apa manfaat menggabungkan kolom pengguna dan host?
Iain Samuel McLean Elder
8
Salah satu contoh: user@hostformat digunakan untuk mengatur kata sandi. Menghilangkan host dari SET PASSWORDperintah menghasilkan kesalahan. SET PASSWORD FOR wordpressuser = PASSWORD('...');menghasilkan kesalahan ERROR 1133 (42000): Can't find any matching row in the user table. Sertakan host dan berfungsi. SET PASSWORD FOR wordpressuser@localhost = PASSWORD('...');menghasilkan Query OK, 0 rows affected (0.00 sec).
Iain Samuel McLean Penatua
3
Jawaban terbaik, apa pun yang mungkin dikeluhkan oleh penentang. Satu-satunya hal yang saya ubah adalah menambahkannya ORDER BY user.
sjas
48

untuk menghindari pengulangan pengguna ketika mereka terhubung dari asal yang berbeda:

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

MySQL menyimpan informasi pengguna dalam basis datanya sendiri. Nama databasenya adalah MySQL. Di dalam basis data itu, informasi pengguna ada dalam sebuah tabel, sebuah dataset, namanya user. Jika Anda ingin melihat apa yang diatur pengguna di tabel pengguna MySQL, jalankan perintah berikut:

SELECT User, Host FROM mysql.user;

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

Jika Anda merujuk pada pengguna MySQL yang sebenarnya, coba:

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

Ini meja besar sehingga Anda mungkin ingin lebih selektif dalam bidang apa yang Anda pilih.

Etzeitet
sumber
2
Saya mendapat 3 pengguna root dengan host yang berbeda. localhost, 127.0.0.1dan ::1. Yang mana yang harus saya simpan dan apa yang harus saya hapus? Terima kasih!
emotalitas
4
Jika Anda tidak ingin orang terhubung melalui jaringan, standar lama adalah menghapus semua ini. Namun, saat ini, tampaknya rekomendasinya adalah untuk menjaga localhost, karena mereka tidak dapat diakses melalui jaringan; ini berarti Anda harus menyimpan semuanya.
trysis
18

Login ke mysql sebagai root dan ketik query berikut

select User from mysql.user;

+------+
| User |
+------+
| amon |
| root |
| root |
+------+
sandip divekar
sumber
Saya akan mengatakan +1 untuk menyebutkan login sebagai root. Saya mencoba tanpa melakukannya dan itu tidak berhasil;)
leenephi
Anda perlu memberikan hak kepada pengguna1 untuk menampilkan daftar pengguna. Tanpa pengguna root Anda akan mendapatkan kesalahan. Jadi, pertama-tama berikan hak istimewa. Masuk sebagai pengguna root lalu ketik perintah GRANT SELECT ON mysql.user TO 'user1'@'localhost'; sekarang login sebagai user1 dan ketik perintah select User from mysql.user; Anda akan melihat daftar pengguna ditampilkan. :) +1 Nikmati
sandip divekar
15

Tabel mysql.db mungkin lebih penting dalam menentukan hak pengguna. Saya pikir sebuah entri di dalamnya dibuat jika Anda menyebutkan tabel dalam perintah GRANT. Dalam kasus saya, tabel mysql.users tidak menunjukkan izin untuk pengguna saat jelas dapat terhubung dan memilih, dll.

mysql> select * from mysql.db;
mysql> select * from db;
+---------------+-----------------+--------+-------------+-------------+-------------+--------
| Host          | Db              | User   | Select_priv | Insert_priv | Update_priv | Del...
Brad Dre
sumber
1
Dalam pandangan saya apa yang penting adalah apa yang boleh dilakukan pengguna pada database. Jadi "SHOW GRANTS" cukup berguna karena menunjukkan siapa yang boleh melakukan apa.
Pengembang Marius Žilėnas
12

Saya menggunakan ini untuk mengurutkan pengguna, sehingga host yang diizinkan lebih mudah dikenali:

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

Peter dan Jesse benar tetapi pastikan Anda memilih DB mysql terlebih dahulu.

use mysql;

select User from mysql.user;

yang seharusnya melakukan trik Anda

Armin Nehzat
sumber
22
Tidak perlu untuk use mysql;berjaga-jaga jika Anda lingkup tabel ke database mysql seperti yang Anda lakukan. Anda bisaselect User from mysql.user;
vitaLee
5
Menambahkan use mysql;hanya agar Anda dapat menggunakannya select User from user;sebagai gantinya select User from mysql.user;karena biasanya merupakan permintaan satu kali, tidak perlu menggunakan mysql db
Dan
1
setelah use mysqljika Anda telah menggunakan lebih select user from user;dari itu bisa menjadi sesuatu, tetapi sebaliknya Anda menggunakan mysql.user, yang membuat penggunaan use mysqldi awal tidak perlu.
Sнаđошƒаӽ
10

Ini menampilkan daftar pengguna unik:

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

Menjalankan perintah ini pada linux prompt pertama-tama akan meminta kata sandi dari pengguna root mysql, pada memberikan kata sandi yang benar itu akan mencetak semua pengguna database ke file teks.

Mian Asbat Ahmad
sumber
3

Saya menemukan satu lagi berguna karena memberikan informasi tambahan tentang hak istimewa DML dan 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
sumber
0
SELECT User FROM mysql.user;

gunakan kueri di atas untuk mendapatkan Pengguna Mysql

Arun Karnawat
sumber