在AD帐户的数据库中存储SID或用户名?

时间:2009-10-12 21:00:34

标签: c# active-directory

我正在开发的C#应用​​程序需要为应用程序的任何用户存储一些元数据(例如,应用程序首选项,权限等)。我们使用AD进行授权/身份验证。

将SID或DOMAIN /用户名存储在应用程序数据库中以识别AD帐户是否更好?

3 个答案:

答案 0 :(得分:3)

我会存储SID,并在/需要显示与该帐户关联的名称时使用LookupAccountSID。

答案 1 :(得分:2)

我已经两种方式做到了......

  • 如果您存储了SID,那么您可以在不破坏应用程序的情况下重命名帐户,但这不是人类可读的。
  • 如果您存储用户名,那么它很容易阅读,但如果重新命名该帐户,则必须更新您的数据。

答案 2 :(得分:2)

我们已经构建了一个小类来连接两个并且只在sid上进行比较。格式类似于以下字符串:

"Domain\\User\nS-1-5-21-...........-1129"

这允许我们在数据库和调试器中使用“友好”名称,但所有绑定实际上都在值的sid部分。

当您询问用户名更改时会发生什么?数据陈旧且保持这种状态:)

顺便说一下,如果你做这样的事情,请确保你不能从对象中获取'显示名称',因为你不希望它显示给用户,因为它可能是陈旧的。而是提供一个LookupUserName()例程,该例程执行SID到帐户名的正确解析。

最后,请确保存储SID,但是请执行此操作。你不想存储JDoe,当Jane退出并且约翰开始一个月后他突然有权访问?