在SQL Server 2008数据库中存储和使用Microsoft用户帐户凭据

时间:2010-04-26 17:10:32

标签: sql sql-server password-protection user-accounts

对于标题而言,我不完全肯定如何说这个,所以请原谅我。此外,我似乎无法弄清楚如何甚至谷歌这个问题,所以我希望我能在正确的方向上取得领先。

我的部分软件(VB.NET App)需要能够访问/读取/写入共享网络文件夹。我可以选择让用户指定访问所述文件夹可能需要的任何凭据。

我想将这些凭据存储在SQL Server数据库中作为配置的一部分(我有一个包含配置的表)。

我担心的是用户帐户的密码将无法解密。但是,如果我加密密码,VB.NET App和/或数据库将无法使用凭证进行文件i / o操作,除非密码在使用前未加密。

我正在寻找如何更好地处理这种情况的建议。

3 个答案:

答案 0 :(得分:0)

我建议在您的应用程序中使用Windows身份验证。如果这样做,那么您可以在共享文件夹和数据库中设置权限,并避免在数据库中存储任何类型的凭据。

答案 1 :(得分:0)

如果要加密存储,则需要使用自己的加密算法或允许再次解密密码的算法。有很多方法可以做到这一点,其中一个更常见的方法是使用安全词加密它们,这样你就可以使用同一个词再次解密。

好吧,可能不是一个真正的单词,而是像随机字节数组或任何类似的东西。

答案 2 :(得分:0)

SQL Server本身具有存储Windows凭据的方法,请参阅CREATE CREDENTIAL

  

凭证是包含的记录   认证信息是   需要连接到资源   在SQL Server之外。大多数凭据   包括Windows用户和密码。

但是,以任何形式将用户凭据存储在应用程序中总是一个坏主意。例如,当用户更改密码时,它们会不同步。其次,冒充用户访问资源从不正确的解决方案。正确的解决方案是实际设置组成员资格并在资源上正确定义访问控制列表。

访问资源的唯一正确方案是:

  • 作为运行应用程序的用户,即。普通的普通用例
  • 作为冒充连接用户的服务,这是通过从SSPI身份验证中获取远程身份令牌来完成的,例如NegotiateStream.RemoteIdentity