设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

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

2016-4-21 22:03| 发布者: joejoe0332| 查看: 858| 评论: 0|原作者: oschina|来自: oschina

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

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


以下是一个RLS示例:

example_schema


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

1
2
3
4
5
6
7
8
9
10
11
 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最简单的例子。策略为每行返回一个布尔值。

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

1
2
3
4
5
6
7
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);


或者,采用以下方式:

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


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

1
2
3
4
5
6
7
8
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;


原英文地址:https://www.compose.io/articles/row-level-security-with-postgresql-95/


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部