行级安全性
行级安全性
一 是什么
第一句话:
行级别的安全性允许数据库管理员根据用户的身份和其他条件,限制对表中特定行的访问
第二句话:
RLS是一种基于行的安全策略,通过定义策略来限制数据库用户对表数据的访问权限。
优点:
在启用RLS之前,数据库的权限控制主要在表级别,即限制用户是否可以访问某个表
在启用RLS之后,不同的用户可以在行级别,访问同一表中的不同数据
二 怎么用
概念性使用:
第一步:对某个表启用行级安全性
alter table table_name enable ROW LEVEL SECURITY;
第二步:创建策略
(在某张表上针对某个操作给某个用户在某个范围的数据 创建策略)
create policy policy_name on table_name
for {select/insert/update/delete}
to {user_name}
USING (condition);
FOR 指定操作类型,可以是 SELECT、INSERT、UPDATE 或 DELETE。
TO 指定该策略适用的角色。
USING 指定条件,决定哪些行是可见或可操作的。
实际使用示例:
创造条件
drop table if exists temp.departments;CREATE TABLE temp.departments (id SERIAL PRIMARY KEY,name VARCHAR(255) NOT NULL UNIQUE,manager VARCHAR(255) NOT NULL
);INSERT INTO temp.departments(name, manager)
VALUES('Sales', 'alice'),('Marketing', 'bob'),('IT', 'jack'),('test','sys');select * from temp.departments;创建一个策略,让sys用户只能看到manager为sys的行
https://juejin.cn/post/7485776678872301603
表数据如下:
开启行安全性
# 全表开启行安全性
alter table temp.departments enable row level security;
# 按照需求开启行安全性 让sys用户只能看到manager为sys的行
create policy departments_manager on temp.departments
for select
to sys
using(manager=current_user)
验证:行级安全性的前提是,安全策略指定的用户对该表已有指定权限
#先给sys用户授予temp.departments表的select权限
grant usage on schema temp to sys;
grant select on temp.departments to sys;
#再用sys用户登录再查看该表
select * from temp.departments;
可参考:http://xiwangwangguoyuan.com/article/jpsphe.html