欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

PHP LDAP 移动计算机到新OU ,,,,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 组 AG chatgpt 有大用 有大大用 有大大大用

PHP LDAP 移动计算机到新OU

以下是一个使用PHP LDAP扩展将计算机XX-11111111OU=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); ?>    


注意事项

  1. 权限问题:确保用于绑定的管理员账号有足够的权限在源和目标OU中移动对象。

  2. LDAP服务器地址:将$ldapHost替换为实际的LDAP服务器地址。

  3. 管理员凭据:替换$adminDN$adminPassword为实际的管理员凭据。

  4. 错误处理:在实际应用中,建议添加更完善的错误处理和日志记录。

  5. 计算机对象:确保计算机对象(XX-11111111)存在且在指定的源OU中。

  6. 目标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() 参数详解

php
ldap_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


实际应用场景

1. 只移动计算机,不改名

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

2. 移动并同时修改计算机名

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

总结

  1. newRDN 必须是 CN=计算机名(或其他标识属性)

  2. 如果只移动不改名,newRDN 要和原 RDN 一致

  3. 如果移动并改名,newRDN 设为新名字(但需确保新名字符合组织命名规则)。

  4. LDAP 不会自动检测 CN 是否冲突,需确保新名字唯一




普通分类: