PostgreSQL使用docker部署,设置密码失效问题处理

文章目录

    • 问题描述
    • 使用场景
    • 排查解决
      • 修改已有的文件卷
      • 使用SQL初始化

问题描述

  • PostgreSQL使用docker虚拟化部署,使用docker-compose管理,配置了密码
  • 部署在客户现场时,客户的安全扫描,反馈测到PostgreSQL数据库弱密码漏洞
  • 查看docker-compose配置文件已经配置了密码,怀疑是扫描有问题,于是将暴露的ports5432屏蔽掉了,问题解决
  • 因为一直在配置文件里给服务配置的是设置的数据库用户名密码,连接一直没问题,就没怀疑密码设置有问题
  • 后来测试人员进行集成测试时,发现确实存在弱密码问题,用数据库连接工具连接,不需要输入密码
  • PostgreSQL的密码设置没生效,不科学啊,我开始排查分析原因

使用场景

  • 我们使用PostgreSQL作为业务数据库,存储我们的业务数据
  • 有一部分比较小的客户,业务量较少,只提供一台机器部署项目。为了维护方便,我们将平台服务都放在docker里部署,使用docker-compose管理,PostgreSQL也放在docker里部署
  • PostgreSQL的docker-compose配置如下:
  postgresql:image: postgres:14.2container_name: postgresports:- 5432:5432volumes:- ./volumes/postgresql/:/var/lib/postgresql/data/- /etc/localtime:/etc/localtimeenvironment:- POSTGRES_USER=postgres- POSTGRES_PASSWORD=xxxxxxx- POSTGRES_HOST_AUTH_METHOD=md5- TZ=Asia/Shanghainetworks:- signal-networkrestart: always
  • 原则上,是不建议使用docker部署数据库的,会限制数据库利用机器性能。使用动车客人部署,肯定需要将PostgreSQL的数据目录(/var/lib/postgresql/data/)映射到物理机上,保证容器关闭删除异常损坏等情况时数据不丢失,但这样会造成一些性能损耗
  • 对于生产数据的备份问题,我们将映射出的数据目录每天凌晨(凌晨没有业务,几乎没有数据读写)定时压缩备份,全量备份,这些备份压缩文件,循环删除,只保留最近七天的
  • 原则上至少应该备份到其他机器上,在没有多余机器时,才能备份在本机。如果客户需要迁移部署到不同机器,就可以直接拿最新一天的备份,在其他机器还原即可。
  • 我们平台有一部分初始化数据,需要在部署时初始化库里面。为了减少部署复杂度,我们直接将一个初始化的数据目录一起部署

排查解决

  • 知道存在弱密码漏洞时,我首先想到的是PostgreSQL的配置问题,因为默认就是不进行密码校验的

  • 查看了配置文件pg_hba.conf,果然是默认配置,不做密码校验
    在这里插入图片描述

  • 如果按照正常情况下,PostgreSQL容器初始化时,会创建数据目录,按照配置创建用户名和密码

  • 由于我们的数据目录文件夹非空,已经存在数据库,就会跳过初始化过程,就不会重新创建数据目录,也就没有设置密码
    在这里插入图片描述

  • 回忆起这份数据目录的来源,应该是在项目初期,还没有设置数据库密码时生成的

  • 问题很明确了,一开始PostgreSQL的docker配置没设置密码,默认生成的文件目录也就没有密码。后面设置了密码,因为数据目录非空没有执行创建过程,导致密码设置没生效

  • 此时有两种解决方式,一是修改已有的文件卷,增加密码校验;二是保持文件目录空,使用sql初始化库表和数据

修改已有的文件卷

  • 在现有的初始化数据库基础上,启动容器
  • 修改配置文件pg_hba.conf,增加密码校验
  • 使用命令,设置用户密码(设置的密码要是docker-compose配置文件里设置的那个)
  • 将此时的文件卷导出,作为初始数据库
  • 问题:此时密码校验是生效的,但是如果想修改初始数据库的密码,在配置文件里修改是没用的,要重新把设置用户密码和导出的流程走一遍

使用SQL初始化

  • 将原有的数据目录置空,在数据库的docker容器创建启动时,进行初始化,会自动生成文件
  • 然后在容器启动后,执行初始化脚本,创建数据库,创建表,初始化数据
  • 要想执行脚本,脚本必须能由docker访问到才可以,可以将这些sql文件和sh文件,放到映射出来的文件目录里
  • 需要注意的是,这些脚本,要等容器创建完成后再移动到数据目录下,不然无法完成初始化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/236124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神经网络学习小记录76——Tensorflow2设置随机种子Seed来保证训练结果唯一

神经网络学习小记录76——Tensorflow2设置随机种子Seed来保证训练结果唯一 学习前言为什么每次训练结果不同什么是随机种子训练中设置随机种子 学习前言 好多同学每次训练结果不同,最大的指标可能会差到3-4%这样,这是因为随机种子没有设定导致的&#x…

网络安全:专科及普通本科的温柔乡

当代普通大学生的现状是卷又卷不过、躺又躺不平,把大把的青春都荒废在了思考我应该做什么才能有前途的问题上面。当然,这里说的是那些普通学历且对自己的职业生涯甚至是人生没有规划的大学生,包括专科、普通一本二本,并非985、211…

MySQL-2

复习 1. Data数据–>DB数据库–>DBMS数据库管理系统常见DBMS: MySQL oracle sql server db2 … redis Mongodb两大功能: 定义DDL 操纵DML 2. 表table创建表, 行和列 3. MySQL数据类型数据类型分成三大类:数值型、字符型、日期时间类4. 关于列属性…

【JVM基础】 JVM 如何加载一个类以及类加载机制

文章目录 1、什么时候一个类会被加载?1、包含 main 方法的主类2、非 包含 main 方法的主类,什么时候去加载? 3、类加载器如何加载一个类?1、验证阶段:2、准备阶段:3、解析阶段:4、初始化&#x…

PHP开发日志——循环和条件语句嵌套不同,效率不同(循环内加入条件语句,条件语句判断后加入循环,array_map函数中加入条件语句)

十多年前开发框架时,为了效率不断试过各种代码写法,今天又遇到了,想想php8时代会不会有所变化,结果其实也还是和当年一样,但当年没写博客,但现在可以把数据记录下来了。 PHP_loop_ireflies_dark_forest 项目…

20231220将NanoPC-T4(RK3399)开发板的Android10的SDK按照Rockchip官方挖掘机开发板编译打包刷机之后启动跑飞

20231220将NanoPC-T4(RK3399)开发板的Android10的SDK按照Rockchip官方挖掘机开发板编译打包刷机之后启动跑飞 2023/12/20 17:19 简略步骤:rootrootrootroot-X99-Turbo:~/3TB$ tar --use-compress-programpigz -xvpf rk3399-android-10.git-20210201.tgz rootrootro…

递归算法:二叉树前序、中序、后序遍历解析与递归思想深度剖析

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《linux深造日志》 《高效算法》 ⛺️生活的理想,就是为了理想的生活! 文章目录 一、二叉树的遍历1.1 链式结构二叉树的创建1.1 二叉树结构图 二、 前序遍历代码演示:2.1 前序遍历递…

苏宁易购商品详情API:电商实时数据

一、引言 在当前的电商行业中,数据是最为宝贵的资源之一。如何获取实时、准确的数据,对于电商业务的运营和优化至关重要。作为中国领先的电商平台之一,苏宁易购提供了丰富的API接口,其中包括商品详情API,以便第三方开…

STL stack练习

CSTL之stack栈容器 - 数据结构教程 - C语言网CSTL之stack栈容器1.再谈栈回顾一下之前所学的栈,栈是一种先进后出的数据结构,而实现方式需要创建多个结构体,通过链式的方式进行实现,这是标准的栈的思路,而在STL中栈可以…

一键在线获取APP公钥、包名、签名及备案信息方法介绍

​ 目录 一键在线获取APP公钥、包名、签名及备案信息方法介绍 摘要 引言 一键获取APP包信息 操作步骤 ​编辑 解析报告 总结 致谢 关键词 参考资料 声明 摘要 本文介绍了一款在线APP解析工具,可以一键获取APP的公钥、包名、签名等基础信息,…

Python教程:对于初学者,几个易懂的装饰器示例用法

装饰器是Python中的一个高级功能,它可以用来扩展或修改一个函数或方法的功能,而不需要修改其原始代码。装饰器本质上是一个函数,它接受一个函数作为参数,并返回一个新的函数对象。 装饰器通常用于添加与函数功能无关的额外功能&a…

LeetCode 647回文子串 517最长回文子序列 | 代码随想录25期训练营day57

动态规划算法14 LeetCode 647 回文子串 2023.12.20 题目链接代码随想录讲解[链接] int countSubstrings(string s) {//暴力搜索&#xff0c;前两层遍历确定子字符串的起始和末尾位置//第三层循环判断当前子字符串是否为回文串/*int result 0;for (int i 0; i < s.size…

灰盒测试简要学习指南!

在本文中&#xff0c;我们将了解什么是灰盒测试、以及为什么要使用它&#xff0c;以及它的优缺点。 在软件测试中&#xff0c;灰盒测试是一种有用的技术&#xff0c;可以确保发布的软件是高性能的、安全的并满足预期用户的需求。这是一种从外部测试应用程序同时跟踪其内部操作…

2023 英特尔On技术创新大会直播 | 窥探未来科技的边界

2023 英特尔On技术创新大会直播 | 窥探未来科技的边界 写在最前面观后感其他有趣的专题课程 写在最前面 嘿&#xff0c;你是不是对科技和创新充满好奇&#xff1f;2023 英特尔 On 技术创新大会线上活动邀请你一起探索最前沿的科技世界&#xff01; 这不仅是一场普通的聚会&…

程序员的23大IONIO面试问题及答案

文章目录 1. 什么是IO流&#xff1f;2.java中有几种类型的流&#xff1f;3.字节流和字符流哪个好&#xff1f;怎么选择&#xff1f;4.读取数据量大的文件时&#xff0c;速度会很慢&#xff0c;如何选择流&#xff1f;5. IO模型有几种&#xff1f;6.阻塞IO &#xff08;blocking…

如何用Excel制作一张能在网上浏览的动态数据报表

前言 如今各类BI产品大行其道&#xff0c;“数据可视化”成为一个热门词汇。相比价格高昂的各种BI软件&#xff0c;用Excel来制作动态报表就更加经济便捷。今天小编就将为大家介绍一下如何使用葡萄城公司的纯前端表格控件——SpreadJS来实现一个Excel动态报表&#xff1a; 实…

华为鸿蒙操作系统简介及系统架构分析(2)

接前一篇文章&#xff1a;华为鸿蒙操作系统简介及系统架构分析&#xff08;1&#xff09; 本文部分内容参考&#xff1a; 鸿蒙系统学习笔记(一) 鸿蒙系统介绍 特此致谢&#xff01; 上一回对于华为的鸿蒙操作系统&#xff08;HarmonyOS&#xff09;进行了介绍并说明了其层次化…

C语言——高精度乘法

一、引子 高精度乘法相较于高精度加法和减法有更多的不同&#xff0c;加法和减法是一位对应一位进行操作的&#xff0c;而乘法是一个数的每一位对另一个数的每一位进行操作&#xff0c;需要的计算步骤更多。 二、核心算法 void Calculate(int num1[], int num2[], int numres…

代理IP解决了哪些问题?如何切换IP地址?

代理IP主要解决了以下问题&#xff1a; 1. 隐私保护&#xff1a;通过代理IP&#xff0c;用户可以隐藏自己的真实IP地址&#xff0c;增强网络匿名性&#xff0c;保护个人信息不被泄露。 2. 地理位置限制&#xff1a;某些网站或服务可能会根据用户的IP地址实施地域限制。使用代…

echart图表之仪表盘 pie 双盘 乃至多盘

效果展示&#xff1a; 代码&#xff1a; //首页转速盘 export const pieSpeed (params) > {let demoDataif (params.length ! 0) {demoData params?.map(item > {return {title: item.title,name: item.name,value: item.value,unit: item.unit || ,pos: item.pos,ran…