【问题标题】:how to secure database connection string如何保护数据库连接字符串
【发布时间】:2023-04-01 18:05:01
【问题描述】:
我通常将包括用户名/密码在内的数据库连接信息保存在 .properties 文件或 .xml 文件中。有没有办法让这更安全?我的意思是在目录级别上,有人可以轻松地编辑文件并连接到数据库。
谢谢
我使用 spring 框架 spring security 和 jsf 2 工具。我实际上正在寻找处理文件级授权以外的解决方案。可以授予用户在 linux 和 windows 上的访问权限。添加一些偏执狂我什至想将其隐藏在授权范围内用户。
我不希望授权用户以纯文本形式查看用户名/密码信息。
感谢回复
【问题讨论】:
标签:
database
spring
security
connection
【解决方案1】:
您可以加密这些文件然后使用它们。虽然它会增加加密/解密的开销。
【解决方案2】:
您可以使未授权用户无法访问连接字符串。这是一个简单的权限问题,只需撤销对配置文件的所有不必要的权限就足够了。但是,您无法保护连接字符串免受授权用户的访问,并且始终包括本地管理员组的所有成员和运行应用程序的用户。
也有加密连接字符串的方法,因为配置支持加密,请参阅Encrypting and Decrypting Configuration Sections。但这是一种防止意外媒体丢失的方法(您的 HDD 出现在跳蚤市场)。除了文件级授权之外,密码学不会增加任何真正的保护因为应用程序本身需要解密配置。我之所以强调这一点,是因为像您这样的问题通常意味着 DRM 强制执行问题,即如何确保使用应用程序的用户不会看到或修改应用程序的某些部分。
有人可以轻松编辑文件并连接到数据库
我希望你的意思是“有人可以很容易地使应用程序连接到不同的数据库”,这应该对授权用户来说很容易。如果你试图隐藏你正在连接的数据库,你真的是在找错误的树,因为它可以通过无数其他方式看到。
【解决方案3】:
看看here 看起来是这样的,来自我在这里提供的链接。
<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
<EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
<KeyName>Rsa Key</KeyName>
</KeyInfo>
<CipherData>
<CipherValue>R7cyuRk+SXJoimz7wlOpJr/YLeADGnwJVcmElHbrG/B5dDTE4C9rzSmmTsbJ9Xcl2oDQt1qYma9L7pzQsQQYqLrkajqJ4i6ZQH1cmiot8ja7Vh+yItes7TRU1AoXN9T0mbX5H1Axm0O3X/285/MdXXTUlPkDMAZXmzNVeEJHSCE=</CipherValue>
</CipherData>
</EncryptedKey>
</KeyInfo>
<CipherData>
<CipherValue>d2++QtjcVwIkJLsye+dNJbCveORxeWiVSJIbcQQqAFofhay1wMci8FFlbQWttiRYFcvxrmVfNSxoZV8GjfPtppiodhOzQZ+0/QIFiU9Cifqh/T/7JyFkFSn13bTKjbYmHObKAzZ+Eg6gCXBxsVErzH9GRphlsz5ru1BytFYxo/lUGRvZfpLHLYWRuFyLXnxNoAGfL1mpQM7M46x5YWRMsNsNEKTo/PU9/Jvnh/lT+GlcgCs2JRpyzSfKE7zSJH+TpIRtd86PwQ5HG3Pd2frYdYw0rmlmlI9D</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>