【发布时间】:2025-12-31 17:15:02
【问题描述】:
我遇到了一个小组的特殊问题。 我已撤销该组的所有数据库访问权限 我已撤销此组的所有架构访问权限 我已撤销该组的所有表访问权限 我已经撤销了函数的所有执行权限 当我尝试删除该组时,我收到一条错误消息,指出无法删除该组,因为该组对某些对象具有特权。
我如何才能知道某个组在 redshift 上拥有哪些权限? 谢谢
【问题讨论】:
标签: sql amazon-redshift privileges
我遇到了一个小组的特殊问题。 我已撤销该组的所有数据库访问权限 我已撤销此组的所有架构访问权限 我已撤销该组的所有表访问权限 我已经撤销了函数的所有执行权限 当我尝试删除该组时,我收到一条错误消息,指出无法删除该组,因为该组对某些对象具有特权。
我如何才能知道某个组在 redshift 上拥有哪些权限? 谢谢
【问题讨论】:
标签: sql amazon-redshift privileges
我记得在某处看到这可以通过服务器上的终端来完成。但是,您可能遇到与我相同的问题,导致您无法放弃组。我设置了默认权限。我不得不这样做:
alter default privileges in schema seeds revoke all on tables from xyz cascade;
【讨论】:
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';
【讨论】:
您可以在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=%';
【讨论】: