欢迎各位兄弟 发布技术文章
这里的技术是共享的
以下是一个使用PHP LDAP扩展将计算机XX-11111111从OU=BBB,OU=Computer,DC=AAA,DC=com,DC=cn移动到OU=CCC,OU=BBB,OU=Computer,DC=AAA,DC=com,DC=cn的代码示例:
php<?php // LDAP服务器连接信息 $ldapHost = "ldap://your.ldap.server"; // 替换为实际的LDAP服务器地址 $ldapPort = 389; $adminDN = "cn=admin,dc=AAA,dc=com,dc=cn"; // 替换为有足够权限的管理员DN $adminPassword = "your_password"; // 替换为管理员密码 // 源和目标DN $computerCN = "XX-11111111"; $currentDN = "CN=$computerCN,OU=BBB,OU=Computer,DC=AAA,DC=com,DC=cn"; $newParentDN = "OU=CCC,OU=BBB,OU=Computer,DC=AAA,DC=com,DC=cn"; $newRDN = "CN=$computerCN"; // 连接到LDAP服务器 $ldapConn = ldap_connect($ldapHost, $ldapPort) or die("无法连接到LDAP服务器"); ldap_set_option($ldapConn, LDAP_OPT_PROTOCOL_VERSION, 3); ldap_set_option($ldapConn, LDAP_OPT_REFERRALS, 0); // 绑定管理员账号 if (!ldap_bind($ldapConn, $adminDN, $adminPassword)) { die("LDAP绑定失败: " . ldap_error($ldapConn)); } // 执行移动操作 if (!ldap_rename($ldapConn, $currentDN, $newRDN, $newParentDN, true)) { die("移动计算机失败: " . ldap_error($ldapConn)); } echo "计算机 $computerCN 已成功移动到 $newParentDN"; // 关闭连接 ldap_close($ldapConn); ?>
权限问题:确保用于绑定的管理员账号有足够的权限在源和目标OU中移动对象。
LDAP服务器地址:将$ldapHost替换为实际的LDAP服务器地址。
管理员凭据:替换$adminDN和$adminPassword为实际的管理员凭据。
错误处理:在实际应用中,建议添加更完善的错误处理和日志记录。
计算机对象:确保计算机对象(XX-11111111)存在且在指定的源OU中。
目标OU存在:确保目标OU(OU=CCC,OU=BBB,OU=Computer)已经存在。
如果需要验证移动操作是否成功,可以在操作后执行一个LDAP搜索查询来确认计算机的新位置。
newRDN 是如何命名的
在 LDAP 中,RDN(Relative Distinguished Name,相对专有名称) 是 DN(Distinguished Name,专有名称)的一部分,用于在某个父容器内唯一标识一个条目。
newRDN 的命名规则ldap_rename() 函数的 newRDN 参数指定了对象在其父容器(OU)内的新名称,格式通常为:
<属性名>=<新值>
对于计算机对象,通常使用 CN=计算机名 作为 RDN。
如果计算机名是 XX-11111111,则 newRDN 应为:
php$newRDN = "CN=XX-11111111";
这样,LDAP 会明确知道你要重命名的是 CN(Common Name)属性。
ldap_rename() 参数详解phpldap_rename( resource $ldap_conn, string $current_dn, // 当前完整DN(如 "CN=XX-11111111,OU=BBB,OU=Computer,DC=AAA,DC=com,DC=cn") string $new_rdn, // 新RDN(如 "CN=XX-11111111") string $new_parent, // 新父容器(如 "OU=CCC,OU=BBB,OU=Computer,DC=AAA,DC=com,DC=cn") bool $delete_old_rdn // 是否删除旧的RDN(通常设为 true) );
$new_rdn 必须包含 属性名 + 新值(如 CN=NewComputerName)。
如果 只修改 RDN(不改计算机名),仍然需要 CN=原计算机名。
如果 修改计算机名,则 newRDN 可以设为新名字,如 CN=XX-10000001。
php$newRDN = "CN=XX-11111111"; // RDN 保持不变 $newParentDN = "OU=CCC,OU=BBB,OU=Computer,DC=AAA,DC=com,DC=cn";
此时,计算机的 DN 会变成:
CN=XX-11111111,OU=CCC,OU=BBB,OU=Computer,DC=AAA,DC=com,DC=cn
php$newRDN = "CN=XX-NEW-12345"; // 修改 RDN(名字) $newParentDN = "OU=CCC,OU=BBB,OU=Computer,DC=AAA,DC=com,DC=cn";
此时,计算机的 DN 会变成:
CN=XX-NEW-12345,OU=CCC,OU=BBB,OU=Computer,DC=AAA,DC=com,DC=cn
newRDN 必须是 CN=计算机名(或其他标识属性)。
如果只移动不改名,newRDN 要和原 RDN 一致。
如果移动并改名,newRDN 设为新名字(但需确保新名字符合组织命名规则)。
LDAP 不会自动检测 CN 是否冲突,需确保新名字唯一。