Bagaimana cara mengetahui semua pengguna yang dapat mengakses database (MySQL)?

19

Bagaimana cara mengetahui semua pengguna yang dapat mengakses database?

pengguna79483
sumber

Jawaban:

14

Sambungkan ke instance mysql sebagai pengguna admin (umumnya sebagai root) dan berikan perintah berikut ...

select user from mysql.db where db='DB_NAME';
pengguna79644
sumber
Saya hanya menjalankan ini terhadap MariaDB hidup (garpu MySQL) dan mengembalikan 2 baris kosong.
Chris S
1
Apa nama basis data Anda? Anda perlu mengganti "DB_NAME" dengan nama db Anda.
user79644
Berjalan select user from mysql.dbtanpa kualifikasi mengembalikan 2 baris kosong juga.
Chris S
Tidak yakin apa perbedaannya antara MariaDB dan MySQL, tetapi kueri itu berjalan seperti yang diharapkan pada instalasi standar MySQL 5.
rvf
Ini hanya bagian dari jawaban OP. Bidang mysql.user.db dapat berisi karakter wildcard yang cocok dengan beberapa database. menggunakan permintaan yang Anda ajukan meleset. dev.mysql.com/doc/refman/5.0/en/grant.html
user4514
10

jawaban pengguna79644 mendapatkan pengguna dengan hak istimewa tingkat basis data tetapi akan merindukan pengguna dengan hanya tingkat tingkat tabel, tingkat kolom, atau tingkat prosedur. Untuk menemukan semuanya, gunakan pernyataan berikut:

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';

Di MySQL 5.5 setidaknya, seolah-olah memiliki hak istimewa tingkat kolom menyiratkan bahwa Anda memiliki hak istimewa tingkat-tabel. Memiliki hak istimewa tingkat-tabel tidak berarti bahwa Anda memiliki hak istimewa tingkat basis data. Tidak yakin tentang hak istimewa tingkat prosedur.

Scott Duckworth
sumber
1
Ini hanya sebagian dari jawabannya. Bidang mysql.user.db dapat berisi karakter wildcard yang cocok dengan beberapa database. menggunakan permintaan yang Anda ajukan meleset. dev.mysql.com/doc/refman/5.0/en/grant.html
user4514
Database yang mana? Saya mendapatkanERROR 1046 (3D000): No database selected
user124384
@ user124384 Apa yang tidak dikatakan dalam jawabannya adalah Anda harus menggunakan mysqldatabase. Di situlah semua data yang digunakan oleh MySQL disimpan. Berikan perintah USE mysql;untuk menambahkan nama database ke nama tabel, seperti FROM mysql.dbatauFROM mysql.tables_priv
Gypsy 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;
silviud
sumber
2
show grants hanya menunjukkan hibah dari pengguna saat ini (login)
nl-x
sebagai root Anda juga dapat melakukan show grant untuk
Rowan Hawkins
2

Anda harus ingat, bahwa MySQLGRANT untuk database dapat berisi karakter wildcard . Ini harus dipertanggungjawabkan dengan menggunakan LIKEdalam kueri:

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';
pengguna4514
sumber