ฉันใช้ยูทิลิตีบรรทัดคำสั่งของ MySQL และสามารถนำทางผ่านฐานข้อมูล ตอนนี้ฉันต้องการดูรายการบัญชีผู้ใช้ ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันใช้ MySQL 5.4.1
รุ่น
ฉันใช้ยูทิลิตีบรรทัดคำสั่งของ MySQL และสามารถนำทางผ่านฐานข้อมูล ตอนนี้ฉันต้องการดูรายการบัญชีผู้ใช้ ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันใช้ MySQL 5.4.1
รุ่น
คำตอบ:
ใช้แบบสอบถามนี้:
SELECT User FROM mysql.user;
ซึ่งจะส่งออกตารางเช่นนี้
+-------+
| User |
+-------+
| root |
+-------+
| user2 |
+-------+
เมื่อ Matthew Scharley ชี้ให้เห็นในความคิดเห็นเกี่ยวกับคำตอบนี้คุณสามารถจัดกลุ่มตามUser
คอลัมน์หากคุณต้องการเห็นชื่อผู้ใช้ที่ไม่ซ้ำกันเท่านั้น
User
ด้วยเช่นกันเพื่อรับค่าผู้ใช้ที่ไม่ซ้ำกันเนื่องจากมีแถวที่แยกต่างหากสำหรับแต่ละรายการuser
@ host
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/ …
SHOW GRANTS FOR 'user'@'host';
DISTINCT
คำหลัก:SELECT DISTINCT user FROM mysql.user;
ฉันพบว่ารูปแบบนี้มีประโยชน์มากที่สุดเนื่องจากมีฟิลด์โฮสต์ซึ่งเป็นสิ่งสำคัญใน MySQL เพื่อแยกความแตกต่างระหว่างบันทึกผู้ใช้
select User,Host from mysql.user;
host
เกิดขึ้นเมื่อทำงานกับฐานข้อมูล mysql [Mysql Noob]
host
จะเข้ามาเล่นเมื่อคุณเชื่อมต่อจากเซิร์ฟเวอร์อื่น เป็นไปได้ที่จะอนุญาตให้เข้าถึง'packer'@'example.com'
และ'packer'@'google.com'
บัญชีผู้ใช้ประกอบด้วยชื่อผู้ใช้และการเข้าถึงระดับโฮสต์
ดังนั้นนี่คือแบบสอบถามที่ให้บัญชีผู้ใช้ทั้งหมด
SELECT CONCAT(QUOTE(user),'@',QUOTE(host)) UserAccount FROM mysql.user;
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)
ORDER BY user
กับมัน
เพื่อหลีกเลี่ยงการซ้ำซ้อนของผู้ใช้เมื่อพวกเขาเชื่อมต่อจากแหล่งกำเนิดที่แตกต่างกัน:
select distinct User from mysql.user;
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 |
| | % |
+------------------+-----------+
หากคุณอ้างถึงผู้ใช้ MySQL จริงลอง:
select User from mysql.user;
SELECT * FROM mysql.user;
มันเป็นตารางขนาดใหญ่ดังนั้นคุณอาจต้องการเลือกเพิ่มเติมเกี่ยวกับฟิลด์ที่คุณเลือก
localhost
, และ127.0.0.1
::1
ฉันจะต้องรักษาอันไหนและฉันต้องลบอะไร ขอบคุณ!
เข้าสู่ระบบ mysql ในฐานะ root และพิมพ์ข้อความค้นหาต่อไปนี้
select User from mysql.user;
+------+
| User |
+------+
| amon |
| root |
| root |
+------+
GRANT SELECT ON mysql.user TO 'user1'@'localhost';
ล็อกอินเป็น user1 และพิมพ์คำสั่ง select User from mysql.user;
คุณจะเห็นรายการผู้ใช้ปรากฏขึ้น :) +1 สนุกกับ
ตาราง mysql.db อาจมีความสำคัญมากกว่าในการกำหนดสิทธิ์ของผู้ใช้ ฉันคิดว่ารายการในนั้นถูกสร้างขึ้นหากคุณพูดถึงตารางในคำสั่ง GRANT ในกรณีของฉันตาราง mysql.users ไม่แสดงสิทธิ์สำหรับผู้ใช้เมื่อเห็นได้ชัดว่าสามารถเชื่อมต่อและเลือกเป็นต้น
mysql> select * from mysql.db;
mysql> select * from db;
+---------------+-----------------+--------+-------------+-------------+-------------+--------
| Host | Db | User | Select_priv | Insert_priv | Update_priv | Del...
ฉันใช้สิ่งนี้เพื่อจัดเรียงผู้ใช้ดังนั้นโฮสต์ที่ได้รับอนุญาตจะมองเห็นได้ง่ายขึ้น:
mysql> SELECT User,Host FROM mysql.user ORDER BY User,Host;
Peter และ Jesse นั้นถูกต้อง แต่ให้แน่ใจว่าคุณเลือก mysql DB เป็นอันดับแรก
use mysql;
select User from mysql.user;
ที่ควรทำเคล็ดลับของคุณ
use mysql;
ในกรณีที่คุณกำหนดขอบเขตตารางไปยังฐานข้อมูล mysql เหมือนที่คุณทำ คุณสามารถทำได้select User from mysql.user;
use mysql;
เป็นเพียงเพื่อให้คุณสามารถใช้select User from user;
แทนselect User from mysql.user;
เนื่องจากมันมักจะเป็นแบบสอบถามแบบครั้งเดียวไม่จำเป็นต้องใช้ mysql db
use mysql
ถ้าคุณใช้select user from user;
เกินกว่าที่จะเป็นอะไร แต่คุณใช้แทนmysql.user
ซึ่งทำให้การใช้use mysql
ที่จุดเริ่มต้นที่ไม่จำเป็น
นี่แสดงรายการผู้ใช้ที่ไม่ซ้ำใคร:
SELECT DISTINCT User FROM mysql.user;
$> mysql -u root -p -e 'Select user from mysql.user' > allUsersOnDatabase.txt
การดำเนินการคำสั่งนี้บนพรอมต์ linux จะขอรหัสผ่านของผู้ใช้ root ของ mysql ในการให้รหัสผ่านที่ถูกต้องมันจะพิมพ์ผู้ใช้ฐานข้อมูลทั้งหมดไปยังไฟล์ข้อความ
ฉันพบว่ามีประโยชน์มากกว่านี้เนื่องจากให้ข้อมูลเพิ่มเติมเกี่ยวกับสิทธิ์ DML และ DDL
SELECT user, Select_priv, Insert_priv , Update_priv, Delete_priv,
Create_priv, Drop_priv, Shutdown_priv, Create_user_priv
FROM mysql.user;
SELECT User FROM mysql.user;
ใช้แบบสอบถามด้านบนเพื่อรับผู้ใช้ Mysql