Привилегии могут быть предоставлены на различном уровне (уровень пользователя, уровень схемы, уровень таблицы и даже уровень столбца).Приведенный ниже запрос объединяет их (кроме уровня столбца) и показывает комбинированные привилегии для таблицы (или 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, уродлив, но покане используйте одинарные кавычки или знаки @ в именах пользователей, все будет в порядке.Я думаю.