LDAP の変更操作
Active Directory object の属性変更は、LDAP modify operation として表現できます。ldapmodify は LDIF(LDAP Data Interchange Format)で add、delete、replace を明示できるため、SPN や委任属性のような multi-valued attribute を扱うときに変更内容を記録しやすいです。
LDAP 変更操作の種類
Section titled “LDAP 変更操作の種類”| 操作 | 意味 | 注意点 |
|---|---|---|
add | 属性値を追加する。 | multi-valued attribute では既存値を維持したまま追加できる。 |
delete | 属性値を削除する。 | 値を指定するとその値だけ削除。属性名だけだと属性全体削除になる。 |
replace | 属性値を置き換える。 | multi-valued attribute では指定値以外を消すため、既存値の控えが必須。 |
servicePrincipalName のような multi-valued attribute では、必要な値だけを delete / add する方が安全です。replace は全体置換になるため、既存 SPN を壊しやすくなります。
SPN 移動の LDIF 例
Section titled “SPN 移動の LDIF 例”次は HTTP/web01.example.local を WEB01$ から DC01$ へ移す例です。実環境では DN と SPN を必ず現在値から確認します。
dn: CN=WEB01,OU=Servers,DC=example,DC=localchangetype: modifydelete: servicePrincipalNameservicePrincipalName: HTTP/web01.example.local-
dn: CN=DC01,OU=Domain Controllers,DC=example,DC=localchangetype: modifyadd: servicePrincipalNameservicePrincipalName: HTTP/web01.example.local-復元用 LDIF は逆向きに作ります。
dn: CN=DC01,OU=Domain Controllers,DC=example,DC=localchangetype: modifydelete: servicePrincipalNameservicePrincipalName: HTTP/web01.example.local-
dn: CN=WEB01,OU=Servers,DC=example,DC=localchangetype: modifyadd: servicePrincipalNameservicePrincipalName: HTTP/web01.example.local-ldapmodify を使う理由
Section titled “ldapmodify を使う理由”deleteとaddを明示でき、何を変更したかが LDIF として残る。- multi-valued attribute の必要な値だけを操作できる。
- 実行前レビューと復元用 LDIF の作成がしやすい。
- GUI や独自 tool より、変更単位が LDAP operation として見えやすい。
一方で、AD 固有の validation や安全策を補助してくれるとは限りません。SPN なら setspn -Q / setspn -X で重複確認し、通常運用では setspn -S のような専用 tool も検討します。
実行前チェック
Section titled “実行前チェック”- 対象 object の DN が正しいか。
- 対象 attribute の現在値を控えたか。
- multi-valued attribute に対して
replaceを使っていないか。 - SPN 重複や delegation 影響を確認したか。
- LDAPS、LDAP signing、認証方式など、環境のセキュリティ要件を満たしているか。
- DC replication の遅延を考慮しているか。
- rollback 用 LDIF を作成したか。
よくあるエラー
Section titled “よくあるエラー”| エラー | 主な意味 |
|---|---|
Insufficient access rights | 対象 object または attribute への write 権限がない。 |
No such attribute | 削除しようとした値または属性が存在しない。 |
Type or value exists | 追加しようとした値が既に存在する。 |
Constraint violation | AD 側の制約、重複、形式不正などに抵触している。 |
Strong(er) authentication required | signing/LDAPS など、より強い認証保護が要求されている。 |

