加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 查看模式权限

发布时间:2020-12-13 16:32:48 所属栏目:百科 来源:网络整理
导读:是否有可以运行的查询来显示特定模式的当前分配的权限? 即分配如下权限: GRANT USAGE ON SCHEMA dbo TO MyUser 我努力了 SELECT *FROM information_schema.usage_privileges; 但这只能将赠款返还给内置的PUBLIC角色.相反,我想看到哪些用户被授予了各种模式
是否有可以运行的查询来显示特定模式的当前分配的权限?

即分配如下权限:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读