国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - 阿里巴巴Druid,輕松實現MySQL數據庫加密!

阿里巴巴Druid,輕松實現MySQL數據庫加密!

2021-03-02 23:36Java中文社群磊哥 Mysql

本文我們使用阿里巴巴開源的 Druid 實現了 MySQL 的密碼加密,Druid 的加密過程非常方便,無需編寫任何代碼,只需要添加 Druid 依賴,再通過 Druid 的工具類生成密文,最后將密文配置到 application.yml 文件即可。項目在運行時會通過攔

阿里巴巴Druid,輕松實現MySQL數據庫加密!

為什么要加密?

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

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

如何加密?

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

什么是Druid?

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

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

Druid可以做什么?

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

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

加密執行流程

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

阿里巴巴Druid,輕松實現MySQL數據庫加密!

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

阿里巴巴Druid,輕松實現MySQL數據庫加密!

使用Druid實現加密

本示例運行環境:

  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 項目:

<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/INpAiEA6jwSyFqMUPOh1XlrzNFek+RthOQ5n4+ALPo+vULayO0CIQC0O7JM9sIq+tg+jCGv+ypk6vbuRKY9m5W2rSRXapGm3wIgRHul3jAjIDPrF/f1HaAFL+Y0Yws7Ebyp8/yCRWF7iA0CIALbe20q8FMcHPeI4zPWCIsHCpkmb3hEkjAOOKhGIT8DAiAqiUuz92NqKeyjmOfons1ka65EzVwA3NDhZ6+IQcnuig== publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKTo3DFkg8yYilRprXAQaED7TPbVVth9nJ0usWSuza280F2Fi0A9s3nyK68fbzL6kSBxKpJgB07lHFFx4AsbtHMCAwEAAQ== password:IMgKm27bOHok3/+5aDL4jGBoVVZkpicbbM6pIXQppi3dI7h3jngSAqhqwqYnfuYpyVJ0k++q9xWWnHtd6sAWnQ== 

從上述結果可以看出,使用 ConfigTools 類會生成 3 部分的內容:

  1. privateKey:私鑰,暫時不會用到,用于密碼的加密;
  2. publicKey:公鑰,用于密碼的解密;
  3. 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/+5aDL4jGBoVVZkpicbbM6pIXQppi3dI7h3jngSAqhqwqYnfuYpyVJ0k++q9xWWnHtd6sAWnQ== 

      # encrypt config 

      filters: config 

      connect-properties: 

        config.decrypt: true 

        config.decrypt.key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAKTo3DFkg8yYilRprXAQaED7TPbVVth9nJ0usWSuza280F2Fi0A9s3nyK68fbzL6kSBxKpJgB07lHFFx4AsbtHMCAwEAAQ== 

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

阿里巴巴Druid,輕松實現MySQL數據庫加密!

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

阿里巴巴Druid,輕松實現MySQL數據庫加密!

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/+5aDL4jGBoVVZkpicbbM6pIXQppi3dI7h3jngSAqhqwqYnfuYpyVJ0k++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 的啟動參數中配置公鑰的值即可,如下圖所示:

 阿里巴巴Druid,輕松實現MySQL數據庫加密!

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

阿里巴巴Druid,輕松實現MySQL數據庫加密!

生產環境替換公鑰

生產環境在啟動 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); 

 總結

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

 

原文地址:https://mp.weixin.qq.com/s/hm8CiN2ZqbEpeiya6T0a9A

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 成人日韩在线观看 | 男女做爰猛烈叫床无遮挡 | 欧美精品亚洲精品日韩精品 | 18视频在线观看网站 | 国产在线观看免费 | 三级黄色在线视频 | 日韩第一区 | 中文字幕视频一区 | 久久久精品亚洲 | 综合二区 | 性色蜜桃x88av | 在线观看亚洲 | 26uuu国产电影一区二区 | 中文字幕免费播放 | 亚洲精品日本 | 欧美一区二区三区四区不卡 | 欧美日韩精品一区二区在线播放 | 精品视频免费在线 | 国产精品 日韩 | 成人欧美一区二区三区在线观看 | 国产久| 综合精品久久久 | 99久久久无码国产精品 | 另类sb东北妇女av | av手机在线电影 | 日韩视频一区 | 玖玖爱视频在线 | 久久99亚洲精品 | 免费观看黄色 | 日韩在线精品 | 久久伊人国产 | 久久久中文字幕 | 羞羞动漫在线观看 | 久久综合一区二区 | 天堂av一区二区 | 亚洲视频 欧美视频 | 国产精品一二三区视频出来一 | 日韩精品在线免费视频 | 国产精品女同一区二区免费站 | 免费观看全黄做爰大片国产 | 国产精品视频一区二区三区不卡 |