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

PostgreSQL 15:如何撤销角色的GRANT OPTION权限?

解决PostgreSQL 15撤销角色GRANT OPTION权限的问题

你的原语句无效,核心原因是语法使用不当,针对不同场景的正确操作如下:

1. 撤销角色在Schema本身的GRANT OPTION权限

如果目标是收回角色对schema_name这个Schema本身(比如创建对象、使用Schema的权限)的授权能力,需使用ALL PRIVILEGES而非ALL,语法如下:

REVOKE GRANT OPTION FOR ALL PRIVILEGES ON SCHEMA schema_name FROM role_name;

若只想撤销特定权限的授权能力(比如仅USAGE或CREATE),可指定具体权限:

-- 仅撤销USAGE权限的GRANT OPTION
REVOKE GRANT OPTION FOR USAGE ON SCHEMA schema_name FROM role_name;
-- 仅撤销CREATE权限的GRANT OPTION
REVOKE GRANT OPTION FOR CREATE ON SCHEMA schema_name FROM role_name;

2. 撤销角色在Schema下所有对象的GRANT OPTION权限

如果目标是收回角色对schema_name下所有表、视图等对象的授权能力,需针对Schema内的对象集合操作:

-- 针对所有表
REVOKE GRANT OPTION FOR ALL PRIVILEGES ON ALL TABLES IN SCHEMA schema_name FROM role_name;
-- 针对所有序列
REVOKE GRANT OPTION FOR ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA schema_name FROM role_name;

3. 级联撤销依赖权限

如果该角色已经将权限授予了其他用户,直接执行上述语句会报错,需添加CASCADE参数级联撤销下游的授权:

REVOKE GRANT OPTION FOR ALL PRIVILEGES ON SCHEMA schema_name FROM role_name CASCADE;

前置检查:确认角色的授权权限

执行以下查询,可明确角色当前拥有哪些带GRANT OPTION的权限,方便精准操作:

-- 查看Schema级权限
SELECT nspname, privilege_type, is_grantable
FROM information_schema.schema_privileges
WHERE nspname = 'schema_name' AND grantee = 'role_name';

-- 查看Schema下的表权限
SELECT table_name, privilege_type, is_grantable
FROM information_schema.table_privileges
WHERE table_schema = 'schema_name' AND grantee = 'role_name';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 00:27:05