Hac*_*ese 5 sql database-design asp.net-membership
我有一个ASP.NET MVC应用程序,我需要允许客户根据他们的环境配置MembershipProviders,但仍然能够将MembershipUser映射到我们数据库中的具体User模型.
Membership.GetUser()将允许我访问登录用户Membership.ProviderUserKey.我可以使用它来关联用户记录.我们的自定义SQL提供程序将只返回User.Id,但AD是另一回事.在那种情况下,ProviderUserKey是一个IdentityReference.
正如您所想象的那样,这些查找将非常频繁地发生(尽管缓存可以帮助减少数据库级别的查找).
我无法确定哪条路径更好:将SID存储为varbinary或varchar列.此列不是主键,也不具有聚簇索引.知道我可以很好地索引字符串,并且以字符串格式读取SID肯定比二进制更好.有谁愿意分享他们如何解决这种情况?
我不知道在我发布之前我在搜索时是如何错过这个问题的,但是看起来非常清楚,ActiveDirectoryMembershipProvider并且ActiveDirectoryMembershipUser现在还没有完全按照手头的任务进行裁剪.
SO问题的答案与以下文章相关联,其中陈述如下:
SID的相对标识符部分相对于域是唯一的,因此如果域发生更改,则相对标识符也会更改.
因此,当User对象从一个域移动到另一个域时,必须为用户帐户生成新的SID并将其存储在Object-SID属性中.
但是,每个组和用户都有一个Object-GUID,即使移动了帐户,它也永远不会改变.因此,我应该在我的User类中使用Object-GUID,而不是Object-SID.否则,某人的用户记录如果被移动则将被放弃,从而打破他们的主体与他们创建的数据之间的关系.
不幸的是,ActiveDirectoryMembershipUser不让我得到Object-GUID.所以,我要么必须在ActiveDirectoryMembershipUser工作之后将SID转换为GUID ,要么创建我自己的MembershipProvider,在现场完成我需要的所有工作.不幸的是,这意味着我可能不得不重复已经完成的工作ActiveDirectoryMembershipProvider.