PostgreSQL数据库创建只读用户的权限安全隐患

2024-05-06 06:28

本文主要是介绍PostgreSQL数据库创建只读用户的权限安全隐患,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PostgreSQL数据库模拟备库创建只读用户存在的权限安全隐患

    • default_transaction_read_only
    • 权限授权
    • 版本变更说明

看腻了就来听听视频演示吧:https://www.bilibili.com/video/BV1ZJ4m1578H/

default_transaction_read_only

创建只读用户,参照备库只读模式。有个简单的方式就是直接set参数:default_transaction_read_only,但这里有个安全隐患问题:在开启事务的场景下可以调整事务的读写权限。

  1. 硬锁定,直接将数据库切换到恢复模式(备库),绝对不会有写操作出现。
  2. 软锁定,设置default_transaction_read_only为on,默认开启的事务为只读事务。用户如果使用begin transaction read write可破解。
drop owned by u_readonly;
drop user IF EXISTS u_readonly;
-- 创建只读用户:授予所有权限(管理员)再将其设置为只读用户(整个实例的只读用户)
create user u_readonly Superuser password 'Test@123';
alter user u_readonly set default_transaction_read_only = on;
-- 单个数据库的只读用户(推荐使用),将库的所有者的权限给予只读用户即可
create user u_readonly password 'Test@123';
grant db_user to u_readonly;
alter user u_readonly set default_transaction_read_only = on;\c - u_readonly
-- 漏洞:开启事务 set 或begin transaction read write;后有写权限
begin;
set TRANSACTION READ WRITE;
create table public.t_hhh(id int);

image.png

权限授权

drop owned by u2_readonly;
drop user IF EXISTS u2_readonly;
-- 默认所有用户都有在public模式下create权限,需先回收,PG15已回收该权限
revoke create on schema public from public;
-- 若其他用户需要使用public模式会受到影响,需要重新授权
grant create on schema public to user_name;
-- 创建普通用户
CREATE user u2_readonly password 'Test@123'; -- 针对所有数据可读,PG14新增读写角色:pg_read_all_data(读权限) / pg_write_all_data(写权限)
grant pg_read_all_data to u2_readonly;-- 部分数据可读:先授予模式的使用权限
grant USAGE on SCHEMA 模式名 to u2_readonly;
-- 再授予模式下现有表的查询权限
grant SELECT on all tables in schema 模式名 to u2_readonly;
-- 后面新创建的表得追加动态授权,不同用户创建的表需要不同用户来追加授权
alter default privileges in schema 模式名 grant select on tables to u2_readonly; 

版本变更说明

PG 14 版本新增的全局读写权限的用户操作:

  • pg_database_owner:提供数据库宿主的通用权限,常见于模板库的定制化工作。
  • pg_read_all_data:提供全局读取的访问权限,实例级全局只读用户。
  • pg_write_all_data:提供全局写入的访问权限,实例级全局insert、update及delete。

PG 15 版本对public模式的 create 权限从public角色回收,普通用户将不能在public模式下创建表。

这篇关于PostgreSQL数据库创建只读用户的权限安全隐患的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/963631

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

Python创建Excel的4种方式小结

《Python创建Excel的4种方式小结》这篇文章主要为大家详细介绍了Python中创建Excel的4种常见方式,文中的示例代码简洁易懂,具有一定的参考价值,感兴趣的小伙伴可以学习一下... 目录库的安装代码1——pandas代码2——openpyxl代码3——xlsxwriterwww.cppcns.c

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

使用Python在Excel中创建和取消数据分组

《使用Python在Excel中创建和取消数据分组》Excel中的分组是一种通过添加层级结构将相邻行或列组织在一起的功能,当分组完成后,用户可以通过折叠或展开数据组来简化数据视图,这篇博客将介绍如何使... 目录引言使用工具python在Excel中创建行和列分组Python在Excel中创建嵌套分组Pyt

SQL Server数据库迁移到MySQL的完整指南

《SQLServer数据库迁移到MySQL的完整指南》在企业应用开发中,数据库迁移是一个常见的需求,随着业务的发展,企业可能会从SQLServer转向MySQL,原因可能是成本、性能、跨平台兼容性等... 目录一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据二、迁移工具的选择2.1