ALTER ROW LEVEL SECURITY POLICY
Description
Alters an existing row-level security policy, including the policy name and the users and expressions affected by the policy.
Precautions
Only the table owner or a system administrator can perform this operation.
Syntax
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 ) ]; Parameters
- policy_name
- table_name
Specifies the name of a table to which a row-level security policy is applied.
- new_policy_name
- role_name
Specifies names of users affected by a row-level security policy. PUBLIC indicates that the row-level security policy will affect all users.
- using_expression
Specifies an expression defined for a row-level security policy. The return value is of the Boolean type.
Examples
-- Create data table all_data. openGauss=# CREATE TABLE all_data(id int, role varchar(100), data varchar(100)); -- Create a row-level security policy to specify that the current user can view only their own data. openGauss=# CREATE ROW LEVEL SECURITY POLICY all_data_rls ON all_data USING(role = CURRENT_USER); openGauss=# \d+ all_data Table "public.all_data" Column | Type | Modifiers | Storage | Stats target | Description --------+------------------------+-----------+----------+--------------+------------- id | integer | | plain | | role | character varying(100) | | extended | | data | character varying(100) | | extended | | Row Level Security Policies: POLICY "all_data_rls" USING (((role)::name = "current_user"())) Has OIDs: no Location Nodes: ALL DATANODES Options: orientation=row -- Create users alice and bob. openGauss=# CREATE ROLE alice WITH PASSWORD "********"; openGauss=# CREATE ROLE bob WITH PASSWORD "********"; -- Change the name of the all_data_rls policy. openGauss=# ALTER ROW LEVEL SECURITY POLICY all_data_rls ON all_data RENAME TO all_data_new_rls; -- Change the users affected by the row-level security policy. openGauss=# ALTER ROW LEVEL SECURITY POLICY all_data_new_rls ON all_data TO alice, bob; openGauss=# \d+ all_data Table "public.all_data" Column | Type | Modifiers | Storage | Stats target | Description --------+------------------------+-----------+----------+--------------+------------- id | integer | | plain | | role | character varying(100) | | extended | | data | character varying(100) | | extended | | Row Level Security Policies: POLICY "all_data_new_rls" TO alice,bob USING (((role)::name = "current_user"())) Has OIDs: no Location Nodes: ALL DATANODES Options: orientation=row, enable_rowsecurity=true -- Modify the expression defined for the row-level security policy. openGauss=# ALTER ROW LEVEL SECURITY POLICY all_data_new_rls ON all_data USING (id > 100 AND role = current_user); openGauss=# \d+ all_data Table "public.all_data" Column | Type | Modifiers | Storage | Stats target | Description --------+------------------------+-----------+----------+--------------+------------- id | integer | | plain | | role | character varying(100) | | extended | | data | character varying(100) | | extended | | Row Level Security Policies: POLICY "all_data_new_rls" TO alice,bob USING (((id > 100) AND ((role)::name = "current_user"()))) Has OIDs: no Location Nodes: ALL DATANODES Options: orientation=row, enable_rowsecurity=true -- Drop users alice and bob. openGauss=# DROP ROLE alice, bob; -- Drop the policy. openGauss=# DROP ROW LEVEL SECURITY POLICY all_data_new_rls ON all_data; -- Drop the all_data table. openGauss=# DROP TABLE all_data;
Helpful Links
CREATE ROW LEVEL SECURITY POLICY and DROP ROW LEVEL SECURITY POLICY