我想在远程服务器上为域用户设置文件夹ACL,但始终会出现以下错误消息:
无法翻译部分或全部身份参考
我做错了什么?
这是我的代码:
string folderPath = @"\\remoteServer\testDirectory"
string accountName = "domainUser"
string domainName = "mydomain";
accountName = domainName + "\\" + accountName;
//What rights are we setting?
//set on dir itself
FileSystemAccessRule accessRule = new FileSystemAccessRule(accountName, FileSystemRights.FullControl, AccessControlType.Allow);
DirectoryInfo dInfo = new DirectoryInfo(folderPath);
DirectorySecurity dSecurity = dInfo.GetAccessControl();
//dInfo.SetAccessControl(dSecurity);
dSecurity.AddAccessRule(accessRule);`
如果我仅输入userName
而不是domainname\username
,则会设置权限,但使用"未知帐户"
有人可以帮忙......
提前致谢。
答案 0 :(得分:3)
我找到了解决这个问题的方法。 必须创建使用您要允许的用户的SID创建的SecurityIdentifier对象。 请参阅我的解决方案代码。
答案 1 :(得分:1)
改善HeonAle的答案:
.net中未定义GetPrincipalBySamAccountName()方法。
因此,我们需要一种获取具有SID的Principal的方法。
对于用户:
// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "UserName");
string sid = user.Sid.ToString();
对于组:
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, "GroupName");
string sid = group.Sid.ToString();
然后,其余部分相同:
SecurityIdentifier secIdentifierSid = new SecurityIdentifier ( sid );
FileSystemAccessRule AccessRule = new FileSystemAccessRule ( secIdentifierSid , FileSystemRights.FullControl, AccessControlType.Allow );
答案 2 :(得分:0)
通过布莱恩的链接:
// Get User from AD with System.DirectoryServices.AccountManagement;
UserPrincipal user = GetPrinicpalBySamAccountName ( "userSamAccount" );
string usersid = user.Sid.ToString ();
SecurityIdentifier secIdentifierSid = new SecurityIdentifier ( usersid );
FileSystemAccessRule AccessRule = new FileSystemAccessRule ( secIdentifierSid , FileSystemRights.FullControl, AccessControlType.Allow );
我将其更改为使用我们创建的SecurityIdentifier,而不是简单地发送SID。这似乎可行。