You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Redshift中无法删除拥有对象的用户,如何彻底取消其数据库访问权限?

解决Redshift无法删除用户及彻底禁用访问的问题

第一步:立即禁用用户访问(优先满足安全需求)

不用先处理所有权问题,直接执行以下命令让用户彻底无法登录数据库:

ALTER USER person_username NOLOGIN;

执行后,该用户立刻无法通过任何方式访问Redshift,不管他是否拥有对象,先解决核心安全需求。

第二步:转移用户拥有的所有对象所有权

因为直接删除用户时提示“用户拥有对象”,需要把该用户名下所有对象(表、视图、序列等)的所有权转移给其他用户/角色:

  1. 先查询该用户拥有的所有对象(含所属模式):
SELECT 
  n.nspname AS schema_name,
  c.relname AS object_name,
  c.relkind AS object_type
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid
WHERE c.relowner = (SELECT usesysid FROM pg_catalog.pg_user WHERE usename = 'person_username');
  1. 生成批量转移所有权的SQL语句:
    将下面语句中的admin_user替换为你要转移到的目标用户或角色,执行后会生成所有需要执行的ALTER命令:
SELECT 
  'ALTER ' || 
  CASE c.relkind 
    WHEN 'r' THEN 'TABLE'
    WHEN 'v' THEN 'VIEW'
    WHEN 'S' THEN 'SEQUENCE'
    WHEN 'm' THEN 'MATERIALIZED VIEW'
  END || 
  ' "' || n.nspname || '"."' || c.relname || '" OWNER TO admin_user;' AS alter_command
FROM pg_catalog.pg_class c
JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid
WHERE c.relowner = (SELECT usesysid FROM pg_catalog.pg_user WHERE usename = 'person_username');
  1. 执行生成的所有ALTER命令,完成所有权转移。

第三步:删除用户

所有权转移完成后,执行删除命令即可成功删除用户:

DROP USER person_username;

补充说明

  • 若不想彻底删除用户,仅需永久禁用访问,只执行第一步的NOLOGIN命令即可,无需后续操作。
  • 上述批量处理方式会自动覆盖该用户所有模式下的对象,无需逐个指定模式处理。

内容的提问来源于stack exchange,提问作者Luc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 11:05:10