LDAP Error: The user has insufficient access rights. : LdapErr: DSID-0C09099D, comment: Error processing control,
LDAP Error: The user has insufficient access rights. : LdapErr: DSID-0C09099D, comment: Error processing control,
我想使用 C# 从 Active Directory 获取增量更改,为此我正在尝试构建一个解决方案,如下文中所述(使用 DirSync 控件)。
https://docs.microsoft.com/en-us/windows/win32/ad/polling-for-changes-using-the-dirsync-control
但是,我面临以下问题:
- 使用以下代码时,出现异常
The user has insufficient access rights
。该用户属于管理员组。
还需要授予该帐户什么权限?又如何?
LdapConnection connection = new LdapConnection("adfs.fed.zzz.com");
connection.SessionOptions.ProtocolVersion = 3;
connection.Credential = new System.Net.NetworkCredential("adfsfed\username", "password");
connection.AuthType = AuthType.Basic;
connection.Bind();
var filter = "(&(objectClass=*))";
var searchRequest = new SearchRequest("", filter, SearchScope.Subtree, properties);
DirSyncRequestControl dirSyncRC = new DirSyncRequestControl(null, DirectorySynchronizationOptions.None);
searchRequest.Controls.Add(dirSyncRC);
var response = connection.SendRequest(searchRequest) as SearchResponse;
- 如果我使用下面的代码,那么我不会收到任何异常,但会在 cookie 中得到空结果。
String[] properties = { "objectGUID", "sAMAccountName", "displayName", "mail", "member" };
String filter = "(|(objectClass=group)(objectClass=user))";
DirectorySearcher directorySearcher = new DirectorySearcher(myLdapConnection, filter, properties);
var dSynch = new DirectorySynchronization(System.DirectoryServices.DirectorySynchronizationOptions.None);
directorySearcher.DirectorySynchronization = dSynch;
directorySearcher.SearchScope = System.DirectoryServices.SearchScope.Subtree;
var results = directorySearcher.FindAll();
var cookie = dSynch.GetDirectorySynchronizationCookie();
注意事项:
- 我只有一个域控制器
- 我是系统管理员。因此,我可以为用户分配适当的权限。
请帮忙。
• 您的用户 ID 需要“复制目录更改”权限,并且应该是“域管理员”组的成员才能使用 DirSync LDAP 控制扩展。但请注意,无论标准权限如何,它几乎都可以读取目录分区中的任何内容。虽然他们不能改变什么。
但是 - 您的目录中可能有一些敏感属性。请参考下面link中的powershell脚本,并在使用C#赋予适当权限后使用用户ID执行。它是一个目录同步代码,甚至可以检索诸如“userAccountControl、userparameters、msexchuseraccountcontrol、pwdlastset、unicodePwd(空白,因此未返回散列域密码)、lockouttime、accountexpires、unixuserpassword(返回其散列)等属性。
http://dloder.blogspot.com/2012/01/powershell-dirsync-sample.html
根据@KartikBhiwapurkar-MT 的回复,我找出了这个错误。
- 错误
The user has insufficient access rights
完全误导(用户已经复制目录更改权限并且是域管理员组)。 System.DirectoryServices.Protocols
中发生的错误是我将 ""
作为第一个参数 (distinguishedName)
new SearchRequest("", filter, SearchScope.Subtree, properties);
但它应该被传递为
new SearchRequest("DC=adfs,DC=fed,DC=zzz,DC=com", filter, SearchScope.Subtree, properties);
- 由于最新的 nuget 包 (6.0.0) 中存在错误,我在
System.DirectoryServices
中得到了空 cookie。在撰写此答案时,该错误仍未解决。
我想使用 C# 从 Active Directory 获取增量更改,为此我正在尝试构建一个解决方案,如下文中所述(使用 DirSync 控件)。
https://docs.microsoft.com/en-us/windows/win32/ad/polling-for-changes-using-the-dirsync-control
但是,我面临以下问题:
- 使用以下代码时,出现异常
The user has insufficient access rights
。该用户属于管理员组。
还需要授予该帐户什么权限?又如何?
LdapConnection connection = new LdapConnection("adfs.fed.zzz.com");
connection.SessionOptions.ProtocolVersion = 3;
connection.Credential = new System.Net.NetworkCredential("adfsfed\username", "password");
connection.AuthType = AuthType.Basic;
connection.Bind();
var filter = "(&(objectClass=*))";
var searchRequest = new SearchRequest("", filter, SearchScope.Subtree, properties);
DirSyncRequestControl dirSyncRC = new DirSyncRequestControl(null, DirectorySynchronizationOptions.None);
searchRequest.Controls.Add(dirSyncRC);
var response = connection.SendRequest(searchRequest) as SearchResponse;
- 如果我使用下面的代码,那么我不会收到任何异常,但会在 cookie 中得到空结果。
String[] properties = { "objectGUID", "sAMAccountName", "displayName", "mail", "member" };
String filter = "(|(objectClass=group)(objectClass=user))";
DirectorySearcher directorySearcher = new DirectorySearcher(myLdapConnection, filter, properties);
var dSynch = new DirectorySynchronization(System.DirectoryServices.DirectorySynchronizationOptions.None);
directorySearcher.DirectorySynchronization = dSynch;
directorySearcher.SearchScope = System.DirectoryServices.SearchScope.Subtree;
var results = directorySearcher.FindAll();
var cookie = dSynch.GetDirectorySynchronizationCookie();
注意事项:
- 我只有一个域控制器
- 我是系统管理员。因此,我可以为用户分配适当的权限。
请帮忙。
• 您的用户 ID 需要“复制目录更改”权限,并且应该是“域管理员”组的成员才能使用 DirSync LDAP 控制扩展。但请注意,无论标准权限如何,它几乎都可以读取目录分区中的任何内容。虽然他们不能改变什么。
但是 - 您的目录中可能有一些敏感属性。请参考下面link中的powershell脚本,并在使用C#赋予适当权限后使用用户ID执行。它是一个目录同步代码,甚至可以检索诸如“userAccountControl、userparameters、msexchuseraccountcontrol、pwdlastset、unicodePwd(空白,因此未返回散列域密码)、lockouttime、accountexpires、unixuserpassword(返回其散列)等属性。
http://dloder.blogspot.com/2012/01/powershell-dirsync-sample.html
根据@KartikBhiwapurkar-MT 的回复,我找出了这个错误。
- 错误
The user has insufficient access rights
完全误导(用户已经复制目录更改权限并且是域管理员组)。System.DirectoryServices.Protocols
中发生的错误是我将""
作为第一个参数 (distinguishedName)
new SearchRequest("", filter, SearchScope.Subtree, properties);
但它应该被传递为
new SearchRequest("DC=adfs,DC=fed,DC=zzz,DC=com", filter, SearchScope.Subtree, properties);
- 由于最新的 nuget 包 (6.0.0) 中存在错误,我在
System.DirectoryServices
中得到了空 cookie。在撰写此答案时,该错误仍未解决。