更新时间:2026-04-10 GMT+08:00
ALTER ROW LEVEL SECURITY POLICY
功能描述
对已存在的行访问控制策略(包括行访问控制策略的名称,行访问控制指定的用户,行访问控制的策略表达式)进行修改。
注意事项
表的所有者或管理员用户才能进行此操作。
语法格式
1 2 3 4 5 | ALTER [ ROW LEVEL SECURITY ] POLICY [ IF EXISTS ] policy_name ON table_name RENAME TO new_policy_name ALTER [ ROW LEVEL SECURITY ] POLICY policy_name ON table_name [ TO { role_name | PUBLIC } [, ...] ] [ USING ( using_expression ) ] |
参数说明
| 参数 | 描述 | 取值范围 |
|---|---|---|
| policy_name | 行访问控制策略名称。 | 字符串,符合标识符命名规范。 |
| table_name | 行访问控制策略的表名。 | 已存在的表名。 |
| new_policy_name | 新的行访问控制策略名称。 | - |
| role_name | 行访问控制策略应用的数据库用户,可以指定多个用户,PUBLIC表示应用到所有用户。 | 已存在的角色名。 |
| using_expression | 行访问控制的表达式,返回值为boolean类型。 | - |
示例
创建示例表和用户信息。
1 2 3 4 5 6 | DROP TABLE IF EXISTS all_data; CREATE TABLE all_data (a int, b int); DROP USER IF EXIST alice CASCADE; DROP USER IF EXIST bob CASCADE; CREATE USER alice PASSWORD '{password}'; CREATE USER bob PASSWORD '{password}'; |
打开行访问控制策略开关:
1 | ALTER TABLE all_data ENABLE ROW LEVEL SECURITY; |
创建行级访问控制。
1 | CREATE ROW LEVEL SECURITY POLICY all_data_rls ON all_data USING(b = CURRENT_USER); |
修改行访问控制all_data_rls的名称:
1 | ALTER ROW LEVEL SECURITY POLICY all_data_rls ON all_data RENAME TO all_data_new_rls; |
修改行访问控制策略影响的用户:
1 | ALTER ROW LEVEL SECURITY POLICY all_data_new_rls ON all_data TO alice, bob; |
修改行访问控制策略表达式:
1 | ALTER ROW LEVEL SECURITY POLICY all_data_new_rls ON all_data USING (a > 100 AND b = current_user); |