System.Data.SqlClient.SqlCredential
类有一个双参数构造函数,它接受用户名(System.String
(和密码(System.Security.SecureString
(。
调用此构造函数后,处理存储密码的SecureString
是否安全?我希望SqlCredential
类应该根据SQL server身份验证方案对密码执行单向哈希,而不需要继续访问参数。。。但这可能在打开连接并发出质询之前无法完成(可以在HMAC计算中涉及随机数以防止重放攻击(。如果SqlCredential
确实独立地保留了所需的信息,那么我自然希望加快SecureString
存储的擦除,是可逆的。
我在文档中找不到任何语句来指定传入的密码SecureString
对象在SqlCredential
构造函数返回后是否必须保持有效。
SqlCredential
实际上并不处理或存储任何源自密码的数据;保存与CCD_ 11相关联的凭证相关参数只是一种方便的结构。
密码SecureString
实例需要保持有效,直到调用SqlConnection.Open()
或该函数将抛出ObjectDisposedException
为止。如果像我的应用程序一样,您的应用程序有任何自动重新连接逻辑,那么您需要无限期地保留SecureString
(或重新创建它的能力(。至少在带有Win32的.NET Framework上,SecureString
在静止时会对其内容进行加密,因此进程内存转储不会暴露秘密。