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

相关推荐
encoding-console4 分钟前
欧拉环境(openEuler 22.03 LTS SP3)安装移动磐维数据库(PanWeiDB_V2.0-S2.0.2_B01)步骤
数据库·虚拟机·欧拉·磐维数据库
辰哥单片机设计17 分钟前
PTC加热片详解(STM32)
数据库·mongodb
二年级程序员23 分钟前
MySQL 事务(详细版)
数据库
东方佑37 分钟前
使用Python创建带边框样式的Word表格
数据库·python·word
柳如烟@1 小时前
Docker安装ES :确保 Kibana 正确连接 Elasticsearch
运维·数据库·elasticsearch·docker·容器·kibana
快乐点吧1 小时前
【MongoDB】windows安装、配置、启动
数据库·windows·mongodb
yangmf20401 小时前
私有知识库 Coco AI 实战(二):摄入 MongoDB 数据
数据库·人工智能·mongodb·coco ai
努力进修1 小时前
【金仓数据库征文】金仓数据库:开启未来技术脑洞,探索数据库无限可能
数据库·金仓数据库 2025 征文·数据库平替用金仓
键盘飞行员1 小时前
使用 Node、Express 和 MongoDB 构建一个项目工程
数据库·mongodb·express
小白教程1 小时前
MySQL主从数据库配置教程
数据库·mysql·adb·mysql8.0主从配置