postgresql – 查看模式权限

前端之家收集整理的这篇文章主要介绍了postgresql – 查看模式权限前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否有可以运行的查询显示特定模式的当前分配的权限?

即分配如下权限:

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

猜你在找的Postgre SQL相关文章