是否有可以运行的查询来显示特定模式的当前分配的权限?
即分配如下权限:
GRANT USAGE ON SCHEMA dbo TO MyUser
我努力了
SELECT * FROM information_schema.usage_privileges;
但这只能将赠款返还给内置的PUBLIC角色.相反,我想看到哪些用户被授予了各种模式的权限.
注意:我实际上使用Amazon Redshift而不是纯Postgresql,尽管如果在Amazon Redshift中不可能,我将接受一个纯Postgresql的回答. (虽然我怀疑是)
权限存储在pg_namespace的nspacl字段中.由于它是一个阵列字段,您必须做一些花哨的编码来解析它.此查询将为您提供用于用户和组的授权语句:
select 'grant ' || substring( case when charindex('U',split_part(split_part(array_to_string(nspacl,'|'),pu.usename,2 ),'/',1)) > 0 then ',usage ' else '' end ||case when charindex('C',create ' else '' end,2,10000) || ' on schema '||nspname||' to "'||pu.usename||'";' from pg_namespace pn,pg_user pu where array_to_string(nspacl,',') like '%'||pu.usename||'%' --and pu.usename='<username>' and nspowner > 1 union select 'grant ' || substring( case when charindex('U',pg.groname,10000) || ' on schema '||nspname||' to group "'||pg.groname||'";' from pg_namespace pn,pg_group pg where array_to_string(nspacl,') like '%'||pg.groname||'%' --and pg.groname='<username>' and nspowner > 1