2011-09-22 74 views

回答

7

看看mysql數據庫(mysql服務器內部的一個名爲mysql的實際數據庫,只是要清楚)。有三個表(dbtables_priv,並且columns_priv),其中DB /表/列PRIVS存儲:

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' 

應該表現出你所需要的。

24

所有用戶及其近似權限的好看法。如果有密碼,它將通過加密字符串;如果不是,則該字段爲空。選擇是一個非常普遍的專門知識;插入允許在數據庫中進行表操作;關機允許主要的系統更改,並且只能由root使用;授予權限的能力與其他權限是分開的。

SELECT user, host, password, select_priv, insert_priv, shutdown_priv, grant_priv 
FROM mysql.user 

查看各個數據庫的權限。

​​
12

可以定義一個存儲過程列出的權限:

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 ; 

例如:

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)