tôi phải chọn tất cả người dùng có bất kỳ đặc quyền nào cho cơ sở dữ liệu (ví dụ: cơ sở dữ liệu 'mysql'). Bất kỳ đề xuất? Cảm ơn.Hiển thị cho người dùng bất kỳ đặc quyền nào đối với cơ sở dữ liệu. MySQL
Trả lời
Tìm trong cơ sở dữ liệu mysql
(một db thực tế có tên mysql
bên trong máy chủ mysql, chỉ để rõ ràng). Có ba bảng (db
, tables_priv
, và columns_priv
) nơi db/table/privs cột được lưu trữ:
SELECT 'db', User, Host
FROM db
WHERE Db='mydatabase'
UNION
SELECT 'table', User, Host
FROM tables_priv
WHERE Db='mydatabase'
UNION
SELECT 'col', User, Host
FROM columns_priv
WHERE Db='mydatabase'
sẽ hiển thị cho bạn những gì bạn cần.
Chế độ xem tốt của tất cả người dùng và đặc quyền gần đúng của họ. Nếu có một mật khẩu, nó sẽ bằng một chuỗi được mã hóa; nếu không, trường này trống. Chọn là một giáo sư rất chung chung; chèn cho phép thao tác bảng trong cơ sở dữ liệu; tắt máy cho phép thay đổi hệ thống lớn và chỉ có thể sử dụng được bằng root; khả năng cấp quyền tách biệt với các quyền khác.
SELECT user, host, password, select_priv, insert_priv, shutdown_priv, grant_priv
FROM mysql.user
Xem các quyền đối với cơ sở dữ liệu riêng lẻ.
SELECT user, host, db, select_priv, insert_priv, grant_priv FROM mysql.db
database privileges được lưu trữ trong
mysql.db
table privileges được lưu trữ trong
mysql.tables_priv
column privileges được lưu trữ trong
mysql.columns_priv
routine privileges được lưu trữ trong 012.
Bạn có thể định nghĩa một thủ tục lưu trữ để liệt kê các đặc quyền:
delimiter //
CREATE PROCEDURE list_privileges (IN db_name CHAR(50))
BEGIN
SELECT concat(Db,'.', '*') as 'what', User, Host, '...' as 'perms'
FROM mysql.db
WHERE Db=db_name
UNION
SELECT concat(Db,'.', Table_name), User, Host, table_priv
FROM mysql.tables_priv
WHERE Db=db_name and table_priv != ''
UNION
SELECT concat(Db,'.', Table_name, '(', Column_name,')'), User, Host, Column_priv
FROM mysql.columns_priv
WHERE Db=db_name
UNION
SELECT concat(Db,'.', Routine_name, '()'), User, Host, Proc_priv
FROM mysql.procs_priv
WHERE Db=db_name;
END//
delimiter ;
dụ:
mysql> call list_privileges("testlink2");
+-----------------------------+-----------+-----------+---------+
| what | User | Host | perms |
+-----------------------------+-----------+-----------+---------+
| testlink2.* | testlink2 | % | ... |
| testlink2.* | testlink2 | localhost | ... |
| testlink2.executions | testlink2 | % | Select |
| testlink2.users(id) | testlink2 | % | Select |
| testlink2.list_privileges() | testlink2 | % | Execute |
+-----------------------------+-----------+-----------+---------+
5 rows in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)