我正在为我的WPF应用程序编写权限系统,该系统需要同时使用Active Directory和本地计算机帐户;系统可能连接也可能不连接到网络。
用户可以使用AD登录或本地计算机登录来登录应用程序。应用程序将数据存储在SQL Server Express数据库中,每行都有一个“所有者”。
应用程序将仅显示登录用户“拥有”的行。
每this question,要存储以识别用户的推荐数据是LDAP objectGUID
,我可以使用下面的代码检索它并存储在uniqueidentifier列中。
using System.DirectoryServices.AccountManangement;
using System.Security.Principal;
public class ActiveDirectoryHelper
{
public static Guid? GetObjectGuidFromIdentity(WindowsIdentity identity)
{
string domainName = identity.Name.Split('\\')[0];
PrincipalContext pc = null;
if (domainName == Environment.MachineName)
{
pc = new PrincipalContext(ContextType.Machine);
}
else
{
pc = new PrincipalContext(ContextType.Domain, domainName);
}
UserPrincipal user = UserPrincipal.FindByIdentity(pc, IdentityType.SamAccountName, identity.Name);
return user.Guid;
}
}
但是,UserPrincipal.Guid
的{{1}}为空。
我可以存储一条可以引用AD帐户或本地帐户的信息吗?
或者我是否需要添加另一列来指定目录类型(AD / SAM)并使用另一列来存储不同的标识符(SID)?
答案 0 :(得分:0)
正如您所发现的,本地帐户没有GUID。相反,他们只有一个SID。
您可以选择使用SID来识别用户,这样您就只有一个标识符。 GUID的结果是,在客户重构其Active Directory林的情况下,用户的GUID将保持静态,而SID将改变。