【发布时间】:2014-01-24 07:40:25
【问题描述】:
在开发 Windows 应用程序时:
如何保护连接字符串中的用户名和密码?
像银行这样的组织,他们会将其数据库的用户名和密码提供给应用程序开发人员吗?如果不是这些应用程序开发人员通常如何编写数据库连接?
保护连接字符串中的用户和密码的行业标准是什么?
谢谢
【问题讨论】:
标签: c# database ado.net sqlconnection
在开发 Windows 应用程序时:
如何保护连接字符串中的用户名和密码?
像银行这样的组织,他们会将其数据库的用户名和密码提供给应用程序开发人员吗?如果不是这些应用程序开发人员通常如何编写数据库连接?
保护连接字符串中的用户和密码的行业标准是什么?
谢谢
【问题讨论】:
标签: c# database ado.net sqlconnection
- 如何保护连接字符串中的用户名和密码?
要么使用 Windows 身份验证来消除连接字符串中对密码的需要,要么使用以下一项或多项的组合:
加密,例如使用Protected Configuration。
限制对配置文件的访问,例如使用 ACL。
请注意,上述技术适用于服务器应用程序(例如 ASP.NET),其中对服务器的访问权限可能仅限于授权管理员。它不适用于直接访问数据库的客户端应用程序。
还请注意,仅靠加密本身是不够的:它只是用控制对加密密钥的访问的问题来代替控制对明文配置文件的访问的问题。使用受保护的配置时,您需要决定如何限制对用于加密配置文件的加密密钥的访问。
2。 像银行这样的组织,他们会将其数据库的用户名和密码提供给应用程序开发人员吗?如果不是这些应用程序开发人员通常如何编写数据库连接?
一般来说,开发人员只会获得在开发/测试环境中访问数据库的凭据。对生产数据库的访问将受到限制。
3。 保护连接字符串中的用户和密码的行业标准是什么?
没有“行业标准”,但请参阅问题 1 的答案。
【讨论】:
您可以像 web.config 一样在 app.config 中encrypt sections。 MS 称之为受保护的配置。 像这样
<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData>
<CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAH2... </CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
【讨论】:
来自 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 Framework 使用指定的提供程序来解密 CipherValue 并使其可用于您的应用程序。您无需编写任何额外的代码来管理解密过程。 请阅读 MSDN 上的以下文章以获取更多信息:
【讨论】:
您应该使用参数。
示例 SqlCommand command = new SqlCommand("select * from Login where Username= @name", conn); command.Parameters.Add(new SqlParameter("@name", uname.txt)); .
【讨论】: