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

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

以下是一个RLS示例:

创建表、修改表、创建策略:使用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]

时间: 2024-09-22 03:46:23

RLS(Row Level Security) 在 PostgreSQL 9.5 中的使用的相关文章

PostgreSQL Fine-Grained Table,Column,Row Level Audit

通过配置用户级或数据库级的参数可以实现用户以及数据库级别的审计, 但是这样的粒度可能还是太粗糙了. 如果需要更细致的审计, 例如针对某些表的操作审计, 某些用户对某些表的审计, 或者仅仅当某个列的值发生变化时才被审计(记录到LOG或表里面, 本文的例子是将审计信息输出到LOG, 使用raise). 这样的需求可以通过触发器来实现. 接下来以PostgreSQL 9.2为例进行讲解. # 基础的参数配置 log_destination = 'csvlog' logging_collector =

PostgreSQL 长事务中DML产生的数据无法被及时纳入统计信息导致的问题

PostgreSQL最低的事务隔离级别是read committed,因此在事务中产生的数据变化,在外部是不可见的,包括auto analyze也是不可见的.例子: postgres=# show autovacuum; autovacuum ------------ on (1 row) postgres=# show autovacuum_naptime ; autovacuum_naptime -------------------- 1s (1 row) 会话A: postgres=#

search_path在PostgreSQL函数开发中的注意事项

背景 PostgreSQL 与大多数数据库一样,通过schema,逻辑上划分对象的归属,如图. 用户还可以参考<PostgreSQL 逻辑结构 和 权限体系 介绍>https://yq.aliyun.com/articles/41210 因为有了schema的概念,在访问数据库中的对象时,我们需要指定是哪个schema下面的. 例如schema_a.table. 为了方便用户使用,PostgreSQL 还有一个客户端的环境参数叫search_path,用来控制搜索路径的顺序. 例如 searc

引发的异常:“System.ServiceModel.Security.MessageSecurityException”(位于 mscorlib.dll 中)

问题描述 服务端配置<system.serviceModel><services><servicename="KeYun.Services.Service"behaviorConfiguration="WSBehavior"><endpointaddress="mex"binding="mexHttpBinding"contract="IMetadataExchange&qu

PostgreSQL查看DB中trigger

b2c_product=# select t.tgname, n.nspname, c.relname, p.proname from pg_trigger t join pg_class c on t.tgrelid = c.oid join pg_namespace n on c.relnamespace = n.oid join pg_proc p on t.tgfoid = p.oid where t.tgisinternal = 'f' ; tgname | nspname | rel

PostgreSQL 9.5 新特性汇总 [转]

PostgreSQL 9.5快发布了,很多给力的功能. 原文 https://wiki.postgresql.org/wiki/What%27s_new_in_PostgreSQL_9.5 (This page is currently under development ahead of the release of PostgreSQL 9.5) This page contains an overview of PostgreSQL Version 9.5's features, incl

一天学会PostgreSQL应用开发与管理 - 5 数据定义

背景 本章大纲 1. 数据类型 2. 数据操作 3. 表管理 4. 视图 5. 约束 6. RLS(行安全策略) 第三章:数据定义 1. 数据类型 https://www.postgresql.org/docs/9.6/static/datatype.html 1.数值 Name Storage Size Description Range smallint 2 bytes small-range integer -32768 to +32767 integer 4 bytes typical

Sql Server 2016新功能之Row-Level Security(值得关注)_MsSql

Sql Server 2016 有一个新功能叫 Row-Level Security ,大概意思是行版本的安全策略(原来我是个英语渣_(:з」∠)_) 直接上例子.这个功能相当通过对表添加一个函数作为过滤规则,使得拥有不同条件的用户(或者登录名) 之类的,只能获取到符合条件的数据.相对来说是提供了那么一点的便捷性,当然也增加了数据的安全性,相当于每个用户连接进来只能看到 符合规则的数据(当然,这里的用户只是一个举例.其实是可以通过编写过滤函数来实现的) 举个例子 有三个用户 Sales1 ,Sa

PostgreSQL SQL 语言:数据定义

本文档为PostgreSQL 9.6.0文档,本转载已得到原译者彭煜玮授权. 1.表基础 关系型数据库中的一个表非常像纸上的一张表:它由行和列组成.列的数量和顺序是固定的,并且每一列拥有一个名字.行的数目是变化的,它反映了在一个给定时刻表中存储的数据量.SQL并不保证表中行的顺序.当一个表被读取时,表中的行将以非特定顺序出现,除非明确地指定需要排序.这些将在Chapter 7介绍.此外,SQL不会为行分配唯一的标识符,因此在一个表中可能会存在一些完全相同的行.这是SQL之下的数学模型导致的结果,