จะรู้จักผู้ใช้ทุกคนที่สามารถเข้าถึงฐานข้อมูล (MySQL) ได้อย่างไร?


19

จะรู้ผู้ใช้ทั้งหมดที่สามารถเข้าถึงฐานข้อมูลได้อย่างไร

คำตอบ:


14

เชื่อมต่อกับอินสแตนซ์ mysql ในฐานะผู้ใช้ผู้ดูแลระบบ (โดยทั่วไปเป็น root) และให้คำสั่งต่อไปนี้ ...

select user from mysql.db where db='DB_NAME';

ฉันเพิ่งเรียกใช้นี้กับ MariaDB แบบสด (MySQL fork) และส่งคืน 2 แถวว่าง
Chris S

1
ชื่อฐานข้อมูลของคุณคืออะไร? คุณต้องแทนที่ "DB_NAME" ด้วยชื่อ db ของคุณ
user79644

การรันselect user from mysql.dbโดยไม่มีคุณสมบัติจะส่งคืน 2 แถวว่างเช่นกัน
Chris S

ไม่แน่ใจว่าความแตกต่างระหว่าง MariaDB และ MySQL อย่างไร แต่การสืบค้นนั้นทำงานตามที่คาดไว้ในการติดตั้ง MySQL 5 แบบมาตรฐาน
rvf

นี่เป็นเพียงส่วนหนึ่งของคำตอบของ OP ฟิลด์ mysql.user.db สามารถมีอักขระไวด์การ์ดที่ตรงกับฐานข้อมูลหลาย ๆ ใช้แบบสอบถามของคุณเสนอคิดถึงพวกเขา dev.mysql.com/doc/refman/5.0/en/grant.html
4514

10

คำตอบของ user79644 ทำให้ผู้ใช้มีสิทธิ์ระดับฐานข้อมูล แต่จะพลาดผู้ใช้ที่มีสิทธิ์ระดับตารางระดับคอลัมน์หรือระดับขั้นตอนเท่านั้น ในการค้นหาทั้งหมดให้ใช้คำสั่งต่อไปนี้:

SELECT user,host FROM db WHERE db='name';
SELECT user,host FROM tables_priv WHERE db='name';
SELECT user,host FROM columns_priv WHERE db='name';
SELECT user,host FROM procs_priv WHERE db='name';

อย่างน้อยใน MySQL 5.5 ดูเหมือนว่าการมีสิทธิ์ระดับคอลัมน์หมายความว่าคุณมีสิทธิ์ระดับตาราง การมีสิทธิ์ระดับตารางไม่ได้หมายความว่าคุณมีสิทธิ์ระดับฐานข้อมูล ไม่แน่ใจเกี่ยวกับสิทธิ์ระดับขั้นตอน


1
นี่เป็นเพียงส่วนหนึ่งของคำตอบ ฟิลด์ mysql.user.db สามารถมีอักขระไวด์การ์ดที่ตรงกับฐานข้อมูลหลาย ๆ ใช้แบบสอบถามของคุณเสนอคิดถึงพวกเขา dev.mysql.com/doc/refman/5.0/en/grant.html
4514

ฐานข้อมูลใด ฉันได้รับERROR 1046 (3D000): No database selected
user124384

@ user124384 สิ่งที่ไม่ได้กล่าวไว้ในคำตอบก็คือคุณควรใช้mysqlฐานข้อมูล นั่นคือที่เก็บข้อมูลทั้งหมดที่ใช้โดย MySQL ทั้งให้คำสั่งUSE mysql;ของเพิ่มชื่อฐานข้อมูลเพื่อให้ชื่อตารางเช่นFROM mysql.dbหรือFROM mysql.tables_priv
ยิปซี Spellweaver

8
# current users that access the db
mysql> show processlist;
+-----+------+-----------+------+---------+------+-------+------------------+
| Id  | User | Host      | db   | Command | Time | State | Info             |
+-----+------+-----------+------+---------+------+-------+------------------+
| 214 | root | localhost | NULL | Query   |    0 | NULL  | show processlist |
+-----+------+-----------+------+---------+------+-------+------------------+

# who can access what at anytime and his privilege level
mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+

# what privileges are available
mysql> show privileges;

2
show grants แสดงเฉพาะการมอบสิทธิ์ของผู้ใช้ปัจจุบัน (เข้าสู่ระบบ)
nl-x

ในฐานะที่เป็นรูทคุณสามารถแสดงเงินช่วยเหลือสำหรับ
Rowan Hawkins

2

คุณต้องจำไว้ว่าMySQLGRANTสำหรับฐานข้อมูลสามารถประกอบด้วยอักขระตัวแทน นี้จะต้องมีการคิดโดยใช้LIKEในแบบสอบถาม:

SELECT user,host FROM db WHERE 'name' LIKE db;
SELECT user,host FROM tables_priv WHERE db='name';
SELECT user,host FROM columns_priv WHERE db='name';
SELECT user,host FROM procs_priv WHERE db='name';
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.