Redshift - 用户" xyz"因为用户拥有某个对象而无法删除

时间:2015-11-24 12:59:14

标签: amazon-redshift

当试图放弃用户" xyz"在Redshift数据库中,我收到错误消息:

  

用户' xyz'因为用户拥有某个对象而无法删除。

根据documentation

  

如果用户拥有某个对象,请首先删除该对象,或在删除原始用户之前将其所有权更改为其他用户

我如何知道用户拥有哪些对象(模式,表,视图,UDF?)?

4 个答案:

答案 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 等。