列出PostgreSQL中物化视图的授权和权限

列出PostgreSQL中物化视图的授权和权限,第1张

概述我需要确定在我的数据库中为某些物化视图授予的特权. 为表或标准视图执行此 *** 作的查询非常简单: SELECT grantee, string_agg(privilege_type, ', ') AS privilegesFROM information_schema.table_privilegesWHERE table_schema = 'some_schema' AND table_name 我需要确定在我的数据库中为某些物化视图授予的特权.

为表或标准视图执行此 *** 作的查询非常简单:

SELECT grantee,string_agg(privilege_type,',') AS privilegesFROM information_schema.table_privilegesWHERE table_schema = 'some_schema' AND table_name = 'some_table'GROUP by grantee;

也就是说,物化视图似乎不是一个类似的表格. Postgresql在哪里存储这些信息?

Postgres system catalogs是有关安装和数据库的完整信息的基本信息.
Information schema作为辅助功能是基于系统目录,并提供与其他RDBM的兼容性.
系统目录是最可靠的信息来源.

您可以将information_schema.table_privileges视为基于pg_class和pg_roles的特定视图.
显然,在执行中必须有一个小错误(这是在正确的地方缺少一个字母的问题).

系统目录pg_class包含关于列relacl中所有权限的所有信息.

如果列为空,则所有者具有所有权限.

在acl字符串中用作用户名的空字符串表示公开.

create materialized vIEw test_vIEw as select 1;grant select on test_vIEw to public;grant delete on test_vIEw to a_user;select     coalesce(nullif(s[1],''),'public') as grantee,s[2] as privilegesfrom     pg_class c    join pg_namespace n on n.oID = relnamespace    join pg_roles r on r.oID = relowner,unnest(coalesce(relacl::text[],format('{%s=arwdDxt/%s}',rolname,rolname)::text[])) acl,regexp_split_to_array(acl,'=|/') swhere nspname = 'public' and relname = 'test_vIEw'; grantee  | privileges ----------+------------ postgres | arwdDxt public   | r a_user   | d(3 rows)

您需要一个以可读格式显示权限的功能:

create or replace function priviliges_from_acl(text)returns text language sql as $$    select string_agg(privilege,')    from (        select             case ch                when 'r' then 'SELECT'                when 'w' then 'UPDATE'                when 'a' then 'INSERT'                when 'd' then 'DELETE'                when 'D' then 'TruncATE'                when 'x' then 'REFERENCES'                when 't' then 'TRIGGER'            end privilege        from            regexp_split_to_table(,'') ch    ) s $$;

使用:

select     coalesce(nullif(s[1],priviliges_from_acl(s[2]) as privilegesfrom     pg_class c    join pg_namespace n on n.oID = relnamespace    join pg_roles r on r.oID = relowner,'=|/') swhere nspname = 'public' and relname = 'test_vIEw'; grantee  |                          privileges                           ----------+--------------------------------------------------------------- postgres | INSERT,SELECT,UPDATE,DELETE,TruncATE,REFERENCES,TRIGGER public   | SELECT a_user   | DELETE(3 rows)
总结

以上是内存溢出为你收集整理的列出PostgreSQL中物化视图的授权和权限全部内容,希望文章能够帮你解决列出PostgreSQL中物化视图的授权和权限所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1170399.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存