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

PostgreSQL 15分区表权限配置:限制用户仅更新指定分区

分区表权限控制:仅允许用户通过父表更新指定分区

原操作失效原因

在PostgreSQL中,对分区父表执行DML操作时,权限校验仅针对父表本身,不会在查询规划阶段提前检查目标子分区的权限。只要用户拥有父表的UPDATE权限,即使没有对应子分区的权限,UPDATE父表的语句也会被允许——后续路由到子分区执行时不会再做权限校验,这就是my_user能更新data_v1分区的核心原因。

正确配置步骤

要实现用户仅能通过父表更新指定分区,需结合撤销父表权限、子分区权限授予和行级安全策略(RLS),具体操作如下:

  1. 撤销my_user对父表data的UPDATE权限
REVOKE UPDATE ON data FROM my_user;
  1. 确保my_user拥有目标分区data_v0的UPDATE权限(原配置已完成,可重复执行确认)
GRANT UPDATE ON data_v0 TO my_user;
  1. 为父表启用行级安全,并创建策略限制my_user仅能操作version='v0'的行
-- 开启父表的行级安全
ALTER TABLE data ENABLE ROW LEVEL SECURITY;

-- 创建策略:允许my_user查看、更新version为'v0'的行
CREATE POLICY data_v0_access_policy ON data
FOR ALL TO my_user
USING (version = 'v0')
WITH CHECK (version = 'v0');

验证效果

以my_user身份登录后执行以下操作:

  • 正常执行(更新data_v0分区):
UPDATE data SET payload = 'user update' WHERE version = 'v0';
  • 执行失败(无匹配行或权限拦截):
UPDATE data SET payload = 'user update' WHERE version = 'v1';
  • 直接操作data_v1分区报错(权限不足):
UPDATE data_v1 SET payload = 'user update';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:23:13