当开发Windows应用程序:连接字符串中用户名和密码的安全性如何?
我的连接字符串中如何保护用户名和密码?
像银行这样的组织,他们会向应用程序开发人员提供他们数据库的用户名和密码吗?如果不是典型的应用程序开发人员如何编写DB连接?
保护连接字符串中用户和密码的行业标准是什么?
感谢
当开发Windows应用程序:连接字符串中用户名和密码的安全性如何?
我的连接字符串中如何保护用户名和密码?
像银行这样的组织,他们会向应用程序开发人员提供他们数据库的用户名和密码吗?如果不是典型的应用程序开发人员如何编写DB连接?
保护连接字符串中用户和密码的行业标准是什么?
感谢
- 我的连接字符串中如何保护用户名和密码?
使用Windows身份验证,以消除在连接字符串中密码的需要,或者使用一个或多个的组合:
加密,例如使用Protected Configuration。
限制对配置文件的访问,例如,使用ACL。
请注意,上述技术适用于服务器应用程序(例如ASP.NET),其中对服务器的访问权限可以限制为授权管理员。对于直接访问数据库的客户端应用程序来说效果不佳。
还要注意,加密本身还不够:它仅仅是通过控制对加密密钥的访问问题来代替控制对纯文本配置文件的访问的问题。使用受保护的配置时,您需要决定如何限制对用于加密配置文件的加密密钥的访问。
2. 像银行这样的组织,他们会把应用程序开发人员的用户名和密码发给他们吗?如果不是典型的应用程序开发人员如何编写DB连接?
一般情况下,开发人员只能获得在开发/测试环境中访问数据库的凭据。访问生产数据库将受到限制。
3. 保护连接字符串中用户和密码的行业标准是什么?
没有“行业标准”,但见回答问题1
从MSDN:
ASP.NET 2.0中引入了新的功能,称为保护配置,使您能够加密的配置文件中的敏感信息。尽管主要是为ASP.NET设计的,但受保护的配置也可用于加密Windows应用程序中的配置文件部分。有关受保护配置功能的详细说明,请参阅Encrypting Configuration Information Using Protected Configuration。
以下配置文件片段在加密后显示connectionStrings节。 configProtectionProvider指定用于加密和解密连接字符串的受保护配置提供程序。 EncryptedData部分包含密文。
<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData>
<CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAH2... </CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
当加密的连接字符串是在运行时检索,.NET框架使用指定的供应商来解密的CipherValue,并将其提供给您的应用程序。您不需要编写任何其他代码来管理解密过程。 阅读MSDN下面的文章请以获取更多信息:
您应该使用的参数。 SqlCommand command = new SqlCommand(“select * from Login where Username = @name”,conn);}} command.Parameters.Add(new SqlParameter(“@ name”,uname.txt)); 。
这不关于保护连接字符串数据 –
我认为OP正在寻找如何加密用户和传递*连接*到数据库,而不是选择一个用户并从数据库传递*。 – paqogomez
好的。我在你提到的有关测试环境的第二个答案中我的错误 – user3229034
您可以在app.config中使用与web.config相同的方式encrypt sections。 MS称其为保护配置。 像这样
<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData>
<CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAH2... </CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
我相信你的意思是一组与原始平行的虚拟数据? –
@sniff_bits - 开发/测试数据库中的数据取决于组织。如果生产数据是保密的,它可能是虚拟数据,或者可能是生产数据的匿名版本。如果它不是机密的,它可能只是生产数据的快照。 – Joe
@Joe:我想将我的应用程序部署到**最终用户**。如何使用连接到集中式SQL服务器来保护用户名/密码?正如你所写的那样:“对于直接访问数据库的客户端应用程序来说效果不佳。” – YukiSakura