复杂域环境下通过.Net操作Active Directory经验点滴
2007-07-21 14:04
302 查看
1、操作ACL
操作ACL需要使用ActiveDs这个Com组件。
在上篇文章的回复中Rock提到“很多ActiveDs.dll提供的功能是.net的AD访问组件不提供的”。ACL的操作就是这样。
但是我在操作ACL的时候发现在2003上很正常的程序在2000下不能通过,报出“Security ID Structure is invalid”,中文是“安全 ID 结构无效”。
在KB上找到一篇文章:http://support.microsoft.com/default.aspx?scid=kb;en-us;316329
原来是操作系统在绑定SID的时候有问题。KB中提供了两个解决方法:
A) 人工操作ACL(晕倒,要是人工操作我还写代码干什么,B4)
B) 通过监视网络确认是否连接到的DC无法响应。因为我操作的实际环境是一个很复杂的域环境,这种情况不可避免。
没办法,我只好老老实实地把程序部署到2003的环境下了。
2、LDAP
大家都知道,一般我们用DirectoryEntry这个类来操作AD对象。
DirectoryEntry类的构造函数通过指定Path就可以绑定到DC。例如,我们常用的LDAP:LDAP://CN=onecity,OU=corp,DC=fabrikam,DC=com
一般来说,没有什么问题。但是有时候会报错说无法连接到域。
原因和上面所说的情况类似。这里我详细解释一下:
在添加域控制器的时候,DC会把本机所有的有效IP地址都注册到DNS中。在使用nslookup fabrikam.com时,会发现针对这个域(fabrikam.com),有很多对应的IP地址。但是DC服务器可能有多块网卡,有的网卡并没有使用(甚至没有插网线),这个没有使用的网卡会产生168.x.x.x的地址,并且此地址同样会被注册到DNS中。在绑定域控制器时,系统会从域对应的IP中挑选一个去绑定,当然这个无效的地址也会被挑中。
因此,在设定Path时,最好指定DC服务器,例如, LDAP://MYDC01/CN=onecity,OU=corp,DC=fabrikam,DC=com
该方式还有一个好处是在分布式的域环境下(例如,北京/上海/广州),应用程序可以挑选最近的域控制器。
指定DC服务器还需要注意通过尝试多个DC服务器进行容错。例如:如果MYDC01连接失败,自动尝试下一台DC服务器(LDAP://MYDC02/CN=onecity,OU=corp,DC=fabrikam,DC=com)。这个通过程序做到并不困难,就不在这里多说了。
在简单的域环境下(1-2台DC)操作AD很简单,但是复杂域环境下会出现很多意想不到的问题,此经验供大家参考。
操作ACL需要使用ActiveDs这个Com组件。
在上篇文章的回复中Rock提到“很多ActiveDs.dll提供的功能是.net的AD访问组件不提供的”。ACL的操作就是这样。
但是我在操作ACL的时候发现在2003上很正常的程序在2000下不能通过,报出“Security ID Structure is invalid”,中文是“安全 ID 结构无效”。
在KB上找到一篇文章:http://support.microsoft.com/default.aspx?scid=kb;en-us;316329
原来是操作系统在绑定SID的时候有问题。KB中提供了两个解决方法:
A) 人工操作ACL(晕倒,要是人工操作我还写代码干什么,B4)
B) 通过监视网络确认是否连接到的DC无法响应。因为我操作的实际环境是一个很复杂的域环境,这种情况不可避免。
没办法,我只好老老实实地把程序部署到2003的环境下了。
2、LDAP
大家都知道,一般我们用DirectoryEntry这个类来操作AD对象。
DirectoryEntry类的构造函数通过指定Path就可以绑定到DC。例如,我们常用的LDAP:LDAP://CN=onecity,OU=corp,DC=fabrikam,DC=com
一般来说,没有什么问题。但是有时候会报错说无法连接到域。
原因和上面所说的情况类似。这里我详细解释一下:
在添加域控制器的时候,DC会把本机所有的有效IP地址都注册到DNS中。在使用nslookup fabrikam.com时,会发现针对这个域(fabrikam.com),有很多对应的IP地址。但是DC服务器可能有多块网卡,有的网卡并没有使用(甚至没有插网线),这个没有使用的网卡会产生168.x.x.x的地址,并且此地址同样会被注册到DNS中。在绑定域控制器时,系统会从域对应的IP中挑选一个去绑定,当然这个无效的地址也会被挑中。
因此,在设定Path时,最好指定DC服务器,例如, LDAP://MYDC01/CN=onecity,OU=corp,DC=fabrikam,DC=com
该方式还有一个好处是在分布式的域环境下(例如,北京/上海/广州),应用程序可以挑选最近的域控制器。
指定DC服务器还需要注意通过尝试多个DC服务器进行容错。例如:如果MYDC01连接失败,自动尝试下一台DC服务器(LDAP://MYDC02/CN=onecity,OU=corp,DC=fabrikam,DC=com)。这个通过程序做到并不困难,就不在这里多说了。
在简单的域环境下(1-2台DC)操作AD很简单,但是复杂域环境下会出现很多意想不到的问题,此经验供大家参考。
相关文章推荐
- 复杂域环境下通过.Net操作Active Directory经验点滴
- 复杂域环境下通过.Net操作Active Directory经验点滴
- 复杂域环境下通过.Net操作Active Directory经验点滴
- .net 使用带参数的SQL语句操作ACCESS 经验点滴
- .NET环境下,通过LINQ操作SQLite数据库
- DevExpress ASP.NET 使用经验谈(5)-通过ASPxGridView实现CRUD操作
- AS/400开发经验点滴(一)询问类消息/BLOCK关键词/捕捉与文件操作有关的系统消息
- 做技术注意,操作一个步骤,永远不要相信以前的经验,因为你面临的环境可能已经发生变化,但是没有人告诉你.
- .net 环境下操作oracle数据库
- Flex与.NET互操作(七):了解FluorineFx的环境配置(远程对象、网关、通道、目的地)
- Flex与.NET互操作(七):了解FluorineFx的环境配置(远程对象、网关、通道、目的地)
- .NET通过PowerShell操作ExChange为用户开通邮箱账号
- Flex与.NET互操作 了解FluorineFx的环境配置(远程对象、网关、通道、目的地)
- 通过自己的项目实际经验,阐述为什么“恶心玩技术”?玩.NET的B/S的教训(四)
- SilverLight学习笔记--Silverligh之在Javascript中调用.NET(包括简单参数和复杂参数的操作)
- 做技术注意,操作一个步骤,永远不要相信以前的经验,因为你面临的环境可能已经发生变化,但是没有人告诉你.
- 通过FetionVM实现无.net框架环境下运行.NET程序
- 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作
- sql2005通过CLR程序集调用.NET环境的dll (深入了解)
- .Net 环境下C# 通过托管C++调用本地C++ Dll文件