国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

阿里巴巴Druid,輕松實現(xiàn)MySQL數(shù)據(jù)庫加密!

數(shù)據(jù)庫 MySQL
本文我們使用阿里巴巴開源的 Druid 實現(xiàn)了 MySQL 的密碼加密,Druid 的加密過程非常方便,無需編寫任何代碼,只需要添加 Druid 依賴,再通過 Druid 的工具類生成密文,最后將密文配置到 application.yml 文件即可。項目在運行時會通過攔截器將密文轉(zhuǎn)換成真正的密碼,從而實現(xiàn)了 MySQL 密碼的加密和解碼的過程。

為什么要加密?

現(xiàn)在的開發(fā)習慣,無論是公司的項目還是個人的項目,都會選擇將源碼上傳到 Git 服務器(GitHub、Gitee 或是自建服務器),但只要將源碼提交到公網(wǎng)服務器就會存在源碼泄漏的風險,而數(shù)據(jù)庫配置信息作為源碼的一部分,一旦出現(xiàn)源碼泄漏,那么數(shù)據(jù)庫中的所有數(shù)據(jù)都會公之于眾,其產(chǎn)生的不良后果無法預期(比如某某酒店的信息)。

于是為了避免這種問題的產(chǎn)生,我們至少要對數(shù)據(jù)庫的密碼進行加密操作,這樣即使得到了源碼,也不會造成數(shù)據(jù)的泄露,也算保住了最后一塊遮羞布。

如何加密?

對于 Java 項目來說,要想快速實現(xiàn)數(shù)據(jù)庫的加密,最簡單可行的方案就是使用阿里巴巴提供的 Druid 來實現(xiàn)加密。

什么是Druid?

Druid(中文譯為“德魯伊”)是阿里巴巴開源的一款 Java 語言中最好的數(shù)據(jù)庫連接池。Druid 提供了強大的監(jiān)控和擴展功能,當然也包含了數(shù)據(jù)庫的加密功能。

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

Druid可以做什么?

  1. Druid 可以監(jiān)控數(shù)據(jù)庫訪問性能,Druid 內(nèi)置提供了一個功能強大的 StatFilter 插件,能夠詳細統(tǒng)計 SQL 的執(zhí)行性能,這對于線上分析數(shù)據(jù)庫訪問性能有幫助。
  2. 替換數(shù)據(jù)庫連接池 DBCP 和 C3P0,Druid 提供了一個高效、功能強大、可擴展性好的數(shù)據(jù)庫連接池。
  3. 數(shù)據(jù)庫密碼加密,直接把數(shù)據(jù)庫密碼寫在配置文件中,這是不好的行為,容易導致安全問題。DruidDruiver 和 DruidDataSource 都支持 PasswordCallback。
  4. SQL 執(zhí)行日志,Druid 提供了不同的 LogFilter,能夠支持 Common-Logging、Log4j 和 JdkLog,你可以按需要選擇相應的 LogFilter,監(jiān)控你應用的數(shù)據(jù)庫訪問情況。
  5. 擴展 JDBC,如果你要對 JDBC 層有編程的需求,可以通過 Druid 提供的 Filter-Chain 機制,很方便編寫 JDBC 層的擴展插件。

對于本文來說,我們重點來看它的第 3 個特性,也就是使用 Druid 來實現(xiàn)數(shù)據(jù)庫密碼加密。

加密執(zhí)行流程

在沒有進行密碼加密之前,項目的交互流程是這樣的:


在使用了密碼加密之后,項目的交互流程就變成了這樣:

使用Druid實現(xiàn)加密

本示例運行環(huán)境:

  1. Spring Boot 2.4.3  
  2.  
  3. MySQL 5.7  
  4.  
  5. Java 1.8  
  6.  
  7. Idea 2020.1.3 

 1.添加Druid依賴

Maven 項目:

  1. <dependency> 
  2.    <groupId>com.alibaba</groupId> 
  3.    <artifactId>druid-spring-boot-starter</artifactId> 
  4.    <version>1.2.5</version> 
  5. </dependency> 

Gradle 項目:

  1. 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 類來加密密碼了,實現(xiàn)代碼如下:

  1. import com.alibaba.druid.filter.config.ConfigTools; 
  2.  
  3. class MyTests { 
  4.     public static void main(String[] args) throws Exception { 
  5.         // 需要加密的明文命名 
  6.         String password = "youPassword"; // 【注意:這里要改為你自己的密碼】 
  7.         // 調(diào)用 druid 生成私鑰、公鑰、密文 
  8.         ConfigTools.main(new String[]{password}); 
  9.     } 

以上代碼執(zhí)行的結(jié)果如下:

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

從上述結(jié)果可以看出,使用 ConfigTools 類會生成 3 部分的內(nèi)容:

  1. privateKey:私鑰,暫時不會用到,用于密碼的加密;
  2. publicKey:公鑰,用于密碼的解密;
  3. password:加密之后的密碼。
  • PS:要實現(xiàn)數(shù)據(jù)庫的加密,主要使用的是 publicKey(公鑰)和 password(密文),這就把明文轉(zhuǎn)換成密文了。

3.添加配置

完成了以上操作之后,只需要將上一步生成的公鑰和密文添加到項目的配置文件 application.yml(或application.xml)中就實現(xiàn)了加密操作了,具體配置信息如下:

  1. spring: 
  2.   # MySQL 配置 
  3.   datasource: 
  4.     driver-class-name: com.mysql.cj.jdbc.Driver 
  5.     type: com.alibaba.druid.pool.DruidDataSource 
  6.     druid: 
  7.       url: jdbc:mysql://127.0.0.1:3306/testdb?serverTimezone=Asia/Shanghai&characterEncoding=UTF-8&useSSL=false 
  8.       username: root 
  9.       password: IMgKm27bOHok3/+5aDL4jGBoVVZkpicbbM6pIXQppi3dI7h3jngSAqhqwqYnfuYpyVJ0k++q9xWWnHtd6sAWnQ== 
  10.       # encrypt config 
  11.       filters: config 
  12.       connect-properties: 
  13.         config.decrypt: true 
  14.         config.decrypt.key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKTo3DFkg8yYilRprXAQaED7TPbVVth9nJ0usWSuza280F2Fi0A9s3nyK68fbzL6kSBxKpJgB07lHFFx4AsbtHMCAwEAAQ== 

其中 password 對應的是上一步生成的 password(密文),而 config.decrypt.key 對應的是上一步生成的 publicKey(公鑰),如下圖所示:


這里提供一個原始的配置文件,以便和加密后的配置文件進行比對:

4.注意事項-插著鑰匙的鎖

經(jīng)過前面 3 步的配置之后,我們的程序就可以正常運行了,但這遠沒有結(jié)束!

在第 3 步配置時,我們將密文和公鑰都寫入配置文件,這就會造成當有人拿到密文和公鑰之后,就可以使用 Druid 將加密的密碼還原出來了,這就好比一把插著鑰匙的鎖是極不安全的。

因此我們正確的使用姿勢:是將公鑰找一個安全的地方保存起來,每次在項目啟動時動態(tài)的將公鑰設置到項目中,這樣就可以有效的保證密碼的安全了。

正確的配置文件

接下來我們將 Spring Boot 的公鑰設置為配置項,在項目運行時再替換為具體的值,最終的安全配置信息如下:

  1. spring: 
  2.   # MySQL 配置 
  3.   datasource: 
  4.     driver-class-name: com.mysql.cj.jdbc.Driver 
  5.     type: com.alibaba.druid.pool.DruidDataSource 
  6.     druid: 
  7.       url: jdbc:mysql://127.0.0.1:3306/testdb?serverTimezone=Asia/Shanghai&characterEncoding=UTF-8&useSSL=false 
  8.       username: root 
  9.       password: IMgKm27bOHok3/+5aDL4jGBoVVZkpicbbM6pIXQppi3dI7h3jngSAqhqwqYnfuYpyVJ0k++q9xWWnHtd6sAWnQ== 
  10.       # encrypt config 
  11.       filters: config 
  12.       connect-properties: 
  13.         config.decrypt: true 
  14.         config.decrypt.key: ${spring.datasource.druid.publickey} 

可以看出公鑰被修改成“${spring.datasource.druid.publickey}”了,這就相當于使用占位符先把坑給占上,等項目啟動時再更換上具體的值。

  • PS:“spring.datasource.druid.publickey”并非是固定不可變的 key,此 key 值用戶可自行定義。

開發(fā)環(huán)境替換公鑰

開發(fā)環(huán)境只需要在 Idea 的啟動參數(shù)中配置公鑰的值即可,如下圖所示:

 

當我們輸入正確的公鑰值時程序可以正常運行,當輸入一個錯誤的公鑰值時就會提示解碼失敗,如下圖所示:

生產(chǎn)環(huán)境替換公鑰

生產(chǎn)環(huán)境在啟動 jar 包時只需要動態(tài)設置公鑰的值即可,參考以下命令:

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

Druid運行原理經(jīng)過上述步驟之后,我們就完成 MySQL 密碼的加密了,這樣當 Spring Boot 項目啟動時,Druid 的攔截器會使用密文和公鑰將密碼還原成真實的密碼以供項目使用,當然這一切都無需人工干預(無需編寫任何代碼),Druid 已經(jīng)幫我封裝好了,我們只需要通過以上配置即可。

什么?你想知道 Druid 是如何通過密文和公鑰還原出真實的密碼的?

沒問題,滿足你,其實 ConfigTools 類中已經(jīng)提供了相應實現(xiàn),代碼如下:

  1. // 密文 
  2. String password = "VwH1mu2IUpqjfKTd+gSikiZgJTi+3Y5zFIFRfxYnH1UqHzm1K8TIHnMaV3TErBaGsVEaGV0e63pb0Ys3Wdm7Kg=="
  3. // 公鑰 
  4. String publicKey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALWIEp19IM04sB+vQXnEOH9gFNFdL5TFGSEhORgHj4MnfTfBSNaOoSgCaM8BOpjiHmwuEb7LpvmXI1x/ymUvNzECAwEAAQ=="
  5. // 還原成真實的密碼 
  6. String result = ConfigTools.decrypt(publicKey, password); 
  7. System.out.println("最終結(jié)果:" + result); 

 總結(jié)

本文我們使用阿里巴巴開源的 Druid 實現(xiàn)了 MySQL 的密碼加密,Druid 的加密過程非常方便,無需編寫任何代碼,只需要添加 Druid 依賴,再通過 Druid 的工具類生成密文,最后將密文配置到 application.yml 文件即可。項目在運行時會通過攔截器將密文轉(zhuǎn)換成真正的密碼,從而實現(xiàn)了 MySQL 密碼的加密和解碼的過程。

 

責任編輯:姜華 來源: Java中文社群
相關(guān)推薦

2022-08-22 08:07:45

DruidMySQL密碼

2019-01-29 15:25:11

阿里巴巴數(shù)據(jù)庫分庫分表

2024-04-25 09:14:57

數(shù)據(jù)庫Mysql阿里巴巴

2017-12-07 15:07:28

阿里巴巴數(shù)據(jù)庫技術(shù)架構(gòu)演進

2022-09-05 10:06:21

MySQL外循環(huán)內(nèi)循環(huán)

2010-06-28 10:43:47

2017-01-20 16:00:33

阿里巴巴分布式數(shù)據(jù)庫DRDS

2013-08-22 09:41:52

阿里巴巴去IOE王堅

2018-01-02 09:23:38

數(shù)據(jù)分析算法阿里巴巴

2013-04-15 10:14:45

阿里巴巴大數(shù)據(jù)

2024-12-05 09:12:43

2015-08-30 16:20:34

阿里巴巴天池大數(shù)據(jù)涂子沛

2023-10-09 07:24:58

數(shù)據(jù)穩(wěn)定性治理數(shù)據(jù)處理

2015-03-02 16:33:25

大數(shù)據(jù)產(chǎn)品經(jīng)濟云圖大數(shù)據(jù)

2020-04-22 10:43:49

高并發(fā)數(shù)據(jù)阿里巴巴

2015-01-06 18:00:58

慕課網(wǎng)

2014-03-17 10:24:22

阿里云物聯(lián)網(wǎng)美的

2009-02-27 10:46:32

DBA筆試題阿里巴巴

2023-03-29 09:42:32

2019-08-15 10:25:02

代碼開發(fā)工具
點贊
收藏

51CTO技術(shù)棧公眾號

国内精品一区二区| 欧美色视频在线| 超碰成人在线免费| 欧美新色视频| 国产日韩欧美中文在线播放| 69久久夜色精品国产69乱青草| 都市激情亚洲| 性刺激的欧美三级视频| 好看的日韩精品| 久久国产精品久久久久| 欧美顶级少妇做爰| 中文字幕av一区二区三区| 亚洲精品影视| 国产欧美日韩电影| 欧美精品一区二区三区涩爱蜜| 精品欧美一区二区精品久久| 一区二区三区国产在线观看| 亚洲精品一二三| 蜜桃av一区二区在线观看| 亚洲啊v在线| av电影资源| 9a蜜桃久久久久久免费| 欧洲生活片亚洲生活在线观看| 国产一区二区在线看| 国产精品一二| 黄色国产精品| 日韩母乳在线| 欧美aaaaa喷水| 国产欧美一区二区三区四区| 欧美日韩999| 欧美一区二区视频观看视频 | 亚洲人线精品午夜| 中文在线播放一区二区| 男人的天堂网av| 成人福利网站在线观看| 欧美在线色视频| 先锋亚洲精品| 五月婷婷激情综合| 欧美日韩18| 成人免费网站观看| 国产91福利| 日韩人妻一区二区三区蜜桃视频| 亚洲最新av网址| 亚洲一二三四在线观看| 99在线精品免费视频九九视| 理论片午夜视频在线观看| 色片在线免费观看| 国产精品久久久久久婷婷天堂| 国产综合香蕉五月婷在线| 韩国欧美亚洲国产| 91精品网站| 国产精品一区二区3区| 午夜欧美一区二区三区在线播放| 色88888久久久久久影院按摩| 欧美成人精精品一区二区频| 亚洲第一天堂无码专区| 日韩三级免费观看| 亚洲精品videosex极品| 在线观看亚洲成人| 欧美成人精品在线播放| 久久精品最新地址| 亚洲精品国久久99热| 午夜精品一区二区三区三上悠亚| 91精品国产丝袜白色高跟鞋| 亚洲三级免费看| 久久综合色综合88| 国产精品对白交换视频| 欧美一区二区三区四区在线观看| 精品国产一区二区三区在线观看 | 九色91popny| 欧美日韩免费视频| 自拍偷自拍亚洲精品播放| 亚洲视频欧美视频| 国产一区二区高清不卡| 欧美艳星介绍134位艳星| 成人毛片高清视频观看| 欧美精彩视频一区二区三区| 日本一区二区三区四区视频| 国产福利第一视频在线播放| 国产福利不卡视频| 国产啪精品视频网站| 深夜福利视频一区二区| 成人免费在线观看入口| 欧美国产综合视频| 三级小说欧洲区亚洲区| 亚洲男人天堂网| 麻豆传媒视频在线| 五月激情丁香一区二区三区| 男人插女人下面免费视频| 麻豆国产91在线播放| 成人欧美一区二区三区在线| 午夜视频在线看| 久久免费视频一区| 91久久久久久| 免费污视频在线| 99久久夜色精品国产网站| 欧美中文字幕在线| avlululu| 久久一本综合频道| 欧美激情视频在线免费观看 欧美视频免费一 | 精品久久久三级丝袜| 国产精品你懂的| 天天色图综合网| 成人h动漫免费观看网站| 国产精品久久久久久| 国产成人精品三级| 亚洲视频1区2区| 亚洲一区美女| 欧美精品videos另类| 久久久国产精品一区二区中文| 亚洲欧美第一页| 91在线导航| 亚洲每日更新| 亚洲欧洲日韩国产| 超碰国产在线| 中文字幕一区二区三区在线观看| 四虎影视永久免费在线观看一区二区三区 | 国产精品7m凸凹视频分类| 亚洲精品视频中文字幕| 成人一对一视频| 免费看a在线观看| 精东粉嫩av免费一区二区三区| 亚州国产精品久久久| 免费黄色网页在线观看| 亚洲理论在线观看| 中文字幕av日韩精品| 激情综合在线| 性色av一区二区三区红粉影视| 神马电影网我不卡| 欧美丰满少妇xxxxx高潮对白| 999在线免费视频| 午夜在线视频一区二区区别| 一本色道久久综合狠狠躁篇的优点| mm1313亚洲国产精品无码试看| 亚洲国产一区二区三区a毛片| 97久久精品在线| 免费av网站在线观看| 激情成人中文字幕| 色偷偷亚洲第一综合| 亚洲黄色av一区| 91视频最新入口| 91色porny蝌蚪| 91淫黄看大片| 亚洲精品国产精华液| 亚洲天堂av线| 中文字幕一区二区三区色视频| 日本成人黄色网址| 亚洲成人精品一区| 在线观看黄色av| 亚洲国产欧美一区二区丝袜黑人| xxxx69视频| 国产精品一区不卡| 精品欧美国产| 麻豆成人在线| 亚洲欧洲日本国产| 国产91精品入口| 99热亚洲精品| 99免费精品在线观看| 国产一级爱c视频| 国产偷v国产偷v亚洲高清| 激情五月俺来也| 亚洲午夜三级在线| 岛国大片在线观看| 精品久久一二三区| 国产成人精品一区二区三区免费| 日韩在线观看高清| 亚洲影院天堂中文av色| 国产日韩欧美电影在线观看| 自由日本语亚洲人高潮| 九色91在线视频| 国产精品一区二区久激情瑜伽| 国产91美女视频| 亚洲综合在线视频| 午夜视频在线免费观看| 亚洲欧美在线一区二区| 高清性色生活片在线观看| 一区二区三区欧美日韩| 国产欧美在线一区| 日韩av午夜在线观看| 久久久精品动漫| 一道本一区二区三区 | 国产成人1区| 色综合久综合久久综合久鬼88| 欧美激情护士| 欧美日韩精品系列| 亚洲女人视频| 日韩精品中文字幕一区二区三区| 98在线视频| 亚洲人av在线影院| 99精品国自产在线| 欧美在线视频网| 欧美综合久久| a级黄色片网站| 欧美国产精品中文字幕| 色99中文字幕| 亚洲男同性恋视频| 美女毛片在线看| 亚洲三级免费看| 成人在线免费av| 欧美亚男人的天堂|