PostgreSQL 18 中文参考文档(未翻译部分保留英文)🌐 切换到英文原版 →

5.9. 行安全性策略 #

除了数据表层级的粗粒度权限外,PostgreSQL 还支持行级安全性策略(Row-Level Security,简称 RLS)。启用 RLS 后,系统会根据当前执行 SQL 的数据库用户的角色身份,动态在查询执行计划的最底层透明附加数据过滤表达式,实现细粒度的行级数据权限隔离。

启用行级安全分为两步: 首先在表级别开启行安全性开关:

ALTER TABLE accounts ENABLE ROW LEVEL SECURITY;

随后通过 CREATE POLICY 创建具体的行访问策略:

CREATE POLICY account_managers ON accounts TO managers
    USING (manager = current_user);

在上述策略下,属于 managers 角色的用户在执行查询时,系统会自动附加过滤条件,使其仅能感知和操作与其自身用户名相符的账户数据。