使用PyAD为AD用户添加组成员身份时遇报错求助
解决PyAD添加AD用户到组时的"Server is unwilling to process the request"错误
这个错误其实是Active Directory的经典坑——你想直接修改的memberOf属性是AD构造属性,它是AD自动维护的衍生属性,根本不允许手动修改!
问题根源
当你把用户加入一个组时,AD会自动做两件事:
- 更新组对象的
member属性,把用户的DN加进去 - 自动同步更新用户对象的
memberOf属性,显示用户所属的组
反过来,你不能直接通过用户对象去修改memberOf,AD服务器会直接拒绝这个请求,这就是你看到的报错原因。而你之前的update_attribute('mail')能成功,是因为mail是用户对象的可写属性,和memberOf完全不一样。
正确的实现方式
你应该找到目标组对象,然后把用户添加到组的member属性里,PyAD也提供了更便捷的方法:
from pyad import * pyad.set_defaults(ldap_server="someSchool.local", username="someAdmin", password='somePassword') # 获取用户对象 user = pyad.aduser.ADUser.from_cn('Student999') # 获取目标组对象 target_group = pyad.adgroup.ADGroup.from_dn('CN=Active,OU=Groups,OU=Students,DC=someSchool,DC=local') # 方法1:用PyAD封装好的add_member方法(推荐) target_group.add_member(user) # 方法2:手动修改组的member属性 # target_group.append_to_attribute('member', user.dn)
额外检查点
如果还是报错,可以确认下:
- 你使用的管理员账号有没有修改目标组成员的权限(不过你能修改用户邮箱,大概率权限没问题)
- 目标组的DN有没有写错(比如大小写、OU路径是否正确,AD的DN是大小写不敏感但路径不能错)
内容的提问来源于stack exchange,提问作者user2919480
相关产品推荐
相关产品推荐

