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

相关推荐
数据智能老司机2 小时前
CockroachDB权威指南——SQL调优
数据库·分布式·架构
数据智能老司机2 小时前
CockroachDB权威指南——应用设计与实现
数据库·分布式·架构
数据智能老司机2 小时前
CockroachDB权威指南——CockroachDB 模式设计
数据库·分布式·架构
数据智能老司机21 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机21 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
松果猿1 天前
空间数据库学习(二)—— PostgreSQL数据库的备份转储和导入恢复
数据库
无名之逆1 天前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
s9123601011 天前
rust 同时处理多个异步任务
java·数据库·rust
数据智能老司机1 天前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构
hzulwy1 天前
Redis常用的数据结构及其使用场景
数据库·redis