表的行级安全策略

行级安全策略("Row-Level Security (RLS) support"

概述

        在之前版本的数据安全技术中,是通过GRANT/REVOKE指令实现的,这两个指令提供了对象级的安全限制,针对表,还提供了列级的安全限制,即行级安全的需求,也就是说不同的用户访问同一个表能看到不同的数据,这个特性在9.5中提供了支持。默认的话,表没有任何安全策略限制。

        所有对数据的操作,包括数据查询和数据更新,都受到策略的限制,如果没有配置安全策略,所有的数据查询和更新都会禁止。行级安全策略可以加在命令上,也可以加在角色上,也可以两者都加。命令可以是ALLSELECTINSERTUPDATE和DELETE,同一个策略也可以赋予多个角色。如果想忽略行级安全性机制的限制,也可以将row_security设置为off。

1、启用、禁用表的行安全策略
alter table test_tb3(表名) enable row level security ;
alter table test_tb3 disable row level security ;
2、创建表的安全策略
create policy policy3 ON test_tb3 for insert to user6 with check(id>4)(表达式);(插入操作策略)
(策略名) (表名) (策略命令)(角色名)
create policy policy1 ON test_tb3 for select TO user6 using (id='1');(查询表数据策略)
(策略名) (表名) (策略命令)(角色) (查询条件)
create policy policy1 ON test_tb3 for select TO user6 using (id='1') with check(id>4);(更新)
create policy policy1 ON test_tb3 for select TO user6 using (id='1');(删除操作策略)

注:(1)如果策略命令省略的话,默认是All,则后边不能使用with check表达式。
(2)表的行级安全策略是基于用户的对象权限的,即在使用行级安全策略之前必须该角色必须首先具有该表对象的某个或所有操作权限
(3)同一张表的多个策略是or的关系
(4)具有bypassrls权限的角色、超级用户、表的所有者都不受行安全性的限制,其中除超级用户外的其他角色在使用行级安全策略之前都必须首先具有表对象的某个或所有操作权限
(5)适用于整个表的操作不受行安全性限制(如truncate和references操作)
(6)角色可以同时指定多个
  (7)引用完整性检查(如唯一性主键约束和外检引用)总是会绕过行安全性,以确保数据完整性得到维护
(8)只有所有者才具有启用/禁用行级安全性,给表添加策略的权限。
(9)表的多个策略之间是or的关系
(10)select和delete策略不能有with check表达式
(11)insert策略不能有using表达式
(12)update策略同时接受一个using表达式和一个with check表达式
3、修改策略
(1)修改策略名称
ALTER POLICY name ON table_name RENAME TO new_name(策略新名称);
(2)修改策略
alter policy policy3 ON test_tb3 for insert to user6 with check(id>4)(表达式);(插入操作策略)
(策略名) (表名) (策略命令)(角色名)
alter policy policy1 ON test_tb3 for select TO user6 using (id='1');(查询表数据策略)
(策略名) (表名) (策略命令)(角色) (查询条件)
alter policy policy1 ON test_tb3 for select TO user6 using (id='1') with check(id>4);(更新)
alter policy policy1 ON test_tb3 for select TO user6 using (id='1');(删除操作策略)
注:修改策略名和修改策略内容不能同时进行
4、删除策略
DROP POLICY name ON table_name;
注:如果为表删除了最后一个策略,并且该表仍然通过 ALTER TABLE 启用了行级别安全性,则将使用默认拒绝策略。 ALTER TABLE ... DISABLE ROW LEVEL SECURITY 可用于禁用表的行级安全性,无论该表的策略是否存在。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值