[英]Can't drop user from Redshift
我正在尝试删除用户表单 Redshift 但它总是失败并显示相同的消息
无法删除用户“XXX”,因为该用户对某些 object 具有特权;
在对其进行谷歌搜索后,我发现我需要撤销用户的权限,所以我运行了几个撤销查询,但我仍然失败并显示相同的消息:
我运行的查询:
revoke all on schema YYY from XXX;
revoke usage on schema ZZZ from XXX;
revoke all on database LLL from XXX;
知道为什么我仍然收到此失败消息吗?
请从 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;
删除用户用户名;
如果一个集群中有两个数据库,请对两个数据库都执行此操作。
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;
我终于能够找到所有的赠款并生成撤销声明。
在尝试了无数帖子和线程的建议后,awslabs 的aws- redshift -utils以admin.v_find_dropuser_objs视图的形式提供了缓解。 它立即确定了剩余的依赖项,从而可以删除有问题的用户。
已经在 DBA Stack Exchange 上回复了这里。
在删除用户之前,您必须撤销该用户拥有的任何权限,然后转移该用户拥有的任何数据库对象的所有权。
从 AWS Labs GitHub 存储库下载并安装v_generate_user_grant_revoke_ddl.sql脚本。 此脚本在 Amazon Redshift 中创建一个对接下来的两个步骤有用的视图。
查找授予该用户的所有权限,然后以超级用户或其他用户的身份再次将这些权限授予该用户,如下例所示。
SELECT regexp_replace(ddl,grantor,'') FROM admin.v_generate_user_grant_revoke_ddl WHERE grantor='' and ddltype='grant' AND objtype <>'default acl' order by objseq,grantseq;
查找授予用户的所有权限,然后撤消这些权限,如以下示例所示。
SELECT ddl FROM admin.v_generate_user_grant_revoke_ddl WHERE ddltype='revoke' and (grantee='' OR grantor='') order by 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/
其他人的答案对于理清 redshift 选择使用的许可系统的混乱局面非常有用。 但是,如果像我一样,您是超级用户,并且在尝试更改 redshift 中的默认权限时遇到权限被拒绝的错误,这会阻止您删除用户,请务必使用以下顺序遵循@Vince Hill 的评论:
GRANT ALL ON SCHEMA some_schema TO foobar;
ALTER DEFAULT PRIVILEGES FOR USER foobar IN SCHEMA some_schema REVOKE ALL ON Tables FROM foobar;
REVOKE ALL ON SCHEMA foobar FROM foobar;
DROP USER foobar;
我无法理解为什么我,作为一个可以删除整个集群的超级用户,在没有先执行步骤 1 的情况下尝试步骤 2 时会收到权限被拒绝的错误。绝对令人抓狂,但谢天谢地解决了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.