多数据源切换问题和数据库密码加密的问题

1.问题所在数据库

        不少的时候,咱们会对数据库的密码进行加密,由于为了安全性。若是使用阿里巴巴的Druid的数据源,可使用阿里巴巴的加密技术,同时每次生成的private和public钥,是不相同的,因此能够确保密码的安全性。可是仍然有不少项目使用c3p0数据源,这样的话就会带来问题。固然使用一个数据库的时候也许不会出现,可是使用多个数据源的时候就会出现这样的问题:假设数据库的user为:testUser。那么进行数据库切换的时候,就会出现testUser登入失败的问题,不知道你们有没有遇到。由于咱们项目是使用mybatis,因此以mybatis为例进行讲解。在切换数据库的时候,运行程序时候,控制台出现test对象名不存在错误。一开始我觉得是xml配置的问题,由于是自动生成的,而后本身手写了一边xml,最后仍是这个报错。而后本身写了一个测试案例,发现原来是数据库切换的问题,并无切换到另一个数据库。而后开始找错误,从新去配置。最后仍是没有解决。安全

2.问题分析mybatis

    2.1从配置文件入手测试

    进行bug模式,发现配置文件的密码是能够传输过来的,也能够进行解密。那就是否是进行解密的时候出现的问题。ui

    2.2从数据库入手加密

    由于是出现的testUser登入失败的问题,而后开始怀疑是数据库受权的问题。由于通常针对不一样的数据库会赋予不一样的权限。一开始也确实是解决了这个问题,而后给每一个数据库赋予给这个用户。可是进行切换数据的时候,仍是出现登入失败的问题。也就是说能够进数据源,代表连接多数据源是能够的,这是没有问题的。就是登入链接的时候失败了。也就是password出现问题。到头来仍是解密的时候,失败了。code

3.问题的解决xml

    发现了问题所在之处就好解决了,首先找出加密的时候配置文件:对象

<property name="encryptedProps">  
                <set>  
                    <value>password</value>                     
                </set>  
            </property>

上面那个很重要,由于配置的是多password进行加密。有由于你连接的是多个数据源,因此确定会配置多个password。可是请注意<set>也就是说能够配置多个,上面的那个问题是只配置了一个password也就是说,其它的数据源password1,password2没法进行解密。这个就是致使user没法登入的最终缘由。class

    解决一:<set>增长加密元素。

    解决二:配置文件中所有统一使用一个密码就是password。

相关文章
相关标签/搜索