จะรับรายการบัญชีผู้ใช้โดยใช้บรรทัดคำสั่งใน MySQL ได้อย่างไร


1348

ฉันใช้ยูทิลิตีบรรทัดคำสั่งของ MySQL และสามารถนำทางผ่านฐานข้อมูล ตอนนี้ฉันต้องการดูรายการบัญชีผู้ใช้ ฉันจะทำสิ่งนี้ได้อย่างไร

ฉันใช้ MySQL 5.4.1รุ่น


@Mustapha ทำไมชื่อเปลี่ยน? คำตอบนี้คือ SQL ที่คุณสามารถเรียกใช้ได้จากทุกที่ไม่ใช่แค่บรรทัดคำสั่ง และแท็กนั้นเพิ่มคำถามอะไร
โฟโต้

จุดประสงค์ของการแก้ไขของฉันคือเพื่อรักษาความสอดคล้องระหว่างชื่อและคำอธิบาย แต่ฉันคิดว่าคุณมีจุดดี แก้ไข Mr. @Rup
Mustapha Hadid

คำตอบ:


1848

ใช้แบบสอบถามนี้:

SELECT User FROM mysql.user;

ซึ่งจะส่งออกตารางเช่นนี้

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

เมื่อ Matthew Scharley ชี้ให้เห็นในความคิดเห็นเกี่ยวกับคำตอบนี้คุณสามารถจัดกลุ่มตามUserคอลัมน์หากคุณต้องการเห็นชื่อผู้ใช้ที่ไม่ซ้ำกันเท่านั้น


47
ฉันคิดว่ามันอาจจำเป็นที่จะต้องจัดกลุ่มUserด้วยเช่นกันเพื่อรับค่าผู้ใช้ที่ไม่ซ้ำกันเนื่องจากมีแถวที่แยกต่างหากสำหรับแต่ละรายการuser@ host
Matthew Scharley

5
วิธีการค้นหาข้อมูลเดียวกันโดยไม่ต้องสอบถาม SQL?
Divyanshu Das

8
@barrycarter DELETE FROM mysql.user;ดีกว่าWHERE user='someuser' and host='somehost';ถ้ามีDELETE FROM mysql.user;ผู้ใช้ทั้งหมดหายไป เข้าสู่ระบบหลังจาก mysql ถัดไปรีสตาร์ทหรือFLUSH PRIVILEGES;กำจัดผู้ใช้จากหน่วยความจำ นี่คือตัวอย่างของหนึ่งในโพสต์ของฉันเกี่ยวกับการทำอย่างDELETE FROM mysql.userรับผิดชอบ: dba.stackexchange.com/questions/4614/ …
RolandoMySQLDBA

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

5
แทนการจัดกลุ่มคุณสามารถใช้DISTINCTคำหลัก:SELECT DISTINCT user FROM mysql.user;
user2683246

445

ฉันพบว่ารูปแบบนี้มีประโยชน์มากที่สุดเนื่องจากมีฟิลด์โฮสต์ซึ่งเป็นสิ่งสำคัญใน MySQL เพื่อแยกความแตกต่างระหว่างบันทึกผู้ใช้

select User,Host from mysql.user;

1
แค่สงสัย. สิ่งนี้จะhostเกิดขึ้นเมื่อทำงานกับฐานข้อมูล mysql [Mysql Noob]
Prabhakar Undurthi

7
@Packer the hostจะเข้ามาเล่นเมื่อคุณเชื่อมต่อจากเซิร์ฟเวอร์อื่น เป็นไปได้ที่จะอนุญาตให้เข้าถึง'packer'@'example.com'และ'packer'@'google.com'
Ray Baxter

118

บัญชีผู้ใช้ประกอบด้วยชื่อผู้ใช้และการเข้าถึงระดับโฮสต์

ดังนั้นนี่คือแบบสอบถามที่ให้บัญชีผู้ใช้ทั้งหมด

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

7
นี้เป็นพื้นเดียวกับคำตอบของ spkane ประโยชน์ของการต่อผู้ใช้และคอลัมน์โฮสต์คืออะไร
เลนซามูเอลแมคลีนผู้อาวุโส

8
ตัวอย่างหนึ่ง: user@hostรูปแบบใช้สำหรับตั้งรหัสผ่าน การข้ามโฮสต์จากSET PASSWORDคำสั่งสร้างข้อผิดพลาด ก่อให้เกิดข้อผิดพลาดSET PASSWORD FOR wordpressuser = PASSWORD('...'); ERROR 1133 (42000): Can't find any matching row in the user tableรวมถึงโฮสต์และใช้งานได้ ผลิตSET PASSWORD FOR wordpressuser@localhost = PASSWORD('...'); Query OK, 0 rows affected (0.00 sec)
เลนซามูเอลแมคลีนเลน

3
คำตอบที่ดีที่สุดไม่ว่าใครจะบ่นอะไรก็ตาม สิ่งเดียวที่ฉันต้องการการเปลี่ยนแปลงที่ถูกผนวกORDER BY userกับมัน
sjas

48

เพื่อหลีกเลี่ยงการซ้ำซ้อนของผู้ใช้เมื่อพวกเขาเชื่อมต่อจากแหล่งกำเนิดที่แตกต่างกัน:

select distinct User from mysql.user;

31

MySQL จัดเก็บข้อมูลผู้ใช้ในฐานข้อมูลของตนเอง MySQLชื่อของฐานข้อมูลเป็น userภายในฐานข้อมูลที่ข้อมูลของผู้ใช้ที่อยู่ในตารางชุดข้อมูลชื่อ หากคุณต้องการดูว่าผู้ใช้ตั้งค่าอะไรในตารางผู้ใช้ MySQL ให้รันคำสั่งต่อไปนี้:

SELECT User, Host FROM mysql.user;

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


23
SELECT * FROM mysql.user;

มันเป็นตารางขนาดใหญ่ดังนั้นคุณอาจต้องการเลือกเพิ่มเติมเกี่ยวกับฟิลด์ที่คุณเลือก


2
ฉันมีผู้ใช้รูท 3 คนที่มีโฮสต์ต่างกัน localhost, และ127.0.0.1 ::1ฉันจะต้องรักษาอันไหนและฉันต้องลบอะไร ขอบคุณ!
รู้สึก

4
หากคุณไม่ต้องการให้ผู้คนเชื่อมต่อผ่านเครือข่ายมาตรฐานเก่าคือการลบสิ่งเหล่านี้ทั้งหมด อย่างไรก็ตามในปัจจุบันดูเหมือนว่าคำแนะนำคือการเก็บโฮสต์ในพื้นที่ไว้เนื่องจากไม่สามารถเข้าถึงได้ผ่านเครือข่าย นี่หมายความว่าคุณควรเก็บไว้ทั้งหมด
trysis

18

เข้าสู่ระบบ mysql ในฐานะ root และพิมพ์ข้อความค้นหาต่อไปนี้

select User from mysql.user;

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

ฉันจะพูด +1 เพื่อพูดถึงการเข้าสู่ระบบในฐานะ root ฉันพยายามโดยไม่ทำอย่างนั้นและมันก็ใช้ไม่ได้;)
leenephi

คุณต้องให้สิทธิ์แก่ user1 เพื่อแสดงรายชื่อผู้ใช้ หากไม่มีผู้ใช้รูทคุณจะได้รับข้อผิดพลาด ดังนั้นก่อนอื่นให้สิทธิพิเศษ ล็อกอินในฐานะผู้ใช้รูทแล้วพิมพ์คำสั่งทันที GRANT SELECT ON mysql.user TO 'user1'@'localhost'; ล็อกอินเป็น user1 และพิมพ์คำสั่ง select User from mysql.user; คุณจะเห็นรายการผู้ใช้ปรากฏขึ้น :) +1 สนุกกับ
sandip divekar

15

ตาราง mysql.db อาจมีความสำคัญมากกว่าในการกำหนดสิทธิ์ของผู้ใช้ ฉันคิดว่ารายการในนั้นถูกสร้างขึ้นหากคุณพูดถึงตารางในคำสั่ง GRANT ในกรณีของฉันตาราง mysql.users ไม่แสดงสิทธิ์สำหรับผู้ใช้เมื่อเห็นได้ชัดว่าสามารถเชื่อมต่อและเลือกเป็นต้น

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

1
ในมุมมองของฉันสิ่งที่สำคัญคือสิ่งที่ผู้ใช้จะได้รับอนุญาตให้ทำบนฐานข้อมูล ดังนั้น "SHOW GRANTS" จึงมีประโยชน์มากเพราะมันแสดงให้เห็นว่าใครได้รับอนุญาตให้ทำอะไร
พัฒนา Marius Žilėnas

12

ฉันใช้สิ่งนี้เพื่อจัดเรียงผู้ใช้ดังนั้นโฮสต์ที่ได้รับอนุญาตจะมองเห็นได้ง่ายขึ้น:

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

11

Peter และ Jesse นั้นถูกต้อง แต่ให้แน่ใจว่าคุณเลือก mysql DB เป็นอันดับแรก

use mysql;

select User from mysql.user;

ที่ควรทำเคล็ดลับของคุณ


22
ไม่จำเป็นuse mysql;ในกรณีที่คุณกำหนดขอบเขตตารางไปยังฐานข้อมูล mysql เหมือนที่คุณทำ คุณสามารถทำได้select User from mysql.user;
vitaLee

5
การเพิ่มuse mysql;เป็นเพียงเพื่อให้คุณสามารถใช้select User from user;แทนselect User from mysql.user;เนื่องจากมันมักจะเป็นแบบสอบถามแบบครั้งเดียวไม่จำเป็นต้องใช้ mysql db
Dan

1
หลังจากuse mysqlถ้าคุณใช้select user from user;เกินกว่าที่จะเป็นอะไร แต่คุณใช้แทนmysql.userซึ่งทำให้การใช้use mysqlที่จุดเริ่มต้นที่ไม่จำเป็น
Sнаđошƒаӽ


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

การดำเนินการคำสั่งนี้บนพรอมต์ linux จะขอรหัสผ่านของผู้ใช้ root ของ mysql ในการให้รหัสผ่านที่ถูกต้องมันจะพิมพ์ผู้ใช้ฐานข้อมูลทั้งหมดไปยังไฟล์ข้อความ


3

ฉันพบว่ามีประโยชน์มากกว่านี้เนื่องจากให้ข้อมูลเพิ่มเติมเกี่ยวกับสิทธิ์ DML และ DDL

SELECT user, Select_priv, Insert_priv , Update_priv, Delete_priv, 
       Create_priv, Drop_priv, Shutdown_priv, Create_user_priv 
FROM mysql.user;

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.