更新时间:2024-11-27 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类型。

示例

创建示例用户role_a和role_b:

1
2
CREATE ROLE role_a PASSWORD '{Password}';
CREATE ROLE role_b PASSWORD '{Password}';

创建示例数据表public.all_data_t并插入数据:

1
2
3
4
CREATE TABLE public.all_data_t(id int, role varchar(100), data varchar(100));
INSERT INTO all_data_t VALUES(1, 'role_a', 'r_a_data');
INSERT INTO all_data_t VALUES(2, 'role_b', 'r_b_data');
INSERT INTO all_data_t VALUES(3, 'role_c', 'r_c_data');

创建示例行访问控制策略:

1
CREATE ROW LEVEL SECURITY POLICY all_data_t_rls ON all_data_t USING(role = CURRENT_USER);

打开行访问控制策略开关:

1
ALTER TABLE all_data_t ENABLE ROW LEVEL SECURITY;

修改行访问控制all_data_rls的名称:

1
ALTER ROW LEVEL SECURITY POLICY all_data_t_rls ON all_data_t RENAME TO all_data_t_newrls;

修改行访问控制策略影响的用户:

1
ALTER ROW LEVEL SECURITY POLICY all_data_t_newrls ON all_data_t TO role_a, role_b;

修改行访问控制策略表达式:

1
ALTER ROW LEVEL SECURITY POLICY all_data_t_newrls ON all_data_t USING (id > 100 AND role = current_user);