Làm thế nào để biết tất cả người dùng có thể truy cập cơ sở dữ liệu (MySQL)?


19

Làm thế nào để biết tất cả người dùng có thể truy cập cơ sở dữ liệu?

Câu trả lời:


14

Kết nối với phiên bản mysql với tư cách là người dùng quản trị viên (thường là root) và đưa ra lệnh sau ...

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

Tôi vừa chạy cái này với MariaDB (ngã ba MySQL) trực tiếp và nó trả về 2 hàng trống.
Chris S

1
Tên cơ sở dữ liệu của bạn là gì? bạn cần thay thế "DB_NAME" bằng tên db của mình.
user79644

Chạy select user from mysql.dbmà không đủ điều kiện cũng trả lại 2 hàng trống.
Chris S

Không chắc chắn sự khác biệt giữa MariaDB và MySQL, nhưng truy vấn đó chạy như mong đợi trên bản cài đặt MySQL 5 tiêu chuẩn.
rvf

Đây chỉ là một phần của câu trả lời cho OP. Trường mysql.user.db có thể chứa các ký tự đại diện khớp với một số cơ sở dữ liệu. sử dụng truy vấn đề xuất của bạn bỏ lỡ chúng. dev.mysql.com/doc/refman/5.0/en/grant.html
user4514

10

Câu trả lời của user79644 nhận được người dùng với các đặc quyền cấp cơ sở dữ liệu nhưng sẽ bỏ lỡ người dùng chỉ với các đặc quyền cấp bảng, cấp cột hoặc cấp thủ tục. Để tìm tất cả chúng, sử dụng các tuyên bố sau:

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

Trong MySQL 5.5 ít nhất, dường như có các đặc quyền cấp cột ngụ ý rằng bạn có các đặc quyền cấp bảng. Có các đặc quyền cấp bảng không có nghĩa là bạn có các đặc quyền cấp cơ sở dữ liệu. Không chắc chắn về đặc quyền cấp thủ tục.


1
Đây chỉ là một phần của câu trả lời. Trường mysql.user.db có thể chứa các ký tự đại diện khớp với một số cơ sở dữ liệu. sử dụng truy vấn đề xuất của bạn bỏ lỡ chúng. dev.mysql.com/doc/refman/5.0/en/grant.html
user4514

Cơ sở dữ liệu nào? Tôi đang nhận đượcERROR 1046 (3D000): No database selected
dùng124384

@ user124384 Điều không được nói trong câu trả lời là bạn nên sử dụng mysqlcơ sở dữ liệu. Đó là nơi lưu trữ tất cả dữ liệu được sử dụng bởi MySQL. Hoặc đưa ra lệnh USE mysql;thêm tên cơ sở dữ liệu vào tên bảng, chẳng hạn như FROM mysql.dbhoặcFROM 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
tài trợ hiển thị chỉ hiển thị các khoản tài trợ của người dùng (đã đăng nhập) hiện tại
nl-x

với quyền root, bạn cũng có thể hiển thị các khoản tài trợ cho
Rowan Hawkins

2

Bạn phải nhớ rằng MySQLGRANT cho cơ sở dữ liệu có thể chứa các ký tự đại diện . Điều này phải được tính bằng cách sử dụng LIKEtrong truy vấn:

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';
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.