CREATE RLS POLICY
创建新的行级安全策略以提供对数据库对象的精细访问。
超级用户和具有 sys:secadmin 角色的用户或角色可以创建策略。
语法
CREATE RLS POLICY policy_name [ WITH (column_name data_type [, ...]) [ [AS] relation_alias ] ] USING ( using_predicate_exp )
参数
- policy_name
-
策略的名称。
- WITH (column_name data_type [, ...])
-
指定 column_name 和 data_type 引用策略附加到的表的列。
仅当 RLS 策略没有引用策略附加到的表的任何列时,您才可以省略 WITH 子句。
- AS relation_alias
-
为 RLS 策略将附加到的表指定可选别名。
- USING ( using_predicate_exp )
-
指定应用于查询的 WHERE 子句的筛选器。Amazon Redshift 会在查询级别的用户谓词之前应用策略谓词。例如,
current_user = ‘joe’ and price > 10
限制 Joe 只能查看价格高于 10 美元的记录。
使用说明
在使用 CREATE RLS POLICY 语句时,请遵守以下规则:
Amazon Redshift 支持可以作为查询的 WHERE 子句的组成部分的筛选器。
所有附加到表的策略都必须使用相同的表别名创建。
您不需要对查找表的 SELECT 权限。当您创建策略时,Amazon Redshift 会授予对相应策略的查找表的 SELECT 权限。查找表是在策略定义中使用的表对象。
Amazon Redshift 行级安全性不支持策略定义中的以下对象类型:目录表、跨数据库关系、外部表、常规视图、后期绑定视图、已开启 RLS 策略的表以及临时表。
示例
以下 SQL 语句为 CREATE RLS POLICY 示例创建了表、用户和角色。
-- Create users and roles reference in the policy statements. CREATE ROLE analyst; CREATE ROLE consumer; CREATE USER bob WITH PASSWORD 'Name_is_bob_1'; CREATE USER alice WITH PASSWORD 'Name_is_alice_1'; CREATE USER joe WITH PASSWORD 'Name_is_joe_1'; GRANT ROLE sys:secadmin TO bob; GRANT ROLE analyst TO alice; GRANT ROLE consumer TO joe; GRANT ALL ON TABLE tickit_category_redshift TO PUBLIC;
以下示例创建了一个名为 policy_concerts 的策略。
CREATE RLS POLICY policy_concerts WITH (catgroup VARCHAR(10)) USING (catgroup = 'Concerts');