จะรู้ผู้ใช้ทั้งหมดที่สามารถเข้าถึงฐานข้อมูลได้อย่างไร
จะรู้ผู้ใช้ทั้งหมดที่สามารถเข้าถึงฐานข้อมูลได้อย่างไร
คำตอบ:
เชื่อมต่อกับอินสแตนซ์ mysql ในฐานะผู้ใช้ผู้ดูแลระบบ (โดยทั่วไปเป็น root) และให้คำสั่งต่อไปนี้ ...
select user from mysql.db where db='DB_NAME';
select user from mysql.db
โดยไม่มีคุณสมบัติจะส่งคืน 2 แถวว่างเช่นกัน
คำตอบของ 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 ดูเหมือนว่าการมีสิทธิ์ระดับคอลัมน์หมายความว่าคุณมีสิทธิ์ระดับตาราง การมีสิทธิ์ระดับตารางไม่ได้หมายความว่าคุณมีสิทธิ์ระดับฐานข้อมูล ไม่แน่ใจเกี่ยวกับสิทธิ์ระดับขั้นตอน
ERROR 1046 (3D000): No database selected
mysql
ฐานข้อมูล นั่นคือที่เก็บข้อมูลทั้งหมดที่ใช้โดย MySQL ทั้งให้คำสั่งUSE mysql;
ของเพิ่มชื่อฐานข้อมูลเพื่อให้ชื่อตารางเช่นFROM mysql.db
หรือFROM mysql.tables_priv
# 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;
คุณต้องจำไว้ว่า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';