首页 > 数据库 >PostgreSQL 15 让多年被DISS的PG 安全画上圆满的句号

PostgreSQL 15 让多年被DISS的PG 安全画上圆满的句号

时间:2023-06-22 12:02:35浏览次数:48  
标签:DISS 15 postgres create public PG test PUBLIC schema


PostgreSQL 15  让多年被DISS的PG 安全画上圆满的句号_sql

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。

提起POSTGRESQL 中的安全问题其中最容易被人Diss 的最大BUG 并不是autovacuum 之类的部分,排在首位的被DISS的最大的问题是安全的问题,POSTGRESQL 中由于丰富的数据库管理层级设定,中的关于schema的设定

PostgreSQL 15  让多年被DISS的PG 安全画上圆满的句号_sql_02

这点的核心问题,在于安全部分,POSTGRESQL  在POSTGRESQL 15 之前是不安全的,不安全的因素来自于未有任何的权限的账号,可以在POSTGRESQL 的任何的数据库中的public schema中肆意妄为,我们来看看如果一个什么都没有权限的账号,什么都没有的,可以在PG中做什么

1   建立任何的OBJECTS ,表,VIEW ,Trigger,  procedure , 等等

2   可以对自己建立的OBJECTS 进行任何的数据的插入,删除,UPDATE 等操作,并且没有任何的限制

此时此刻我是否可以这样,来操作一番

通过未有任何权限的账号,登陆到数据库中,然后在数据库中建立存储过程,并通过存储过程,批量建表,并其批量的开始进行数据的插入,然后无限制的操作,那么你的数据库很可能很快的沦陷了。会出现各种各样的问题,如

CPU 莫名的升高,IOPS 打满,磁盘空间打满,WAL 日志快速产生,反正只要你想,那么这个没有任何权限的账号就可以将你的POSTGRESQL ,彻底的沦为一个 “殖民地”。

此时你还认为你的POSTGRESQL 是安全的,反正我是不这么认为,很多同学认为这是一个BUG 一个严重的POSTGRESQL 的BUG ,但我个人理解,或者是一种文化,一种开发的文化,因为PUBLIC 的意思就是公共的,但对于没有任何权限的账号可以在PUBLIC 操作这么多事情,想想也是后怕。

所以网上就推出了各种PG15版本之前的PUBLIC 的解决方案,汇总的方案如下

1 建立新的schema 不允许使用PUBLIC ,建立OBJECT 都需要指明对应的SCHEMA 部分

2 回收 public 的权限

3 将search_path 进行调整,不将public作为一个可选项

但这些问题都有一个结果,就是你首先必须有一个懂的这些问题的人,否则你会陷入一个怪圈,就是开发系统的人开发中,都是以public schema 开发的,并且如果你在这个基础上,在此进行管理的情况下,你无法在进行有序的管理。

所以这个问题的核心是,数据库在建立之初就必须将PUBLIC 的这个问题进行解决。

解决问题的方法有以下几个部分:

1  撤销所有人在PUBLIC 创建的权利

revoke create on schema public from PUBLIC;

2  撤销所有人可以在PUBLIC 访问自己创建的对象

revoke usage on schema public from PUBLIC;

PostgreSQL 15  让多年被DISS的PG 安全画上圆满的句号_postgresql_03

撤销所有者的特权

REVOKE ALL PRIVILEGES ON SCHEMA public FROM PUBLIC;

对于POSTGRES 账号进行所有基于PUBLIC的权限的回收

REVOKE ALL PRIVILEGES ON SCHEMA public FROM postgres;

PostgreSQL 15  让多年被DISS的PG 安全画上圆满的句号_数据库_04

然后使用应用需要的账号建立相关的权限和OBJECTS 

create database test;

create user test;

create schema test authorization test;

nam

PostgreSQL 15  让多年被DISS的PG 安全画上圆满的句号_数据库_05

这里我们换成PG15

PostgreSQL 15  让多年被DISS的PG 安全画上圆满的句号_sql_06

从下面的命令可以清晰的看出PG 15 与PG14 的不同,在没有权限的用户中是不可以在PUBLIC 中创建任何的OBJECTS ,但是在我们使用了 create schema test authorization test; 后我们的test 账号就可以在指定的schema中创建OBJECTS 了,而不会像之前的版本是报错的。

[postgres@postgresql15 ~]$ 
[postgres@postgresql15 ~]$ 
[postgres@postgresql15 ~]$ psql -Utest -p5432 -h 192.168.198.100
Password for user test: 
psql (15.0)
Type "help" for help.
postgres=> 
postgres=> \c test
You are now connected to database "test" as user "test".
test=> create table idd (id int);
ERROR:  permission denied for schema public
LINE 1: create table idd (id int);
                     ^
test=> create schema test authorization test;
ERROR:  permission denied for database test
test=> 
test=> exit 
[postgres@postgresql15 ~]$ psql
psql (15.0)
Type "help" for help.
postgres=# \c test
You are now connected to database "test" as user "postgres".
test=# create schema test authorization test;
CREATE SCHEMA
test=# exit 
[postgres@postgresql15 ~]$ psql -Utest -p5432 -h 192.168.198.100
Password for user test: 
psql (15.0)
Type "help" for help.
postgres=> \c test
You are now connected to database "test" as user "test".
test=> create table idd (id int);
CREATE TABLE
test=> \d
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 test   | idd  | table | test

所以基于PG 15 的postgresql 给了我们更好的在安全方面的保证和相关的快速处理问题的方法。这点的确是进步了。

PostgreSQL 15  让多年被DISS的PG 安全画上圆满的句号_sql_07

标签:DISS,15,postgres,create,public,PG,test,PUBLIC,schema
From: https://blog.51cto.com/u_14150796/6534568

相关文章

  • POSTGRESQL 再说 PGBOUNCER 如何部署的问题
    开头还是介绍一下群,如果感兴趣polardb,mongodb,mysql,postgresql,redis等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。最近得到与PGBOUNCER的一个问题,问题大体上是这样描述的,一台POSTGRESQL的服务器,2000个maxconnection,同时安装了4个pgbouncer在......
  • ERROR 1153 (08S01): Got a packet bigger than 'max_allowed_packet' bytes
    今天在批量伪造测试数据时,MySQL收到下面异常:ERROR1153(08S01):Gotapacketbiggerthan'max_allowed_packet'bytes。这是因为没有调整mysql的默认配置,默认最大只能处理16M的文件,而我要导入的伪造数据有50M的一个SQL。于是调整配置文件:/etc/my.cnf修改mysql的最大允许包大小......
  • 6轮面试辛苦拿到阿里Android开发offer,却从22k降到15k,在逗我?
    一小伙工作快3年了,拿到了阿里云Android开发岗位P6的offer,算HR面一起,加起来有6轮面试了,将近3个月的时间,1轮同级+1轮Android用人部门leader+1轮Android组leader+1轮项目CTO+1轮HR+1轮HRBP。一路上各种事件分发机制、自定义View、handler原理、多线程、hashmap、手写算法、......
  • 字节跳动总监封神之作《Android11.0最新Framework解析》,1595页,限时免费下载高清PDF文
    Framework始终穿插在App整个研发生命周期中,不管是从0到1的建立阶段,还是从1到N打磨阶段,都离不开Framework。成为一名AndroidFramework高手,就会成为招聘中非常稀缺的人才,可以成为你的敲门砖。很多同学都表示在面试时必问Framework相关问题。因为目前大公司的app开发都要基......
  • 字节总监用了半个月整理出的1595页《Android11.0 最新Framework解析》高清PDF开发下载
    作为过来人,发现很多学习者和实践者都在AndroidFramework上面临着很多的困扰,比如:工作场景中遇到难题,往往只能靠盲猜和感觉,用临时性的补救措施去掩盖,看似解决了问题,但下次同样的问题又会发作,原因则是缺乏方法论、思路的指引以及工具支持;能力修炼中,缺乏互联网项目这一实践环境,对Fram......
  • 写给女*友的中级Android面试秘籍(含详细答案,15k级别)
    前言本篇文章,献给我家女朋友,祝她在杭州找一个965的好公司!因为Android面试考点众多,而网上各个知识点的博客文章又太多,看的眼花缭乱……所以便整理了一下常见考点的精华回答,尽量覆盖该知识点的下容易被面试到的所有内容。面试题都整理成了PDF文档,包含Java基础、Android基础、UI控件篇......
  • FPGA加速技术在人机交互界面中的应用及优化
    目录引言随着人工智能、云计算、大数据等技术的发展,人机交互界面的重要性也越来越凸显。作为用户与计算机之间的桥梁,人机交互界面的性能和效率直接影响用户的体验和使用效果。为了优化人机交互界面的性能,我们需要考虑很多因素,其中FPGA加速技术是一个比较新兴的话题。在本文中,......
  • 15-6 进程前后执行和并发执行
    一、信号发送killkill-1无需关闭进程而让其重新配置kill-2终止正在运行的进程kill-3相当与ctrl+\kill-9强制杀死正在运行的进程kill-15终止正在运行的进程,默认信号vim/etc/httpd/conf/httpd.conf配置文件echo'<h1>liujinxi</h1>'>/var/www/html/index.html......
  • 浅析GeoServer CVE-2023-25157 SQL注入
    简介GeoServer是一个开源的地图服务器,它是遵循OpenGISWeb服务器规范的J2EE实现,通过它可以方便的将地图数据发布为地图服务,实现地理空间数据在用户之间的共享。影响版本geoserver<2.18.72.19.0<=geoserver<2.19.72.20.0<=geoserver<2.20.72.21.0<=geoserver<2.21.42.22.0<=......
  • 【资料分享】Zynq-7010/7020工业评估板规格书(双核ARM Cortex-A9 + FPGA,主频766MHz)
    1评估板简介创龙科技TLZ7x-EasyEVM是一款基于XilinxZynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器设计的异构多核SoC评估板,处理器集成PS端双核ARMCortex-A9+PL端Artix-7架构28nm可编程逻辑资源,评估板由核心板和评估底板组成。核心板经过专业的PCBLayout和高低温测试验证......