我对一个群体有一个奇怪的问题。 我已撤消此组的所有数据库访问权限 我已撤消此组的所有架构访问权限 我已撤消此组的所有表访问权限 我已经撤销了对函数的所有执行权限 当我尝试删除该组时,我收到一条错误消息,说它无法删除,因为该组对某个对象具有特权。
如何找出群组在红移上拥有的权限? 感谢
答案 0 :(得分:0)
我记得在某个地方看到这可以通过服务器上的终端完成。但是,您可能遇到与我相同的问题,从而阻止您丢弃组。我设置了默认权限。我必须做这样的事情:
alter default privileges in schema seeds revoke all on tables from xyz cascade;
答案 1 :(得分:0)
您可以在pg_default_acl
表中看到默认的组特权。是defaclacl
列中格式为group <groupname>=<privileges>/<grantor>
的那些条目。
您必须为设置了特权的每个创建用户发出alter default privileges
。是defacluser
列,它引用了pg_user.usesysid
。
相应地替换groupname
和schemaname
并生成查询以撤消特权:
select 'alter default privileges for ' || pg_user.usename || ' in schema schemaname revoke all on tables from group groupname;'
from pg_default_acl
join pg_user on pg_default_acl.defacluser = pg_user.usesysid
where array_to_string(defaclacl, ',') like '%group groupname=%';
select 'alter default privileges for ' || pg_user.usename || ' in schema schemaname revoke all on functions from group groupname;'
from pg_default_acl
join pg_user on pg_default_acl.defacluser = pg_user.usesysid
where array_to_string(defaclacl, ',') like '%group groupname=%';
答案 2 :(得分:0)
jbasko的回答几乎是正确的,我的工作方式是这样的:
select
'alter default privileges for user ' || u.usename || ' in schema '||s.schemaname||' revoke all on tables from group groupname;'
from pg_default_acl d
join pg_user u on d.defacluser = u.usesysid
cross join
(select distinct schemaname from pg_tables) s
where array_to_string(defaclacl, ',') like '%group groupname=%'
and u.usename = 'some username';