RLS(Row Level Security) 在 PostgreSQL 9.5 中的使用

PostgreSQL 9.5 更新增加了许多新的功能,比如增加新的JSONB函数,新的GROUPING函数等。RLS(Row Level Security)功能在此次更新中也得到相应的提升。RLS是一种表格行安全机制,利用为每一个表加上你需要使用数据库角色作为一个主要的安全机制。

以下是一个RLS示例:

screenshot

创建表、修改表、创建策略:使用RLS

 CREATE TABLE ratings2 (  
  user_role_name NAME,
  rating_type_name TEXT,
  artist_name TEXT,
  rating INTEGER
);

ALTER TABLE ratings2 ENABLE ROW LEVEL SECURITY;

CREATE POLICY ratings2_user ON ratings2  
  USING(user_role_name = current_user);

上述封装了RLS最简单的例子。策略为每行返回一个布尔值。

这还可以通过声明每一种类型的声明以及它如何被授权的方式来定义。如果需要,选择和插入可以创建一个可读的附加表限于个人用户:

CREATE POLICY ratings2_user_select ON ratings2  
  FOR SELECT
  USING(user_role_name = current_user);

CREATE POLICY ratings2_user_insert ON ratings2  
  FOR INSERT 
  WITH CHECK(user_role_name = current_user);

或者,采用以下方式:

CREATE POLICY ratings2_user ON ratings2  
  USING(pg_has_role(current_user, user_role_name, 'member'));

用户组权限的改变,使用范围也随之改变。

CREATE ROLE group1;  
GRANT ALL ON ratings2 TO group1;

CREATE ROLE music1 LOGIN PASSWORD 'change';  
GRANT group1 to music1;

CREATE ROLE music2 LOGIN PASSWORD 'change';  
GRANT group1 TO music2;

====================================分割线================================
文章转载自 开源中国社区[http://www.oschina.net]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值