gpt4 book ai didi

sql - 将 Windows SID 存储在数据库中以进行查找

转载 作者:行者123 更新时间:2023-12-04 21:00:07 25 4
gpt4 key购买 nike

我有一个 ASP.NET MVC 应用程序,我需要允许客户根据他们的环境配置 MembershipProviders,但仍然能够将该 MembershipUser 映射到我们数据库中的具体用户模型。
Membership.GetUser()将允许我访问已登录用户的 Membership.ProviderUserKey .我可以使用它来关联用户记录。我们的自定义 SQL 提供程序将只返回 User.Id,但 AD 是另一回事。在这种情况下,ProviderUserKeyIdentityReference .

正如您可以想象的那样,这些查找将非常频繁地发生(尽管缓存可以帮助减少数据库级别的查找)。

我无法决定哪条路线更好:将 SID 存储为 varbinary 或 varchar 列。该列不是主键,也没有聚集索引。知道我可以很好地索引字符串,并且以字符串格式读取 SID 肯定比二进制更好。有人愿意分享他们是如何解决这种情况的吗?

更新

我不知道我怎么错过了this SO question当我在发布之前搜索时,但似乎很清楚 ActiveDirectoryMembershipProviderActiveDirectoryMembershipUser并不完全适合手头的任务,因为它们存在于今天。

那个SO问题的答案linked the following article ,其中说明了以下内容:

The relative identifier portion of a SID is unique relative to the domain, so if the domain changes, the relative identifier also changes.

Thus when a User object moves from one domain to another, a new SID must be generated for the user account and stored in the Object-SID property.



但是,每个组和用户都有一个 Object-GUID,即使帐户被移动,它也永远不会改变。因此,我应该在我的 User 类中使用 Object-GUID,而不是 Object-SID。否则,如果某人的用户记录被移动并因此破坏了他们的委托(delegate)人和他们创建的数据之间的关系,他们将被放弃。

不幸的是, ActiveDirectoryMembershipUser不让我了解 Object-GUID。所以,我要么必须在 ActiveDirectoryMembershipUser 之后将 SID 转换为 GUID做它的工作,或者创建我自己的 MembershipProvider这可以满足我当场需要的一切。不幸的是,这意味着我可能不得不重复 ActiveDirectoryMembershipProvider 已经为我完成的工作。 .

最佳答案

Microsoft 将 SID 作为 varbinary(85) 存储在 sys.server_principals

这也是一个唯一的列,所以它必须有一个索引......

关于sql - 将 Windows SID 存储在数据库中以进行查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1628595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com