无法从Redshift中删除用户

时间:2016-11-17 08:56:27

标签: sql 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;

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

4 个答案:

答案 0 :(得分:4)

请部署this view from 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. 如果一个群集中有两个数据库,请对两个数据库执行此操作。

答案 1 :(得分:1)

在尝试了无数帖子和帖子的建议后,awslabs的 aws-redshift-utils admin.v_find_dropuser_objs视图的形式提供了缓解。它立即识别出剩余的依赖关系,从而可以删除有问题的用户。

答案 2 :(得分:0)

此视图:https://github.com/awslabs/amazon-redshift-utils/blob/master/src/AdminViews/v_generate_user_grant_revoke_ddl.sql

使用此sql: 从admin.v_generate_user_grant_revoke_ddl中选择ddl,其中ddltype ='revoke'并按objseq,grantseq desc顺序排序(grantee =''或grantor ='');

终于能够找到所有拨款并生成吊销声明。

答案 3 :(得分:0)

已经在DBA Stack Exchange上回复了here

在删除用户之前,必须撤消该用户拥有的所有特权,然后转移该用户拥有的任何数据库对象的所有权。

  1. 从AWS Labs GitHub存储库下载并安装v_generate_user_grant_revoke_ddl.sql脚本。该脚本在Amazon Redshift中创建一个视图,该视图可用于接下来的两个步骤。

  2. 查找授予用户的所有特权,然后再次以超级用户或其他用户的身份向用户授予这些特权,如下例所示。

    SELECT regexp_replace(ddl,grantor,'') 从admin.v_generate_user_grant_revoke_ddl WHERE grantor =''和ddltype ='grant'并且 objtype <>'default acl'由objseq,grantseq排序;

  3. 查找授予用户的所有特权,然后撤消这些特权,如以下示例所示。

    选择ddl 从admin.v_generate_user_grant_revoke_ddl 在ddltype ='revoke'和(grantee =''或 grantor ='')按objseq,grantseq desc排序;

  4. 从AWS Labs GitHub存储库下载并安装v_find_dropuser_objs.sql脚本。该脚本在Amazon Redshift中创建一个视图,该视图可用于下一步。

  5. 查找该用户拥有的所有对象,然后将所有权转让给其他用户。在下面的示例中, 是当前所有者, 是新所有者。

  6. 在群集上的每个数据库中重复步骤2-5。

  7. 删除用户。

    删除用户

来源:https://aws.amazon.com/premiumsupport/knowledge-center/redshift-user-cannot-be-dropped/