如何找到群组在红移中拥有的权限?

时间:2015-10-02 13:03:42

标签: sql amazon-redshift privileges

我对一个群体有一个奇怪的问题。 我已撤消此组的所有数据库访问权限 我已撤消此组的所有架构访问权限 我已撤消此组的所有表访问权限 我已经撤销了对函数的所有执行权限 当我尝试删除该组时,我收到一条错误消息,说它无法删除,因为该组对某个对象具有特权。

如何找出群组在红移上拥有的权限? 感谢

3 个答案:

答案 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

相应地替换groupnameschemaname并生成查询以撤消特权:

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';