权限可以被授予不同的级别(用户级别,模式级别,表级甚至列级别)。下面的查询结合了这些(列级别除外)并显示每个表(或VIEW)的组合权限。
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, GRANTEE
, GROUP_CONCAT(DISTINCT PRIVILEGE_TYPE ORDER BY PRIVILEGE_TYPE) PRIVILEGE_TYPES
FROM (
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, GRANTEE, PRIVILEGE_TYPE
FROM information_schema.TABLES
INNER JOIN information_schema.user_privileges USING (TABLE_CATALOG)
WHERE NOT TABLE_SCHEMA IN ('information_schema', 'performance_schema')
AND GRANTEE=CONCAT("'", REPLACE(CURRENT_USER(), '@', "'@'"), "'")
UNION ALL
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, GRANTEE, PRIVILEGE_TYPE
FROM information_schema.TABLES
INNER JOIN information_schema.schema_privileges USING (TABLE_CATALOG, TABLE_SCHEMA)
WHERE NOT TABLE_SCHEMA IN ('information_schema', 'performance_schema')
AND GRANTEE=CONCAT("'", REPLACE(CURRENT_USER(), '@', "'@'"), "'")
UNION ALL
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, GRANTEE, PRIVILEGE_TYPE
FROM information_schema.TABLES
INNER JOIN information_schema.table_privileges USING (TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME)
WHERE NOT TABLE_SCHEMA IN ('information_schema', 'performance_schema')
AND GRANTEE=CONCAT("'", REPLACE(CURRENT_USER(), '@', "'@'"), "'")
) u
GROUP BY TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, GRANTEE
;
注意的方式,我把引号将CURRENT_USER是丑陋的,但只要你不使用单引号或@您的用户名的迹象,你应该罚款。我认为。
SELECT * FROM information_schema.user_privileges WHERE GRANTEE LIKE '%what_ever_your_user_is%' – cristian