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

相关文章

项目需要,有个数据需要导入,拿到手一开始以为是mysql,结果...
本文小编为大家详细介绍“怎么查看PostgreSQL数据库中所有表...
错误现象问题原因这是在远程连接时pg_hba.conf文件没有配置正...
因本地资源有限,在公共测试环境搭建了PGsql环境,从数据库本...
wamp 环境 这个提示就是说你的版本低于10了。 先打印ph...
psycopg2.OperationalError: SSL SYSCALL error: EOF detect...