ALTER ROW LEVEL SECURITY POLICY
功能描述
修改已有行级访问控制策略的定义,包括行级访问控制策略的名称、策略应用的用户及策略表达式等。
注意事项
表的所有者或管理员用户才能执行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类型。 | - |
示例
创建示例表all_data和用户alice、bob。
1 2 3 4 5 6 | DROP TABLE IF EXISTS all_data; CREATE TABLE all_data (a int, b int); DROP USER IF EXISTS alice CASCADE; DROP USER IF EXISTS bob CASCADE; CREATE USER alice PASSWORD '{password}'; CREATE USER bob PASSWORD '{password}'; |
开启表all_data的行级访问控制策略功能。
1 | ALTER TABLE all_data ENABLE ROW LEVEL SECURITY; |
在表all_data上创建行级访问控制策略all_data_rls。
1 | CREATE ROW LEVEL SECURITY POLICY all_data_rls ON all_data USING(b = CURRENT_USER); |
修改行级访问控制策略的名称all_data_rls为新的名称all_data_new_rls。
1 | ALTER ROW LEVEL SECURITY POLICY all_data_rls ON all_data RENAME TO all_data_new_rls; |
修改行级访问控制策略all_data_new_rls应用的用户为alice和bob。
1 | ALTER ROW LEVEL SECURITY POLICY all_data_new_rls ON all_data TO alice, bob; |
修改行级访问控制策略all_data_new_rls的过滤条件(alice和bob只能访问a列值大于100且b列值等于当前登录用户名的数据行)。
1 | ALTER ROW LEVEL SECURITY POLICY all_data_new_rls ON all_data USING (a > 100 AND b = current_user); |