pgsql的行级权限设置

pgsql中行级权限的应用

简介

行级安全性(RLS)是一个特性,允许您根据执行查询的用户来限制查询返回的行。

RLS 允许您,根据当前用户和由策略定义的特定条件,来控制对表中各个行的访问。

此外要注意的是,此表设置完行级权限后,对应角色才会进入设置的规则,没设置过的角色没有权限访问,可以设置一个默认database_admin角色,每次给上true的条件,表管理者没影响

语句创建

使用ALTER TABLE语句,在表上启用行级安全性:

ALTER TABLE table_name
ENABLE ROW LEVEL SECURITY;

创建安全策略

CREATE POLICY name ON table_name
USING (condition);

此外,表所有者也会绕过行级安全性。要对表所有者应用行级安全性,可以使用FORCE ROW LEVEL SECURITY选项修改表:

ALTER TABLE table_name
FORCE ROW LEVEL SECURITY;

注: 删除完表行级权限后,需要重新对角色赋值

对于fdw外联表需要关联server服务名, 和对应用户密码

对于行级权限可以单独设置select,但是同时其他权限也会没有,可以手动添加inser等权限

示例


--切换角色
 
set role postgres;

-- 创建角色 注意此时创建的角色,同时设置为了用户
CREATE ROLE def LOGIN PASSWORD 'qweasd123';

--切换角色
set role def;
--select  权限不够
select * from user_custom;

-- 创建角色用户 测试
CREATE ROLE def1 LOGIN PASSWORD 'qweasd123';

-- 创建角色用户 测试
CREATE ROLE demo1 LOGIN PASSWORD 'qweasd123';

--给予所有权限
set role postgres;
GRANT ALL ON ALL TABLES IN SCHEMA public TO def;

--开启表结构行级权限
ALTER TABLE user_custom ENABLE ROW LEVEL SECURITY;
-- 可不开启  管理员用于强制表的所有用户遵循行级安全性策略
ALTER TABLE user_custom FORCE ROW LEVEL SECURITY;

--创建行级权限 
CREATE POLICY def1 ON user_custom FOR SELECT TO def1 USING(age >= 2); 
 
 
--切换角色
set role def1;
--select 
select * from user_custom;
--age>2的数据

--切换角色
set role def;
--select 
select * from user_custom;
--无数据

--切换角色
set role demo1;
--select 
select * from user_custom;
--无权限
 

--额外查询sql

--删除权限
REVOKE ALL ON ALL TABLES IN SCHEMA public FROM def1;
--查询行级权限
SELECT * FROM pg_policies 
WHERE tablename = 'xxpta_mstr';
 
SELECT * FROM pg_policies 
WHERE policyname like 'def1%'
-- 删除
DROP POLICY IF EXISTS def1 ON user_custom;  

--查询
SELECT * FROM pg_policies 
WHERE tablename = 'user_custom' 
AND policyname = 'view_all_policy' ;
--SELECT TABLE 行级权限
SELECT 
    relname AS TableName,
    relrowsecurity AS IsRowLevelSecurityEnabled,
    relforcerowsecurity AS ForceRowLevelSecurity
FROM 
    pg_class
WHERE 
    relname = 'user_custom';
--  relname:表名。
-- relrowsecurity:若值为 true,则表示行级安全性已启用。
-- relforcerowsecurity:若值为 true,则强制所有用户遵循行级安全性策略(即使拥有 BYPASSRLS 权限也无法绕过)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值