如何保护EF连接字符串?

问题描述:

我在独立的WPF客户端中使用实体框架5。如何配置实体框架,以便连接字符串中的数据库密码在内存中不是纯文本格式?如何保护EF连接字符串?

+0

没有必要根据EF配置,请参阅:http://stackoverflow.com/questions/8760048/encrypt-connectionstring-in-entity-framework-first-code – MUG4N 2013-02-22 19:37:07

+0

http://msdn.microsoft.com/en-us/library/dtkwfdky(v=vs.100).aspx此页面可以帮助您加密配置文件 – 2013-02-22 19:37:54

处理连接字符串安全性与数据库有两种主要方法。

正如@ MUG4N和@BNicoll所指出的那样,您可以加密app.config(或web.config)中的连接字符串,以避免能够轻松读取设置。但是,在这种情况下,实际的用户名和密码仍然存储在机器上,这意味着通过一些工作,您可以检索纯文本密码。

在我看来,更好的解决方案是使用运行应用程序的帐户直接使用SQL进行身份验证。这意味着用户名/密码永远不会在auth循环中使用,而是使用基于NTLM或kerberos令牌的身份验证,这种身份验证安全得多,并且不需要存储可解密的密码。

要使用此方法,您需要确保您位于域中,并为运行应用程序的用户帐户授予访问数据库的权限。然后,您需要将连接字符串中的用户名/密码替换为Integrated Security=SSPI;

不幸的是,此方法要求您在Windows域中运行,这可能不适合您的情况。

退房MS白皮书上security in connection strings

+0

相反,在服务器环境中,它需要存储可解密的认证令牌(除非你有一个HSM/sysadmin在启动时为你做)。没有用户选择的密码那么糟糕,当然,但大致相当于随机选择的密码。 – 2013-02-22 23:06:08

+0

@tc。根据我的理解,除非您为域打开可逆加密,否则无法从加密的用户令牌(本地存储)转换为原始密码。令牌也是特定于机器的,如果受到损害只会从受损机器发起,则会减少攻击媒介。 – 2013-02-22 23:23:55

+0

@tc。 CF MS建议“为了帮助限制访问您的数据源,您必须保护连接信息,例如用户ID,密码和数据源名称。为避免暴露用户信息,我们建议使用Windows身份验证(有时称为集成安全性)尽可能使用集成安全或Trusted_Connection关键字在连接字符串中指定Windows身份验证,无需使用用户标识和密码。“ – 2013-02-22 23:30:08