MySQL'deki komut satırını kullanarak kullanıcı hesaplarının listesini nasıl alabilirim?


1348

MySQL komut satırı yardımcı programını kullanıyorum ve bir veritabanında gezinebilirsiniz. Şimdi kullanıcı hesaplarının bir listesini görmem gerekiyor. Bunu nasıl yapabilirim?

MySQL sürümünü kullanıyorum 5.4.1.


@Mustapha Başlık neden değişiyor? Bu cevaplar sadece bir komut satırı değil, her yerden çalıştırabileceğiniz SQL'dir. Ve bu etiket soruya ne ekliyor?
Rup

Düzenlememin amacı, başlık ve açıklama arasında tutarlılığı sağlamaktı, ancak bence iyi bir noktaya sahipsiniz. Düzenlemenizi yapın Mr. @Rup
Mustapha Hadid

Yanıtlar:


1848

Bu sorguyu kullan:

SELECT User FROM mysql.user;

Hangi böyle bir tablo çıktı:

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

Matthew Scharley'in bu yanıttaki yorumlarda belirttiğiUser gibi, yalnızca benzersiz kullanıcı adlarını görmek istiyorsanız sütuna göre gruplayabilirsiniz .


47
UserHer user@ hostgirişi için ayrı bir satır olduğundan, sadece benzersiz kullanıcı değerleri elde etmek için de gruplandırmanın gerekli olabileceğini düşünüyorum .
Matthew Scharley

5
Sql sorgusu olmadan aynı bilgi nasıl bulunur ??
Divyanshu Das

8
@barrycarter DELETE FROM mysql.user;Daha iyisi WHERE user='someuser' and host='somehost';Eğer yaparsanız DELETE FROM mysql.user;, tüm kullanıcılar gitti. Sonraki mysql yeniden başlatıldıktan sonra oturum açar veya FLUSH PRIVILEGES;kullanıcıları bellekten kaldırır. İşte yapmanın benim mesajların birinde bir örnektir DELETE FROM mysql.usersorumlu: dba.stackexchange.com/questions/4614/...
RolandoMySQLDBA

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

5
gruplama yerine sadece DISTINCTanahtar kelime kullanabilirsiniz :SELECT DISTINCT user FROM mysql.user;
user2683246

445

Bu biçimi, MySQL'de kullanıcı kayıtlarını ayırt etmek için önemli olan ana bilgisayar alanını içerdiğinden en kullanışlı buldum.

select User,Host from mysql.user;

1
Sadece merak. hostMySQL veritabanlarıyla çalışırken bu ne zaman devreye girecek ? [Mysql Noob]
Prabhakar Undurthi

7
@Packer hostfarklı bir sunucudan bağlanırken devreye girer. Farklı erişim izni vermek mümkündür 'packer'@'example.com've'packer'@'google.com'
Ray Baxter

118

Bir kullanıcı hesabı, kullanıcı adını ve ana bilgisayar düzeyinde erişimi içerir.

Bu nedenle, bu tüm kullanıcı hesaplarını veren sorgudur

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

7
Bu temelde spkane cevabı ile aynıdır . Kullanıcı ve ana makine sütunlarını birleştirmenin faydası nedir?
Iain Samuel McLean Elder

8
Bir örnek: user@hostbiçim, şifreleri ayarlamak için kullanılır. Ana bilgisayarın SET PASSWORDkomuttan çıkarılması bir hata oluşturur. SET PASSWORD FOR wordpressuser = PASSWORD('...');hata üretir ERROR 1133 (42000): Can't find any matching row in the user table. Ana bilgisayar ekleyin ve çalışır. SET PASSWORD FOR wordpressuser@localhost = PASSWORD('...');üretir Query OK, 0 rows affected (0.00 sec).
Iain Samuel McLean Elder

3
En iyi cevap, muhalifler ne olursa olsun şikayet edebilirler. Değiştirecek tek şey ona ekliyordu ORDER BY user.
sjas

48

kullanıcıların farklı kaynaklardan bağlandıklarında tekrarlarını önlemek için:

select distinct User from mysql.user;

31

MySQL kullanıcı bilgilerini kendi veritabanında saklar. Veritabanının adı MySQL. Bu veritabanının içinde, kullanıcı bilgileri adlı bir veri kümesinde bir tablodur user. MySQL kullanıcı tablosunda hangi kullanıcıların ayarlandığını görmek istiyorsanız, aşağıdaki komutu çalıştırın:

SELECT User, Host FROM mysql.user;

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

30

Gerçek MySQL kullanıcılarına başvuruyorsanız şunu deneyin:

select User from mysql.user;

23
SELECT * FROM mysql.user;

Bu büyük bir tablo, bu nedenle hangi alanları seçtiğiniz konusunda daha seçici olmak isteyebilirsiniz.


2
Farklı ana bilgisayarlara sahip 3 kök kullanıcı var. localhost, 127.0.0.1ve ::1. Hangisini saklamalıyım ve neyi silmeliyim? Teşekkürler!
emotalite

4
İnsanların ağ üzerinden bağlanmasını istemiyorsanız, eski standart tüm bunları silmekti. Günümüzde, yine de, ağ üzerinden erişilemedikleri için yerel ana bilgisayar olanları tutmak tavsiye edilir; bunun yerine hepsini saklamanız gerekir.
trysis

18

Kök olarak mysql oturumu açın ve aşağıdaki sorguyu yazın

select User from mysql.user;

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

Kök olarak oturum açtığından bahsettiğiniz için +1 diyebilirim. Bunu yapmadan denedim ve işe yaramadı;)
leenephi

Kullanıcı listesini görüntülemek için user1 kullanıcısına ayrıcalıklar vermeniz gerekir. Kök kullanıcı olmadan hata alırsınız. Bu yüzden önce ayrıcalıkları sağlayın. Kök kullanıcı GRANT SELECT ON mysql.user TO 'user1'@'localhost'; olarak oturum açın, sonra command yazın ve user1 olarak oturum açın ve command yazın select User from mysql.user; Kullanıcı listesinin görüntülendiğini göreceksiniz. :) +1 Keyfini çıkarın
sandip divekar

15

Mysql.db tablosu, kullanıcı haklarının belirlenmesinde muhtemelen daha önemlidir. Ben GRANT komutunda bir tablo bahsederseniz içinde bir giriş oluşturulur düşünüyorum. Benim durumumda, mysql.users tablosu açık bir şekilde bağlanıp seçebildiği zaman bir kullanıcı için hiçbir izin göstermedi.

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

1
Bana göre önemli olan, kullanıcıların veritabanında yapmasına izin verilen şey. Yani "SHOW SHOW" oldukça faydalıdır çünkü kimin ne yapmasına izin verildiğini gösterir.
Geliştirici Marius Žilėnas

12

Kullanıcıları sıralamak için bunu kullanıyorum, böylece izin verilen ana bilgisayarlar daha kolay tespit edilebilir:

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

11

Peter ve Jesse doğrudur, ancak önce mysql DB'yi seçtiğinizden emin olun.

use mysql;

select User from mysql.user;

bu senin hile yapmalı


22
O kadar gereklı değil use mysql;senin gibi MySQL veritabanı durumda kapsam tablo. Sadeceselect User from mysql.user;
vitaLee

5
Ekleme use mysql;sadece genellikle bir kerelik bir sorgu olduğundan bunun select User from user;yerine select User from mysql.user;kullanabilirsiniz, mysql db
Dan

1
sonra use mysqlkullandığınız olsaydı select user from user;bundan daha bir şey olabilirdi, ancak bunun yerine kullandığınız mysql.userkullanarak yapar, use mysqlbaşlangıç gereksiz de.
Sнаđошƒаӽ

10

Bu, benzersiz kullanıcıların listesini görüntüler:

SELECT DISTINCT User FROM mysql.user;

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

Linux komut isteminde bu komutu çalıştırmak önce mysql root kullanıcısının parolasını soracaktır, doğru parolayı sağlayarak tüm veritabanı kullanıcılarını metin dosyasına yazdıracaktır.


3

DML ve DDL ayrıcalıkları hakkında ek bilgi sağladığı için onu daha kullanışlı buldum

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;

Mysql kullanıcılarını almak için yukarıdaki sorguyu kullanın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.