我正在尝试删除用户表格Redshift但它始终失败并显示相同的消息
用户“XXX”无法删除,因为用户对某些用户具有权限 对象;
在谷歌搜索之后,我发现我需要撤销用户的权限,所以我运行了几个撤销查询,但我仍然失败了相同的消息:
我跑的查询:
revoke all on schema YYY from XXX;
revoke usage on schema ZZZ from XXX;
revoke all on database LLL from XXX;
知道为什么我仍然会收到此失败消息?
答案 0 :(得分:4)
请部署this view from github "v_get_obj_priv_by_user"
完成后,请按照以下步骤进行操作
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;
撤销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;
撤销所有关于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;
删除用户名;
如果一个群集中有两个数据库,请对两个数据库执行此操作。
答案 1 :(得分:1)
在尝试了无数帖子和帖子的建议后,awslabs的 aws-redshift-utils 以admin.v_find_dropuser_objs视图的形式提供了缓解。它立即识别出剩余的依赖关系,从而可以删除有问题的用户。
答案 2 :(得分:0)
使用此sql: 从admin.v_generate_user_grant_revoke_ddl中选择ddl,其中ddltype ='revoke'并按objseq,grantseq desc顺序排序(grantee =''或grantor ='');
终于能够找到所有拨款并生成吊销声明。
答案 3 :(得分:0)
已经在DBA Stack Exchange上回复了here。
在删除用户之前,必须撤消该用户拥有的所有特权,然后转移该用户拥有的任何数据库对象的所有权。
从AWS Labs GitHub存储库下载并安装v_generate_user_grant_revoke_ddl.sql脚本。该脚本在Amazon Redshift中创建一个视图,该视图可用于接下来的两个步骤。
查找授予用户的所有特权,然后再次以超级用户或其他用户的身份向用户授予这些特权,如下例所示。
SELECT regexp_replace(ddl,grantor,'') 从admin.v_generate_user_grant_revoke_ddl WHERE grantor =''和ddltype ='grant'并且 objtype <>'default acl'由objseq,grantseq排序;
查找授予用户的所有特权,然后撤消这些特权,如以下示例所示。
选择ddl 从admin.v_generate_user_grant_revoke_ddl 在ddltype ='revoke'和(grantee =''或 grantor ='')按objseq,grantseq desc排序;
从AWS Labs GitHub存储库下载并安装v_find_dropuser_objs.sql脚本。该脚本在Amazon Redshift中创建一个视图,该视图可用于下一步。
查找该用户拥有的所有对象,然后将所有权转让给其他用户。在下面的示例中, 是当前所有者, 是新所有者。
在群集上的每个数据库中重复步骤2-5。
删除用户。
删除用户
来源:https://aws.amazon.com/premiumsupport/knowledge-center/redshift-user-cannot-be-dropped/