SqlCredential和SecureString生存期管理



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在静止时会对其内容进行加密,因此进程内存转储不会暴露秘密。

最新更新