当试图放弃用户" xyz"在Redshift数据库中,我收到错误消息:
用户' xyz'因为用户拥有某个对象而无法删除。
如果用户拥有某个对象,请首先删除该对象,或在删除原始用户之前将其所有权更改为其他用户
我如何知道用户拥有哪些对象(模式,表,视图,UDF?)?
答案 0 :(得分:4)
在我的情况下,用户没有拥有任何表格或视图或我能找到的任何其他内容。我猜对了,被授予权限意味着用户拥有"拥有"一些东西,因为我用这个解决了这个问题:
revoke all privileges on database <database> from '<username>'
之后drop user
命令有效。
答案 1 :(得分:3)
您可以在 pg_tables 中查看特定用户拥有的表格和视图 和 pg_views 系统表。 (还有 pg_udf ,但它没有任何对特定用户的引用)
select
case when schemaname='public' then ''
else schemaname+'.' end+tablename
from pg_tables where tableowner = 'xyz'
union
select
case when schemaname='public' then ''
else schemaname+'.' end+viewname
from pg_views where viewowner = 'xyz'
答案 2 :(得分:2)
由于下面以我非常简单的方式解决了这个问题,我也将这个回复复制到这个帖子中:
在尝试了无数帖子和帖子的建议后,awslabs的 aws-redshift-utils 以admin.v_find_dropuser_objs视图的形式提供了缓解。它立即识别出剩余的依赖关系,从而可以删除有问题的用户。
答案 3 :(得分:0)
AWS 的以下博客文章非常清楚地解释了如何解决此问题: https://aws.amazon.com/premiumsupport/knowledge-center/redshift-user-cannot-be-dropped/
他们的脚本 v_find_dropuser_objs.sql
link here 返回一个很好的表,包含对象类型、对象所有者、用户 ID、模式名称、对象名称、ddl 等。