关于druid数据库密码加密流程及问题

Posted 程序媛的爬行之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于druid数据库密码加密流程及问题相关的知识,希望对你有一定的参考价值。

最近项目中需要在配置中将数据库密码加密,就使用了阿里的druid来实现,将流程和问题和大家分享一下。

项目使用的是Spring加jetty,原先数据库连接使用的是Apache的DBCP:commons-dbcp2-2.1.1.jar+ojdbc6.jar

配置:<New class="com.alibaba.druid.pool.DruidDataSource">
            <Set name="driverClassName">oracle.jdbc.driver.OracleDriver</Set>
            <Set name="url">jdbc:derby:memory:spring-test;create=true</Set>
            <Set name="username">test123</Set>            
            <Set name="password">test123</Set>      
            <Set name="validationQuery">select 1 from dual</Set>           
         </New>

改成druid:druid-1.0.13.jar+ojdbc6.jar

配置:(只需将class修改为com.alibaba.druid.pool.DruidDataSource)

  <New class="com.alibaba.druid.pool.DruidDataSource">
            <Set name="driverClassName">oracle.jdbc.driver.OracleDriver</Set>(不配也可以,会根据url自动识别)
            <Set name="url">jdbc:derby:memory:spring-test;create=true</Set>
            <Set name="username">test123</Set>            
            <Set name="password">OkBVtGCZIhSXT7Fcg==</Set>
            <Set name="filters">config</Set>
            <Set name="connectionProperties">config.decrypt=true</Set>    
            <Set name="validationQuery">select 1 from dual</Set>
            <Call name="init"/>
         </New>

以上配置的解释:其他的参数配置不详述,重点解释数据库密码加密

    1.password:使用命令java -cp druid-1.0.13.jar com.alibaba.druid.filter.config.ConfigTools you_password来生成密码

    每次执行生成的密文是不一样的

    如果使用的是druid-1.0.31.jar会生成privateKey、passwordKey和publicKey,配置需改成

     <Set name="password">OkBVtGCZIhSXT7Fcg==</Set><!-- 生成的passwordKey -->
            <Set name="filters">config</Set>
            <Set name="connectionProperties">config.decrypt=true;config.decrypt.key=DSDFGTGETGsd</Set>  <!-- 生成的publicKey-->(不改也可以,有默认)

    2.filters:配置监控

    3.connectionProperties:config.decrypt=true提示Druid数据源需要对数据库密码进行解密

    4. <Call name="init"/>:必须配置这个方法。

    在https://github.com/alibaba/druid/tree/master下载源码项目导入工程中,debug源码之后发现参数都能接收进去,但是不去执行解密的操作,一直报错用户名\口令无效,登录被拒绝,加上这个方法配置之后能走通

其他相关的问题可参考https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

        https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter

配置好之后,报错package oracle.jdbc.driver is sealed,数据库的包被加密,一般情况是jar包冲突。

排查了好久终于在一个war包中找到ojdbc7.jar,去除7之后,终于能正常运行了。

 

以上是关于关于druid数据库密码加密流程及问题的主要内容,如果未能解决你的问题,请参考以下文章

Druid使用及开启数据库密码加密

spring boot基于DRUID数据源密码加密及数据源监控实现

如何使用druid加密数据库密码

Druid数据库密码加密

Druid-Druid数据源加密数据库密码配置

druid数据库密码加密程序编写