【问题标题】:how do I find what privileges a group has in redshift?我如何找到一个组在 redshift 中的特权?
【发布时间】:2025-12-31 17:15:02
【问题描述】:

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

我如何才能知道某个组在 redshift 上拥有哪些权限? 谢谢

【问题讨论】:

    标签: sql amazon-redshift privileges


    【解决方案1】:

    我记得在某处看到这可以通过服务器上的终端来完成。但是,您可能遇到与我相同的问题,导致您无法放弃组。我设置了默认权限。我不得不这样做:

    alter default privileges in schema seeds revoke all on tables from xyz cascade;
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        您可以在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=%';
        

        【讨论】:

          最近更新 更多