2010-04-26 80 views
1

我不完全肯定如何为了标题而对此进行说明,所以请原谅我。此外,我似乎无法弄清楚如何甚至谷歌这个问题,所以我希望我能在正确的方向上取得领先。在SQL Server 2008数据库中存储和使用Microsoft用户帐户凭证

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

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

我担心的是用户帐户的密码将不被识别。但是,如果我加密密码,VB.NET应用程序和/或数据库将无法使用凭证进行文件I/O操作,除非密码在使用前未加密。

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

回答

0

SQL Server本身具有的手段来存储Windows凭据,请参阅CREATE CREDENTIAL

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

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

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

  • 作为用户运行的应用程序,即。正常运行的设施,工厂用例
  • 作为冒充连接的用户的服务,这是通过从SSPI认证获得远程身份令牌进行,像NegotiateStream.RemoteIdentity
+0

感谢各位为你的回答,我认为Windows认证会很好地完成。如果我可以让你多了解一些信息,这个应用程序的最终目标是让许多用户拥有不同的权限(依赖于用户组)。我现在正在理解,我应该允许最终用户应用程序访问指定的网络共享,并在他们的Windows帐户设置中指定用户/组的特定权限。正确?另外,您认为我应该在哪里存储应用程序特定的权限?我能以某种方式指定这些权限,就像其他Windows权限一样吗? – instantmusic 2010-04-26 20:08:30

+0

您可以允许特定用户/组访问资源。你可以允许你的应用程序访问特定的用户/组。你不能做的是你不能允许访问特定*应用程序的*资源*。根本没有任何基础设施可以让你认证应用程序,而不是用户。 允许访问用户或组的资源修改资源ACL(访问控制列表),无论是从UI shell还是使用像cacls.exe这样的工具。 – 2010-04-26 20:47:33

+0

啊,我很抱歉,我想我可能会误解这一点。我的意思是说应用程序将直接访问该文件夹,它可以/不能对文件夹执行的操作将由登录并使用该程序的用户帐户决定。 我的下一个问题是自定义应用程序权限(用户可以查看此表单/网格,用户可以从此网格添加/编辑/删除记录等),但只是一些快速阅读周围看起来像我可能不得不存储应用程序 - 我的数据库中的特定权限,并手动将用户/组映射到特定于应用程序的权限。 那对吗?我很开放的提示。 – instantmusic 2010-04-26 20:59:27

0

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

0

您需要使用自己的加密算法,或者如果要将其加密存储,可以再次解密密码。有很多方法可以做到这一点,其中最常见的方法是使用安全字进行加密,以便可以使用相同的单词再次解密。嗯,可能不是一个真正的单词,但像一个随机的字节数组或类似的东西。

相关问题