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


19

Bagaimana cara mengetahui semua pengguna yang dapat mengakses database?

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

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.


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;

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';
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.