Làm thế nào để biết tất cả người dùng có thể truy cập cơ sở dữ liệu?
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:
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';
select user from mysql.db
mà không đủ điều kiện cũng trả lại 2 hàng trống.
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.
ERROR 1046 (3D000): No database selected
mysql
cơ 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.db
hoặcFROM 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;
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 LIKE
trong 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';