数据库连接用户名和密码加密
我们的工程项目往往是使用云数据库的,连接使用账号密码就行了,但是程序里直接有密码是十分不安全的
这里我参考了别人的博客对这个问题进行解决
1. 需求背景
我们在开发应用时,需要连接数据库,一般把数据库信息放在一个属性配置文件中,比如java的mysql连接往往是这样
jdbc.properties的代码
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
相关文章
- 加密项目的数据库、Redis等密码
- 生成IOS app专用密码教程
- 任意密码重置漏洞(身份认证缺失)
- 修改MySQL密码:快速又安全(改mysql密码)
- Oracle用户密码更新指南(oracle用户密码过期)
- 解锁Neo4j:记住默认密码(neo4j默认密码)
- 改变MySQL数据库密码的步骤及注意事项(修改mysql数据库密码)
- 如何查看MySQL数据库的密码(如何查看mysql的密码)
- Vesta 如何修改 Mysql 数据库 root 密码
- Linux系统下提升密码安全性(修改linux密码复杂度)
- 无需密码即可安全登陆Oracle数据库(oracle无密码登录)
- 解密MSSQL链接数据库的密码
- 设置MySQL帐户密码的过期时间(mysql密码过期时间)
- 重置WDCP数据库MySQL密码重置实战攻略(wdcpmysql密码)
- 密码如何改变MSSQL数据库密码(如何改mssql)
- MSSQL密码修改命令的正确使用方法(命令修改mssql的密码)
- Linux数据库忘记密码解决方案(linux数据库忘记密码)
- MSSQL添加安全保护——密码实现安全控制(mssql添加密码)
- MySQL如何快速修改数据库密码(mysql修改数据库密码)
- 带密码保护的Redis更安全更方便(带密码redis)
- 深入探索配置 Redis 密码的必须技巧(如何配置redis 密码)
- 查询Redis密码简单易行的方案(如何查询redis密码)
- linux忘记mysql密码处理方法