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

Redshift中执行Revoke命令无法移除用户的Schema访问权限

问题排查与解决方法

针对你遇到的REVOKE命令未生效、用户仍保留Schema权限的问题,核心原因通常是权限来源不止你处理的安全组,以下是具体排查点和解决步骤:

1. 检查用户是否为超级用户

如果KYKE是超级用户,所有REVOKE命令都会无效——超级用户默认拥有所有权限且无法被回收。执行以下SQL确认:

SELECT rolsuper FROM pg_roles WHERE rolname = 'KYKE';

如果返回true,先取消超级用户权限:

ALTER ROLE KYKE NOSUPERUSER;

2. 排查用户是否继承了其他角色的权限

用户可能属于多个安全组/角色,你只移除了BAMKT,但其他角色仍在给KYKE授权。执行以下SQL查询KYKE所属的所有角色:

SELECT 
  r.rolname AS inherited_role
FROM pg_auth_members am
JOIN pg_roles r ON am.roleid = r.oid
WHERE am.member = (SELECT oid FROM pg_roles WHERE rolname = 'KYKE');

如果发现其他无关角色,执行ALTER GROUP [角色名] DROP USER KYKE;移除关联。

3. 彻底回收所有直接与间接权限

你之前的命令只覆盖了表和Schema的USAGE权限,可能遗漏了序列、函数等对象的权限,或者未彻底回收Schema本身的所有权限。执行以下完整回收命令:

-- 回收Schema下所有表的权限
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA BAMKT FROM KYKE;
-- 回收Schema下所有序列的权限
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA BAMKT FROM KYKE;
-- 回收Schema下所有函数的权限
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA BAMKT FROM KYKE;
-- 回收Schema本身的所有权限
REVOKE ALL PRIVILEGES ON SCHEMA BAMKT FROM KYKE;

4. 检查PUBLIC角色的默认权限

所有用户默认属于PUBLIC角色,如果BAMKT Schema给PUBLIC分配了权限,KYKE会通过这个角色继承权限。执行以下SQL检查:

SELECT 
  nspname AS schema_name,
  privacl
FROM pg_namespace
WHERE nspname = 'BAMKT' AND nspacl LIKE '%PUBLIC=%';

如果存在PUBLIC的权限,可选择:

  • 回收PUBLIC的权限(影响所有普通用户):
    REVOKE ALL PRIVILEGES ON SCHEMA BAMKT FROM PUBLIC;
    
  • 单独拒绝KYKE的权限(不影响其他用户):
    DENY ALL PRIVILEGES ON SCHEMA BAMKT TO KYKE;
    

5. 验证权限是否清除

执行以下SQL确认KYKE已无BAMKT相关权限:

-- 检查表权限
SELECT schemaname, tablename, privilege_type 
FROM information_schema.table_privileges 
WHERE grantee = 'KYKE' AND schemaname = 'BAMKT';

-- 检查Schema权限
SELECT nspname, privacl 
FROM pg_namespace 
WHERE nspname = 'BAMKT' AND nspacl LIKE '%KYKE=%';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:38:20