更新时间: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); |