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

PostgreSQL:如何用规则实现带条件的列级权限控制?

实现步骤

1. 开启表的行级安全(RLS)

首先需要启用employee表的行级安全,这是实现自定义列返回逻辑的基础:

ALTER TABLE employee ENABLE ROW LEVEL SECURITY;

2. 调整admin角色的列权限

原来的权限限制admin仅能查询empno、ename、address,现在需要补充salary列的SELECT权限,避免权限错误:

GRANT SELECT (empno, ename, address, salary) ON employee TO admin;

3. 创建行级安全策略实现条件返回逻辑

针对admin角色创建SELECT策略,重定义salary列的返回值——仅当ename='clark'时返回真实薪资,其余行返回NULL:

CREATE POLICY admin_salary_restriction ON employee
FOR SELECT TO admin
SELECT (
    empno,
    ename,
    address,
    CASE WHEN ename = 'clark' THEN salary ELSE NULL END AS salary
);

测试验证

切换到admin角色执行查询:

SELECT empno, ename, address, salary FROM employee;

查询结果中,仅ename='clark'的行显示真实薪资,其余行salary列值为NULL,且不会触发权限错误。

补充说明

  • 若employee表之前存在其他行级安全策略,需确保新策略与原有策略逻辑兼容(可使用OR/AND组合,或调整策略优先级)。
  • 该方案依赖PostgreSQL 12及以上版本,因为12+才支持在CREATE POLICY的SELECT子句中自定义列投影表达式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:32:07