使用securestring进行sql连接

Ric*_*ich 7 .net c# securestring

我想使用SecureString来保存数据库的连接字符串.但是,只要我将SqlConnection对象的ConnectionString属性设置为securestring的值,它肯定会对能够读取应用程序内存的任何其他应用程序可见吗?

我做了以下假设:
a)我无法在托管内存之外实例化SqlConnection对象
b)托管内存中的任何字符串都可以被Hawkeye等应用程序读取

Joe*_*Joe 5

当您需要将字符串传递给托管API(例如设置ConnectionString)时,SecureString绝对不会为您提供任何好处.

它真正用于与安全的非托管API进行安全通信.

从理论上讲,微软可以考虑增强SqlConnection对象以支持安全的ConnectionString,但我认为他们不太可能这样做,因为:

  • SecureString实际上仅在客户端应用程序中有用,例如,密码是从用户输入逐个字符构建的,而不是在托管字符串中拥有整个密码.

  • 在这样的环境中,使用Windows身份验证与SQL Server的连接更为常见.

  • 在服务器上,还有其他方法可以保护SQL Server凭据,首先将访问服务器的权限限制为授权管理员.


2012

微软做了增强SqlConection对象支持安全的ConnectionString通过传递SqlCredentialSqlConnection.Credential属性:

SecureString pwd = AzureVault.GetSecretStringSecure("ProcessPassword");
SqlCredential = new SqlCredential("Richard", pwd)
connection.Credential = cred;
Run Code Online (Sandbox Code Playgroud)

不幸的是,没有其他DbConnection后代 (例如,OdbcConnection,OleDbConnection,OracleConnection,EntityConnection,DB2Connection)支持它.

  • 使用SQL Server身份验证时,.NET 4.5将允许密码作为SecureString传递:[ADO.NET 4.5中的新功能](http://msdn.microsoft.com/en-us/library/ex6y04yf(v = vs 0.110)的.aspx) (3认同)

Dav*_*urg 5

是的,您可以,是的,应该使用SecureString来避免让密码在内存中畅通无阻,并容易受到攻击。而不是使用sql连接字符串,您需要使用新的SqlCredential类,该类的Password属性是SecureString。请参考以下文章以获取帮助。

https://msdn.microsoft.com/zh-cn/library/system.data.sqlclient.sqlcredential.password(v=vs.110).aspx

http://www.codeproject.com/Tips/408901/Storing-your-connection-string-password-in-SecureS