數據庫連接用戶名和密碼加密


我們的工程項目往往是使用雲數據庫的,連接使用賬號密碼就行了,但是程序里直接有密碼是十分不安全的

這里我參考了別人的博客對這個問題進行解決

1. 需求背景

我們在開發應用時,需要連接數據庫,一般把數據庫信息放在一個屬性配置文件中,比如java的mysql連接往往是這樣

jdbc.url=jdbc\:mysql\://127.0.0.1/messageboards
jdbc.username=root
jdbc.password=root

 C#連接oracle的代碼

Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=139.196.213.70)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=Orcl)));Persist Security Info=True;User ID=scott;Password=tiger;

隔着屏幕就感覺到了不安全,即使你對用戶給定了其訪問用戶表的權限,但是人家一脫庫這些東西全都被盜走可就太秀了

用戶表的數據我們都不明文明文存儲,何況這個更敏感的服務器信息呢,同樣還是加密處理

2. 實現原理

實現原理其實很簡單,配置文件存儲加密后的用戶名和密碼,重寫Druid數據源的兩個方法setUsername(String username)和setPassword(String password)對信息解密。

3. 實現方式
3.1 寫加密工具
首先得有一個加密工具,具有加解密功能,這里為了方便直接使用Druid(就是對 sql、數據源,web、url、session等進行監控的那個)中的工具類com.alibaba.druid.filter.config.ConfigTools。使用其中的encrypt(String plainText)方法和decrypt(String cipherText)方法采用默認的公私玥加解密。

3.2 加密配置文件
僅需將username和密碼換為自己加密過的就好

<!-- Druid JNDI DataSource for J2EE environments -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    <property name="url" value="${jdbcUrl}" />
    <property name="username" value="${username}" />
    <property name="password" value="${password}" />
    <!-- 配置初始化大小、最小、最大 -->
    <property name="initialSize" value="5" />
    <property name="minIdle" value="5" />
    <property name="maxActive" value="20" />
    <!-- 配置獲取連接等待超時的時間 -->
    <property name="maxWait" value="60000" />
    <!-- 配置間隔多久才進行一次檢測,檢測需要關閉的空閑連接,單位是毫秒 -->
    <property name="timeBetweenEvictionRunsMillis" value="3000" />
    <!-- 配置一個連接在池中最小生存的時間,單位是毫秒 -->
    <property name="minEvictableIdleTimeMillis" value="300000" />

    <property name="validationQuery" value="SELECT 'x' FROM DUAL" />
    <property name="testWhileIdle" value="true" />
    <property name="testOnBorrow" value="false" />
    <property name="testOnReturn" value="false" />

    <!--打開PSCache,並且指定每個連接上PSCache的大小 ,Oracle,把poolPreparedStatements配置為true,mysql可以配置為false。分庫分表較多的數據庫,建議配置為false-->
    <!--<property name="poolPreparedStatements" value="true" />-->
    <!--<property name="maxPoolPreparedStatementPerConnectionSize" value="20" />-->

    <!-- 開啟Druid的監控統計功能 -->
    <property name="filters" value="stat,config" />
    <!-- 開啟數據庫密碼解密-->
    <property name="connectionProperties" value="config.decrypt=true" />            
</bean>  

使用ConfigFilter解密密碼,有三種方式配置:
1) 可以在配置文件my.properties中指定config.decrypt=true
2) 也可以在DruidDataSource的ConnectionProperties中指定config.decrypt=true
3) 也可以在jvm啟動參數中指定-Ddruid.config.decrypt=true


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM