当前位置: 首页 > 面试题库 >

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

方通
2023-03-14
问题内容

我有一个ASP.NET
MVC应用程序,我需要允许客户根据其环境配置MembershipProvider,但仍能够将该MembershipUser映射到我们数据库中的具体User模型。

Membership.GetUser()将使我能够访问已登录用户的Membership.ProviderUserKey。我可以使用它来关联用户记录。我们的自定义SQL提供程序将仅返回User.Id,但AD则不同。在这种情况下,ProviderUserKeyIdentityReference

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

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

更新

我不知道在发帖之前进行搜索时怎么会错过这个SO问题,但是很明显,ActiveDirectoryMembershipProvider并且ActiveDirectoryMembershipUser像今天这样存在的任务还不够用。

该SO问题的一个答案链接了以下文章,其中指出:

SID的相对标识符部分相对于域是唯一的,因此,如果域发生变化,则相对标识符也将发生变化。

因此,当用户对象从一个域移动到另一个域时,必须为该用户帐户生成一个新的SID,并将其存储在Object-SID属性中。

但是,每个组和用户都有一个Object-GUID,即使移动了帐户,该对象也不会改变。因此,我应该在User类中使用Object-
GUID,而不是Object-SID。否则,如果某人的用户记录被移动,则该记录将被放弃,从而破坏了其主体与他们创建的数据之间的关系。

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


问题答案:

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

这也是唯一的列,因此它必须有一个索引…



 类似资料:
  • 我创建了一个TextView,它以多行显示值 ,我希望将该值保留在SQLite数据库中。这是我使用的代码: 问题是当我保存值时,整个值被插入到一个单元格中。我希望每行的值分开,然后插入到每行的单个单元格中,尽管我使用扫描器方法插入数据,但它不起作用。那有什么办法吗?

  • 问题内容: 在MySQL数据库中用PHP存储IP的最佳实践是什么?有一个名为ip2long的函数-但这仅适用于IPv4。但是IPv6呢? 我知道一个用于IPv6 IP的php函数,但是在Windows上的PHP <Version 5.3上不起作用 问题答案: 可以将点分十进制IPv4地址转换为整数,最大大小为32位。IPv6地址是128位。由于128位不适合PHP int,因此在PHP中使用它会很

  • 问题内容: 有人可以告诉我,在以下情况下如何进行? 接收文件(MS文件,ODS,PDF) 通过Apache Tika提取公元核心元数据+通过jackrabbit-content-extractors提取内容 使用Jackrabbit将文档(内容)及其元数据存储到存储库中 ? 检索文档+元数据 我对第3点和第4点感兴趣… 详细信息:该应用程序正在以交互方式处理文档(一些分析-语言检测,单词计数等。+

  • 问题内容: 我正在研究项目,但遇到了一些问题,我进行了搜索,但是找不到完整的学习资源,我需要使用我的Java程序将图像存储在SQL Server数据库中,并且需要使用“返回检索”,图像的大小不大,它们介于30到50 K之间,我可以使用toolKit中的getImage()方法从磁盘加载图像 ,但我不知道如何将该图像转换为二进制格式并存储在数据库中,然后从数据库中检索回来。我想通过查看几个站点将其存

  • 问题内容: 我不敢相信我无法做到这一点,但我希望能够将当前日期和时间从php存储到mysql表中。 表中的列是类型datetime。我已经试过了 但是我的时间戳记为0000-00-00 00:00:00 这一定很容易做到,但我无法使其正常运行!我想使用来自php的时间戳,而不是使用mysql now()函数 问题答案: 不要将其另存为Unix Timestamp(输出),而是另存为DATETIME

  • 问题内容: 因此,在C ++ / C#中,您可以创建标志枚举来保存多个值,并且在数据库中存储单个有意义的整数当然是微不足道的。 在Java中,您有EnumSets,这似乎是在内存中传递枚举的一种很好的方法,但是如何将组合的EnumSet输出为整数进行存储?还有另一种方法可以解决这个问题吗? 问题答案: