在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

MySQL数据库中怎么实现加密

122次阅读
没有评论

共计 4860 个字符,预计需要花费 13 分钟才能阅读完成。

这篇文章将为大家详细讲解有关 MySQL 数据库中怎么实现加密,文章内容质量较高,因此丸趣 TV 小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

如何加密?

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

什么是 Druid?

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

Druid 开源地址:https://github.com/alibaba/druid/

Druid 可以做什么?

鸿蒙官方战略合作共建——HarmonyOS 技术社区

Druid 可以监控数据库访问性能,Druid 内置提供了一个功能强大的 StatFilter 插件,能够详细统计 SQL   的执行性能,这对于线上分析数据库访问性能有帮助。

替换数据库连接池 DBCP 和 C3P0,Druid 提供了一个高效、功能强大、可扩展性好的数据库连接池。

数据库密码加密,直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver 和 DruidDataSource 都支持  PasswordCallback。

SQL 执行日志,Druid 提供了不同的 LogFilter,能够支持 Common-Logging、Log4j 和  JdkLog,你可以按需要选择相应的 LogFilter,监控你应用的数据库访问情况。

扩展 JDBC,如果你要对 JDBC 层有编程的需求,可以通过 Druid 提供的 Filter-Chain 机制,很方便编写 JDBC   层的扩展插件。

对于本文来说,我们重点来看它的第 3 个特性,也就是使用 Druid 来实现数据库密码加密。

加密执行流程

在没有进行密码加密之前,项目的交互流程是这样的:

在使用了密码加密之后,项目的交互流程就变成了这样:

使用 Druid 实现加密

本示例运行环境:

Spring Boot 2.4.3 MySQL 5.7 Java 1.8 Idea 2020.1.3

1. 添加 Druid 依赖

Maven 项目:

dependency   groupId com.alibaba /groupId   artifactId druid-spring-boot-starter /artifactId   version 1.2.5 /version   /dependency

Gradle 项目:

compile  com.alibaba:druid-spring-boot-starter:1.2.5

获取 Druid   最新版本:https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter

2. 生成密文

Druid 添加完成之后就可以借助 Druid 中提供的 ConfigTools 类来加密密码了,实现代码如下:

import com.alibaba.druid.filter.config.ConfigTools; class MyTests { public static void main(String[] args) throws Exception { //  需要加密的明文命名  String password =  youPassword  // 【注意:这里要改为你自己的密码】 //  调用  druid  生成私钥、公钥、密文  ConfigTools.main(new String[]{password}); } }

以上代码执行的结果如下:

privateKey:MIIBUwIBADANBgkqhkiG9w0BAQEFAASCAT0wggE5AgEAAkEApOjcMWSDzJiKVGmtcBBoQPtM9tVW2H2cnS6xZK7NrbzQXYWLQD2zefIrrx9vMvqRIHEqkmAHTuUcUXHgCxu0cwIDAQABAkAlqo5ItdWo0Jqf5zdXJlg5p2yP4HCiqCYyfKzF+2s9KEmgWZJWTctZDsgQ0iYUohORR59I+J4nabhel1x5/INpAiEA6jwSyFqMUPOh2XlrzNFek+RthOQ5n4+ALPo+vULayO0CIQC0O7JM9sIq+tg+jCGv+ypk6vbuRKY9m5W2rSRXapGm3wIgRHul3jAjIDPrF/f1HaAFL+Y0Yws7Ebyp8/yCRWF7iA0CIALbe20q8FMcHPeI4zPWCIsHCpkmb3hEkjAOOKhGIT8DAiAqiUuz92NqKeyjmOfons1ka65EzVwA3NDhZ6+IQcnuig== publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKTo3DFkg8yYilRprXAQaED7TPbVVth9nJ0usWSuza280F2Fi0A9s3nyK68fbzL6kSBxKpJgB07lHFFx4AsbtHMCAwEAAQ== password:IMgKm27bOHok3/+5aDL4jGBoVVZkpicbbM6pIXQppi3dI7h4jngSAqhqwqYnfuYpyVJ0k++q9xWWnHtd6sAWnQ==

从上述结果可以看出,使用 ConfigTools 类会生成 3 部分的内容:

鸿蒙官方战略合作共建——HarmonyOS 技术社区

privateKey:私钥,暂时不会用到,用于密码的加密;

publicKey:公钥,用于密码的解密;

password:加密之后的密码。

PS:要实现数据库的加密,主要使用的是 publicKey(公钥) 和 password(密文),这就把明文转换成密文了。

3. 添加配置

完成了以上操作之后,只需要将上一步生成的公钥和密文添加到项目的配置文件  application.yml(或 application.xml) 中就实现了加密操作了,具体配置信息如下:

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: IMgKm27bOHok3/+5aDL4jGBoVVZkpicbbM6pIXQppi3dI7h4jngSAqhqwqYnfuYpyVJ0k++q9xWWnHtd6sAWnQ== # encrypt config filters: config connect-properties: config.decrypt: true config.decrypt.key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKTo3DFkg8yYilRprXAQaED7TPbVVth9nJ0usWSuza280F2Fi0A9s3nyK68fbzL6kSBxKpJgB07lHFFx4AsbtHMCAwEAAQ==

其中 password 对应的是上一步生成的 password(密文),而 config.decrypt.key 对应的是上一步生成的  publicKey(公钥),如下图所示:

这里提供一个原始的配置文件,以便和加密后的配置文件进行比对:

4. 注意事项 - 插着钥匙的锁

经过前面 3 步的配置之后,我们的程序就可以正常运行了,但这远没有结束!

在第 3 步配置时,我们将密文和公钥都写入配置文件,这就会造成当有人拿到密文和公钥之后,就可以使用 Druid   将加密的密码还原出来了,这就好比一把插着钥匙的锁是极不安全的。

因此我们正确的使用姿势:是将公钥找一个安全的地方保存起来,每次在项目启动时动态的将公钥设置到项目中,这样就可以有效的保证密码的安全了。

正确的配置文件

接下来我们将 Spring Boot 的公钥设置为配置项,在项目运行时再替换为具体的值,最终的安全配置信息如下:

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: IMgKm27bOHok3/+5aDL4jGBoVVZkpicbbM6pIXQppi3dI7h4jngSAqhqwqYnfuYpyVJ0k++q9xWWnHtd6sAWnQ== # encrypt config filters: config connect-properties: config.decrypt: true config.decrypt.key: ${spring.datasource.druid.publickey}

可以看出公钥被修改成“${spring.datasource.druid.publickey}”了,这就相当于使用占位符先把坑给占上,等项目启动时再更换上具体的值。

PS:“spring.datasource.druid.publickey”并非是固定不可变的 key,此 key 值用户可自行定义。

开发环境替换公钥

开发环境只需要在 Idea 的启动参数中配置公钥的值即可,如下图所示:

 

当我们输入正确的公钥值时程序可以正常运行,当输入一个错误的公钥值时就会提示解码失败,如下图所示:

生产环境替换公钥

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

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

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

什么? 你想知道 Druid 是如何通过密文和公钥还原出真实的密码的?

没问题,满足你,其实 ConfigTools 类中已经提供了相应实现,代码如下:

//  密文  String password =  VwH1mu2IUpqjfKTd+gSikiZgJTi+3Y5zFIFRfxYnH1UqHzm1K8TIHnMaV3TErBaGsVEaGV0e63pb0Ys3Wdm7Kg==  //  公钥  String publicKey =  MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALWIEp19IM04sB+vQXnEOH9gFNFdL5TFGSEhORgHj4MnfTfBSNaOoSgCaM8BOpjiHmwuEb7LpvmXI1x/ymUvNzECAwEAAQ==  //  还原成真实的密码  String result = ConfigTools.decrypt(publicKey, password); System.out.println(最终结果: + result);

关于 MySQL 数据库中怎么实现加密就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计4860字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 香蕉依依精品视频在线播放 | 成人男女啪啪免费观看网站 | 色综合小说 | 天堂网www中文在线 天堂网www中文在线资源 | 视频在线一区二区三区 | 国产精品永久久久久久久久久 | 亚洲高清在线观看看片 | 久青草国产免费观看 | 国产精品自在在线午夜出白浆 | 国产精品99在线观看 | 色综合久久综合网欧美综合网 | 国产精品区免费视频 | 天天躁夜夜躁av天天爽 | 四虎影视永久免费观看网址 | 久久国产精品高清一区二区三区 | 国产区精品福利在线观看精品 | 欧美一区二区三区在线视频 | 91视频亚洲 | 亚洲欧美激情综合首页 | 亚洲综合第一页 | 可以免费看毛片的网站 | 日韩在线视频线视频免费网站 | 国产精品久久久久不卡绿巨人 | 国产在线观看成人免费视频 | 国产日韩欧美亚洲综合在线 | 午夜欧美成人久久久久久 | 最新自拍偷拍视频 | 草草影院ccyy国产日本欧美 | 国产午夜毛片v一区二区三区 | 国产图片亚洲精品一区 | 成年免费视频网站入口 | 亚洲精品国产精品乱码不97 | 色婷婷亚洲一区二区三区 | 韩国一级毛片在线观看 | 军人粗大的内捧猛烈进出视频 | 久久久久久久久久久久中文字幕 | 刮伦真实在线永久视频 | 亚洲精品久久久久中文字幕m男 | 亚洲色精品aⅴ一区区三区 亚洲色精品vr一区二区三区 | 久久爱com| 偷拍自怕在线视频免费 |