数据库如何加密连接

news2024/11/19 21:29:37

文章目录

    • 1. 前言
    • 2. 如何加密?
    • 3. 使用Druid实现加密
    • 4. 生成密文
    • 5. 添加加密配置
    • 6. 隐藏问题
    • 7. 开发环境替换公钥
    • 8. 生产环境替换公钥
    • 9. 运行原理
    • 10. 总结

1. 前言

现在无论是公司的项目还是个人的项目,都会选择将源码托管在Git服务器(Gitee,CODING,云效),只要将源码提交到公网服务器就会存在源码泄露的风险,数据库配置信息作为源码的一部分,一旦出现泄露问题,其产生的损失是无法估量的。

为了避免上述问题的产生,最好对数据库的密码进行加密操作,即使生产环境配置文件源码遭到泄露,也不会造成数据库数据的泄露。

2. 如何加密?

要想快速实现数据库的加密,最简单可行的方案就是使用阿里巴巴提供的Druid来实现加密。

Druid(中文译为“德鲁伊”)是阿里巴巴开源的一款 Java 语言中最好的数据库连接池。Druid 提供了强大的监控和扩展功能,当然也包含了数据库的加密功能。

Druid 开源地址:跳转链接

3. 使用Druid实现加密

添加Druid依赖

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.8</version>
</dependency>

查看Druiid最新版本

4. 生成密文

借助 Druid 中提供的 ConfigTools 类来加密密码了,实现代码如下:

public static void main(String[] args) throws Exception {
    // 需要加密的明文密码
    String password = "1qazzaq1";
    // 调用 druid 生成私钥、公钥、密文
    ConfigTools.main(new String[]{password});
}

运行结果如下:

privateKey:MIIBVAIBADANBgkqhkiG9w0BAQEFAASCAT4wggE6AgEAAkEAhBSg+SVu4cEDnatvJH2vNfeHk1xtKuD5c+z6cf0qkqOk0wapWqs1H3HCutQvM9PbG2LLspqzfwE4lIi+/F7xpQIDAQABAkBoBdMtxfSJKjmN0PnstGvsxfFp9q4nyh3M1kP8yJXh/IRRxvnSo+619Jt540cjnezJbzE/Qa9nOPA0zXg61p2hAiEA6NEX6P4V0qa8Pe8Pc9Nb4ijThtsIaHUkoFS9Z904KJ0CIQCRO5gBq1JRB0lsOQEaO8aWlT8ASRd3JDnuWP3e3q4KqQIhAL+Tj0FCE2MLoMq19NkyiuFHBwhpJDoQatsj39efyZ5hAiAenDXknCxkYanLApTF57VqhZhawg0NEniXUPBpKfv6yQIgYdA40Q3wv+bsIA2sV06Ucm0lQhoWSaaClpKZl6tjSCY=
publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIQUoPklbuHBA52rbyR9rzX3h5NcbSrg+XPs+nH9KpKjpNMGqVqrNR9xwrrULzPT2xtiy7Kas38BOJSIvvxe8aUCAwEAAQ==
password:DwuAm/Jwvq03JKojJL15G7xp0iPktV4N02uptlnvJgt3WEZdoXjejWnebpFMcKn1z1dNk1Q/Miwo7ICrJgaVpw==

使用 ConfigTools 类会生成 3 部分的内容:

  1. privateKey:私钥,暂时不会用到,用于密码的加密;
  2. publicKey:公钥,用于密码的解密;
  3. password:加密之后的密码。

5. 添加加密配置

把生成的公钥和密文添加到项目的配置文件中

spring:
  # MySQL 配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      url: jdbc:mysql://127.0.0.1:3306/testdb?serverTimezone=Asia/Shanghai&characterEncoding=UTF-8&useSSL=false
      username: root
      password: PUz+7JCeI1mvHG3q4FBtOkjBp9WSNaptqQtpAEhHKSjHTbcN/4dALkNnY9lmcdTBekepmidkZ/VwNtUnfZ0k1Q==
      # encrypt config
      filters: config
      connect-properties:
        config.decrypt: true
        config.decrypt.key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJIavWOrjPYNSTkSeUmiCSbAvPHjv2LI9Ow3rTrg9gHuYGpiccvLpYLZhvTNW26XNOSNP+fsKFMnBYXcB/IVa0UCAwEAAQ==
  autoconfigure:
    exclude:
    - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

其中 password 对应的是上一步生成的 password(密文),而 config.decrypt.key 对应的是上一步生成的 publicKey(公钥)。

原始的配置文件,和加密后的配置文件进行比对:

在这里插入图片描述

6. 隐藏问题

通过上面的配置已经完成了加密功能,目前把密文和公钥都放在了配置文件中,这时就会导致源码泄露后 有人拿到密文和公钥之后,就可以使用Druid将加密的密码还原出来,这就相当于还是把钥匙和锁放在了一起,还是不安全。

正确的使用方式:把公钥放在一个安全的地方保存起来,启动项目时动态的将公钥读取设置到项目中,这样就可以有效的保证密码的安全。

正确的配置文件:

spring:
  # MySQL 配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      url: jdbc:mysql://43.138.50.206:3306/testdb?serverTimezone=Asia/Shanghai&characterEncoding=UTF-8&useSSL=false
      username: root
      password: PUz+7JCeI1mvHG3q4FBtOkjBp9WSNaptqQtpAEhHKSjHTbcN/4dALkNnY9lmcdTBekepmidkZ/VwNtUnfZ0k1Q==
      # encrypt config
      filters: config
      connect-properties:
        config.decrypt: true
        config.decrypt.key: ${spring.datasource.druid.publickey}
  autoconfigure:
    exclude:
    - org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

公钥被修改为:${spring.datasource.druid.publickey},使用占位符方式,等项目启动时才知道具体的值是什么

ps:${spring.datasource.druid.publickey} key随便设置都可以,要保证和启动参数一致

7. 开发环境替换公钥

在 idea 的启动参数中配置公钥的值即可,如下图所示:

在这里插入图片描述

公钥配置正确时可以正常启动,错误时会提示解密失败:
在这里插入图片描述

8. 生产环境替换公钥

生产环境在启动 jar 包时只需要动态设置公钥的值即可,参考以下命令:

java -jar xxx.jar --spring.datasource.druid.publickey=你的公钥

9. 运行原理

当 Spring Boot 项目启动时,Druid 的拦截器会使用密文和公钥将密码还原成真实的密码以供项目使用,当然这一切都无需人工干预(无需编写任何代码),Druid 已经封装好了,我们只需要通过以上配置即可。

那怎么通过密文和公钥还原真实密码呢?
ConfigTools 类中已经提供了相应实现,代码如下:

 // 公钥
String publicKey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJIavWOrjPYNSTkSeUmiCSbAvPHjv2LI9Ow3rTrg9gHuYGpiccvLpYLZhvTNW26XNOSNP+fsKFMnBYXcB/IVa0UCAwEAAQ==";
// 密文
String password = "PUz+7JCeI1mvHG3q4FBtOkjBp9WSNaptqQtpAEhHKSjHTbcN/4dALkNnY9lmcdTBekepmidkZ/VwNtUnfZ0k1Q==";
String decrypt = ConfigTools.decrypt(publicKey, password);
System.out.println(decrypt);

10. 总结

通过阿里巴巴开源的 Druid 实现 MySQL 的密码加密,Druid 的加密过程无需编写任何代码,只需要添加 Druid 依赖,再通过 Druid 的工具类生成密文,最后将密文配置到 application.yml 文件即可。项目在运行时会通过拦截器将密文转换成真正的密码,从而实现了 MySQL 密码的加密和解码的过程。

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

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

相关文章

熬不过“冬天”,又一跨境电商平台关停

熬不过“冬天”&#xff01;又一跨境电商平台关停据相关媒体报道&#xff0c;京东旗下跨境电商服务平台Joybuy于2022年11月4日宣布将进行“业务升级”&#xff0c;而后该平台的所有交易活动已经停止。据Egain News报道&#xff0c;“业务升级”的说法很大可能只是关停的一种“委…

【JavaEE】Cookie 和 Session

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录【Cookie和Session】相关方法1. HttpServletRequest类的相关方法2. HttpServletRespon类的相关方法3. HttpSession类中相关的方法&#xff1a;4. Cookie类中相关的方法&#xff1a;写一个模拟登录的案例上传文件Serv…

开源工具系列1:Cloud Custodian

对云安全的检测中&#xff0c;最重要的一个组成部分就是对配置的验证&#xff0c;今天来介绍一个开源的规则检测引擎项目&#xff0c;Cloud Custodian。 一、Cloud Custodian 是什么 Cloud Custodian 是用于管理公有云帐户和资源的规则引擎。规则策略用简单的 YAML 格式&#x…

【TypeScript】class类型讲解

目录 class类型 构造函数 class类的继承 可见修饰符 只读修饰符 class类型 TypeScript支持ES引入的class关键字&#xff0c;并为其添加了类型注解和其他语法(例如&#xff1a;可见性修饰符)。 class person {// 声明初始值&#xff0c;可省略类型注解(TS类型推论为strin…

艾美捷超氧化物歧化酶检测试剂盒,活性检测说明

细胞和细胞外环境中大量的超氧化物歧化酶&#xff08;SOD&#xff09;对于预防与氧化应激相关的疾病至关重要。SOD突变约占家族性肌萎缩侧索硬化症&#xff08;ALS&#xff09;病例的20%。SOD在预防其他神经退行性疾病&#xff08;如阿尔茨海默氏症、帕金森氏症和亨廷顿舞蹈症&…

美丽田园ipo上市,它的底气从何而来?

美丽田园医疗健康产业有限公司(简称美丽田园)&#xff0c;中国最大的传统美容服务提供商&#xff0c;成立近三十年来&#xff0c;一直致力于美与健康的发展&#xff0c;坚持系统化标准化管理和美与健康一站式服务&#xff0c;为顾客提供舒适的美与健康新体验。近日&#xff0c;…

Matter理论介绍-通用-1-04:桥接器-其他功能

【源码、文档、软件、硬件、技术交流、技术支持&#xff0c;入口见文末】 【所有相关IDE、SDK和例程源码均可从群文件免费获取&#xff0c;免安装&#xff0c;解压即用】 持续更新中&#xff0c;欢迎关注&#xff01; 一、桥接器的配置流程 我们已经知道&#xff0c;桥接器和…

【QT】PySide6安装与运用

一、什么是PyQt 简单来说&#xff0c;PyQt就是用Python重构的Qt&#xff0c;一个强大的&#xff0c;创建跨平台GUI(Graphical User Interface)的工具包。开发者为Phil Thompson。 二、PySide与PyQt PyQt和PySide都是基于Python语言对Qt的实现&#xff0c;PyQt的推出时间要比…

paddle nlp taskflow 全家桶 包括代码生成与AIGC图片生成 一起探索paddle nlp 开包即用的能力吧

paddle nlp作为自然语言处理领域的全家桶&#xff0c;具有很多的不错的开箱即用的nlp能力。今天我们来一起看看基于paddle nlp中taskflow开箱即用的能力有哪些。 第一步先升级aistudio中的paddlenlp 保持最新版本。 pip install -U paddlenlpLooking in indexes: https://pypi…

ERP外网访问,快解析助力企业远程办公

ERP系统是现代信息技术和先进管理经验的有效结合&#xff0c;实现对企业经营活动的自动、完整的记录&#xff0c;替代重复劳动&#xff0c;对企业人力资源、物流、资金流、票据流和信息流等的科学管理&#xff0c;实现业务管理数据和财务数据高度统一&#xff0c;实现对企业业务…

论文导读 | 正则路径查询

前言 正则路径查询&#xff08;Regular Path Query, RPQ&#xff09;为带标签的图数据上重要的查询类型之一&#xff0c;旨在找出由至少一条满足条件的路径相连接的结点对&#xff0c;其中需满足的条件以正则表达式表达。当前对 RPQ 的研究以提升查询效率为目的&#xff0c;主…

php项目管理系统 。集产品管理、项目管理、质量管理、文档管理、 组织管理和事务管理于一体,是一款专业的研发项目管理软件

介绍 一款国产的项目管理软件。它集产品管理、项目管理、质量管理、文档管理、 组织管理和事务管理于一体&#xff0c;是一款专业的研发项目管理软件&#xff0c;完整地覆盖了项目管理的核心流程。 管理思想注重实效&#xff0c;功能完备丰富&#xff0c;操作简洁高效&#x…

【Python】基础知识(列表,元组)

目录列表和元组列表创建列表访问下标切片操作遍历列表元素新增元素查找元素删除元素连接列表元组写在前面&#x1f34e;&#xff1a;码字不易&#xff0c;如果对你有帮助的话&#xff0c;给个三连或者关注一下吧&#x1f370;&#xff0c;感谢支持&#xff01;&#x1f4e3;列表…

操作手册(GB8567——88)基于协同的在线表格forture-sheet

操作手册&#xff08;GB8567——88&#xff09; 1引言 1.1编写目的 为了帮助用户更好的上手本系统&#xff0c;加快用户对forture-sheet在线表格的快速入门&#xff0c;本操作手册详细介绍使用forture-sheet的部分基础操作以及注意细节。 1.2前景 待开发系统的名称&#x…

Docker+Jenkins+Gitee+Maven构建后台jar包后通过命令备份、替换、重启docker-compose编排的java服务

场景 docker-compose入门以及部署SpringBootVueRedisMysql(前后端分离项目)以若依前后端分离版为例&#xff1a; docker-compose入门以及部署SpringBootVueRedisMysql(前后端分离项目)以若依前后端分离版为例_霸道流氓气质的博客-CSDN博客 在上面使用docker-compose编排的ja…

Keil uVision5软件的操作与编写基础(入门)

目录 &#x1f46c;一、如何新建一个空白文档 &#x1f46c;二、程序编写 &#x1f46c;三、编译程序 Keil uVision5是一款编写单片机程序的必备软件。其图标为&#xff1a; 一、如何新建一个空白文档 1.打开Keil uVision5&#xff0c;将会出现工作界面。如图所示&#xff1a;…

Android .obb 详解

1.简介 在Android APP Bundle(aab)之前&#xff0c;上架Google Play 项目都是打包成APK上传&#xff0c;但是Google 对 APK大小是有限制的&#xff0c;刚开始是50M,后来扩展到100M,但是有些APK资源比较多&#xff0c;可能会大于100M, 基于这种情况&#xff0c;Google 允许上传…

音频怎么转换成文字?推荐这几个转文字的方法给你

在平时的工作中大家通常会先利用录音工具将会议内容录制下来&#xff0c;结束以后再根据录音来整理会议纪要&#xff0c;但一边听音频一边整理的操作既麻烦又费时间&#xff0c;还有可能会因为讲述的人语速快&#xff0c;而漏掉一些内容&#xff0c;从而导致效率不高&#xff0…

上海、广州、北京德国签证申请中心即将重新启动

德国签证中心关闭2年后&#xff0c;近日传来了好消息&#xff0c;上海、广州、北京德国签证申请中心即将重新启动&#xff0c;知识人网小编根据德国驻华领馆公布的信息整理并解读相关签证情况。 目前中国公民办理赴德签证&#xff0c;可以通过两种方式进行申请&#xff1a; 1.…

算法学习指南:什么是算法?

解释算法的实现逻辑就像讲故事一样。算法会在普通的解决方案中引入新颖的思路或进行某种创新。在本文中&#xff0c;我们将讨论一个简单问题的几个解决方案&#xff0c;解释影响算法性能的一些因素。在这个过程中&#xff0c;我将介绍一些用于分析算法性能的技巧。这些技巧与算…