无法从 Redshift 删除用户

fol*_*lky 2 sql permissions amazon-web-services amazon-redshift

我正在尝试删除用户表单 Redshift 但它总是失败并显示相同的消息

用户“XXX”不能被删除,因为用户对某个对象有权限;

在谷歌搜索之后,我发现我需要撤销用户的权限,所以我运行了几个撤销查询,但我仍然失败并显示相同的消息:

我运行的查询:

revoke all on schema YYY from XXX;
revoke usage on schema ZZZ from XXX;
revoke all on database LLL from XXX;
Run Code Online (Sandbox Code Playgroud)

知道为什么我仍然收到此失败消息吗?

小智 6

从 github "v_get_obj_priv_by_user"部署此视图

完成后,请按照以下步骤操作

  1. A_user ---必须删除的用户

    B_user ---旧表的表所有权需要映射到这个用户。

    如果您希望更改属于 A_user 的所有表的所有者,则

    select schemaname,tablename from pg_tables where tableowner like 'A_user';

    对于检索到的上述表格运行

    alter table schemaname.tablename owner to B_user;

  2. 撤消 A_user 具有某些权限的架构上的所有内容

    select distinct schemaname from admin.v_get_obj_priv_by_user where usename like 'A_user';

    对于检索到的上述表格运行

    revoke all on schema XXXX from A_user;

  3. 撤销所有 A_user 具有某些权限的表

    select distinct tables from admin.v_get_obj_priv_by_user where usename like 'A_user';

    对于检索到的上述表格运行

    revoke all on all tables in schema XXXX from A_user;

  4. 删除用户用户名;

如果一个集群中有两个数据库,请对两个数据库都执行此操作。


小智 5

v_generate_user_grant_revoke_ddl管理视图允许您查看现有的赠款和其相应的撤销。

使用这个 sql:

SELECT
  ddl
FROM admin.v_generate_user_grant_revoke_ddl
WHERE ddltype = 'revoke'
  AND grantee = '<USERNAME>
  OR grantor = '<USERNAME>')
ORDER BY
  objseq,
  grantseq desc;
Run Code Online (Sandbox Code Playgroud)

我终于能够找到所有的赠款并生成撤销声明。