微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/postgresql/191740.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐