除了数据表层级的粗粒度权限外,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 角色的用户在执行查询时,系统会自动附加过滤条件,使其仅能感知和操作与其自身用户名相符的账户数据。