我有一个通过AD验证的Asp.net MVC项目。我想将审核信息存储在当前登录用户的表中。我应该在数据库中存储什么?我目前正在使用SamAccountName作为我的会员和角色提供者。我应该用这个吗?我应该使用更详细和更现代的UserPrincipalName吗?如果我们最终最终使用多个域会怎样?
Guid怎么样? Guid似乎是明显的选择,但我对此一无所知。它为什么可以为空?这个值会改变吗?它用于什么?
根据SID vs. GUID ...
完全使用SID而不是GUID的原因是为了向后兼容。 Windows NT使用SID来识别资源中ACL中的用户和组。
如果将用户移动到新域,SID实际上会更改,GUID将保留 不变。除非您打算对NT4 AD服务器进行身份验证,否则我认为GUID是最佳选择。
我不知道该怎么做,因为我不能接受我自己的答案2天。最深入的解释获胜?
答案 0 :(得分:7)
根据SID vs. GUID ...
完全使用SID而不是GUID的原因是为了向后兼容。 Windows NT使用SID来识别资源中ACL中的用户和组。
话虽如此,我决定选择GUID。如果将用户移动到新域,SID实际上会发生变化,GUID将保持不变。只要您不打算针对NT4 AD服务器运行应用程序,就可以使用GUID了。
答案 1 :(得分:2)
您可能想要使用SID - 这是操作系统本身在大多数情况下使用的内容。 SID在域或工作组中也是唯一的。
单独使用用户名的问题是它可以更改,而SID是固定的。
答案 2 :(得分:-1)
如果您在Windows身份验证中使用ASP.NET MVC(或Webforms),为什么不使用从此属性获取的用户名:
HttpContext.Current.User.Identity.Name
这将返回用户的域/用户名。我曾致力于企业网络应用程序,用于审计目的。我很想知道你是否认为这对你的目的来说不够独特。
此外,我不确定您为什么要存储用户的SID或GUID,因为在查看审核日志时,与域/用户相比,它很难阅读。
答案 3 :(得分:-2)
samAccountName是用户登录时使用的用户名。您也可以通过预先添加域来获得更多“完整”,但没有理由不使用明显的用户名字段。