按用户和行数据列出的Postgresql行策略
我的postgresql 9.5数据库中有一个名为按用户和行数据列出的Postgresql行策略,postgresql,postgresql-9.5,Postgresql,Postgresql 9.5,我的postgresql 9.5数据库中有一个名为products的表。该表字段如下所示: id name sales_area 1 prod1 A1 2 prod2 A1 3 prod3 A2 4 prod4 A3 身份证 名字 销售区 数据如下: id name sales_area 1
products
的表。该表字段如下所示:
id name sales_area
1 prod1 A1
2 prod2 A1
3 prod3 A2
4 prod4 A3
- 身份证
- 名字
- 销售区
id name sales_area
1 prod1 A1
2 prod2 A1
3 prod3 A2
4 prod4 A3
我想创建一个名为user1的数据库用户,这个用户应该只选择、更新和删除A1销售区域
datas。其他数据库用户将选择、更新和删除所有数据
使用策略是否可以使用此规则?如何创建?关于权限我不确定,但您也可以创建一个视图,如下所示,并向他们授予“user1”访问新视图的权限
create table tx1(id int,name varchar(20),sales_area varchar(20));
insert into tx1 values(1,'prod1','A1');
insert into tx1 values(2,'prod2','A1');
insert into tx1 values(3,'prod3','A2');
insert into tx1 values(4,'prod4','A3');
create view tx1_view
as select * from tx1 where sales_area='A1';
insert into tx1_view values(5,'prod5','A1');
select * from tx1_view;
我认为这可以通过使用行级安全性来实现,如下所示:
ALTER TABLE products ENABLE ROW LEVEL SECURITY;
CREATE POLICY for_user1 ON products AS PERMISSIVE
FOR ALL TO PUBLIC
USING (current_user <> 'user1' OR sales_area = 'A1');
altertable产品支持行级安全;
为产品上的_user1创建许可策略
面向公众
使用(当前用户“user1”或销售区域=“A1”);
然后,user1
只能访问sales\u区域
A1,其他所有人都可以访问所有内容
一些解释:
表示“对于所有操作”,请参见: 对策略使用对于所有
意味着它将应用于所有命令,而不管命令的类型如何ALL
- 缺少
子句并不意味着不检查数据修改。再次引用文档中的一段话:WITH CHECK
策略都将应用于查询的选择端和修改端,如果只定义了一个所有
表达式,则在这两种情况下都使用using表达式使用