我应该在哪里保存数据库的凭据?

2022-09-01 08:16:47

将数据库的用户名和密码保存在xml文件中并将其导入spring安全性的安全文件是一个好主意吗?有没有更好的选择?如果我需要加密密码,该怎么做,如何在phpMyAdmin上找到密码的加密版本?我的SQL

登录服务.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

   <bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">

    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost/muDB" />
    <property name="username" value="jack" />
    <property name="password" value="alex123432" />
   </bean>

</beans>

myproject-security.xml

      ....
    <beans:import resource='login-service.xml'/> 
      ....

请注意:由于所有与用户相关的密码都已加密,因此我仅用于隐藏数据库本身的密码,而不是表列。我的应用程序将使用此密码连接到数据库。


答案 1

首先,您应该知道,无论您做什么,如果攻击者获得了对您的服务器文件的访问权限,他将能够窃取密码。

如果您使用应用服务器的数据源,则只需将纯文本密码的位置移动到其他文件即可。

如果您使用某种形式的加密来避免存储明文密码,您的应用程序仍必须使用它已经具有的另一个密码对其进行解密。如果攻击者不遗余力地访问您的系统,您可以相当确信他也会知道这一点。你正在做的是混淆(并获得虚假的安全感),而不是实际保护它。

更安全的解决方案是让用户在应用启动期间提供密码(或用于解密数据库密码的密码),但这会使管理变得非常困难。如果您已经偏执(良好的安全性类型,而不是疯狂的类型),则认为某人可以访问您的服务器,则应考虑DB密码将驻留在系统内存中。

除此之外,将密码保存在配置文件中(您可以相当确信服务器不会向外界显示),锁定系统并仅向数据库用户提供所需的最低权限。


答案 2

一种选择是将Jasypt与它的Spring集成一起使用,以便能够将usename/password作为属性存储在常规属性文件中,但以加密形式存储。Jasypt将透明地负责解密


推荐