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;

示例

--切换角色

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 权限也无法绕过)

相关推荐
岁岁种桃花儿20 小时前
MySQL从入门到精通系列:InnoDB记录存储结构
数据库·mysql
jiunian_cn21 小时前
【Redis】hash数据类型相关指令
数据库·redis·哈希算法
冉冰学姐21 小时前
SSM在线影评网站平台82ap4(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm框架·在线影评平台·影片分类
知识分享小能手1 天前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019数据库的操作(2)
数据库·学习·sqlserver
踩坑小念1 天前
秒杀场景下如何处理redis扣除状态不一致问题
数据库·redis·分布式·缓存·秒杀
萧曵 丶1 天前
MySQL 语句书写顺序与执行顺序对比速记表
数据库·mysql
Wiktok1 天前
MySQL的常用数据类型
数据库·mysql
曹牧1 天前
Oracle 表闪回(Flashback Table)
数据库·oracle
J_liaty1 天前
Redis 超详细入门教程:从零基础到实战精通
数据库·redis·缓存
m0_706653231 天前
用Python批量处理Excel和CSV文件
jvm·数据库·python