Q

Active Directory環境でWindows 2000を利用していますが,コンピュータなどの新規のオブジェクトをActive Directoryに作成すると,新規に作成したオブジェクトと既存のオブジェクトが削除されてしまいます。原因と対策を教えてください。

A

この現象は,バックアップからドメイン・コントローラを復元したときに発生する場合があります。原因は,バックアップから復元したドメイン・コントローラで作成したオブジェクトとその他のドメイン・コントローラで既に作成されたオブジェクトそれぞれのセキュリティ識別子(SID)が重複することです。

 SIDは重複してはならないため,新規にオブジェクトを作成した場合,同じSIDを割り当てられてしまったオブジェクトが両方とも自動的に削除されます。イベント・ログには重複したSIDに関するイベントが記録されます。

SIDが重複すると両方が削除される
 Active Directoryではユーザー,グループ,コンピュータというオブジェクトは,セキュリティ・プリンシパル・オブジェクトと呼ばれ,作成時にSIDという番号が他と重複しないように割り当てられます。SIDはシステムがオブジェクトを区別するために用いられます。通常,管理ツールなどには表示されませんが,SIDのおかげで,ユーザー名などを変えても,アクセス権を付け直すなどの操作が不要になっています。

 ドメイン環境のSIDは,ドメイン内で共通の部分(ドメインのSID)とオブジェクトごとに異なる部分で構成されています。オブジェクトごとに異なる部分がRID(相対識別子)です。

 NT 4.0までのドメインではプライマリ・ドメイン・コントローラという役割のマシンがドメイン内に1台だけあり,RIDの割り当てを一元管理することで重複を回避していました。

 Active Directoryドメインでは,複数のドメイン・コントローラでRIDの割り当てが可能になっています。各ドメイン・コントローラが重複したRIDをセキュリティ・プリンシパル・オブジェクトに割り当てないよう以下の仕組みが用意されています。

(1)ドメイン内には,RIDマスタという役割のドメイン・コントローラが1台設けられます。RIDマスタは,重複がないように選んだ一連のRID(RIDプール)をドメイン内の各ドメイン・コントローラに割り当てます(図1)。
(2)各ドメイン・コントローラは,セキュリティ・プリンシパル・オブジェクトを作成する際,SIDを「ドメインのSID+ドメイン・コントローラがプールしているRIDの1つ」で生成します(図2)。各ドメイン・コントローラはRIDプールが足りなくなるとRIDマスタに新しいRIDプールを要求します。


図1●Active DirectoryでのRID管理
RID(相対識別子)は重複がないようにRIDマスタが管理し,一連の番号をドメイン・コントローラへ割り当てる。

図2●SIDはドメインのSIDとRIDから作成される
Active Directoryでは新しいアカウントやオブジェクトはどのドメイン・コントローラからでも作成できる。

古いRIDプールの復元が原因
 しかし,障害などでドメイン・コントローラをバックアップから復元した場合にはこの仕組みが必ずしも機能しません。RIDマスタやその他ドメイン・コントローラを復元すると,本来は最新のRIDプールや所有権などを検証し,正しい状態で復元するはずです。ただし,Windows 2000 Service Pack 2より前のシステムでは,実際には複製のタイムラグなどにより,RIDが重複して割り当てられるのです。

 より詳細な説明は,以下のマイクロソフトのサポート技術情報「JP289154,ドメインコントローラ上のディレクトリサービスのバックアップと復元によってSIDが重複する」,「JP307725,RID FSMOドメインコントローラのバックアップと復元を行うとSIDが重複する」を参照してください。

重複したRIDを持つドメイン・
コントローラをドメインから切り離す

 この現象の対策は,重複したRIDを持つドメイン・コントローラをドメインから切り離し,ドメインに残った重複SIDを削除/再作成することです。

 まず,重複したRIDを持つドメイン・コントローラを,恒久的にドメインから切り離して,OSから再インストールしてください

 切り離そうとしているドメイン・コントローラが操作マスタ(FSMO)の役割を持つ場合,ドメインから切り離す前にFSMO役割を他のドメイン・コントローラに移します。Windows 2000に標準で含まれるntdsutil.exeというコマンド・ライン・ツールの[role]機能を使用します。詳細はマイクロソフトのサポート技術情報「JP255504,Ntdsutil.exe を使用してドメインコントローラにFSMOの役割を強制移動または転送する」を参照してください。

 緊急に対処する必要があり,正しく降格処理を行うことなくドメイン・コントローラをドメインから切り離した場合,切り離したドメイン・コントローラの構成データ(NTDS-DSAオブジェクト)がドメインから正しく削除されずに残ります。

 このままでは同じ名前のマシンを再度ドメインに参加させられません。そこで,残されたNTDS-DSAオブジェクトを手動にて削除してください。ntdsutil.exeの[metadata cleanup]を使用します。詳細はマイクロソフトのサポート技術情報「JP216498,ドメイン・コントローラの降格に失敗した後,Active Directoryのデータを削除する方法」を参照してください。

重複したSIDは手動で削除
 ドメイン・コントローラに残っている重複したSID情報は,ntdsutil.exeの[security account managemant]機能を使用し,重複したSID情報をログ・ファイルに取得してから削除します。オブジェクトの削除後は,必要に応じて再度オブジェクトを作成します(図3)。操作は以下の通りです。


△ 図をクリックすると拡大されます
図3●ntdsutil.exeというコマンド・ライン・ツールの機能

(1)コマンド・プロンプトより「ntdsutil」を実行します。
(2)「security account managemant」と入力します。
(3)「connect to server <server_name>」を実行します。
(4)「check duplicate sid」を実行します。システム・ドライブ(\WINNT\System32)下に「dupsid.log」というファイルが作成されます。
(5)dupsid.logを開きます。ログに何も記録されていなければ重複したSIDオブジェクトはありません。
(6)dupsid.logに重複したSIDオブジェクトが記録されている場合は[security account managemant]の[cleanup duplicate sid]実行により重複を解消します。

新規オブジェクトが削除不能の場合
 新規オブジェクトと同一のSIDを持つオブジェクトが削除済みである場合,上記手順で重複したSIDを持つ新規オブジェクトを削除しようとしても失敗することがあります。

 この場合,Windows 2000 Support Toolsの「ADSI Edit」(Windows 2000 Serverのセットアップ用CD-ROMの\SUPPORT\TOOLSフォルダにあります)を使用して以下のように削除します。


△ 図をクリックすると拡大されます
図4●ADSI Editでコンテナを作成する操作

(1)Active Directoryに適当なコンテナを作成します(図4)。
(2)そのコンテナに削除できないオブジェクトを移動します。
(3)コンテナごとオブジェクトを削除します。

 詳細はマイクロソフトのサポート技術情報「J066293,消去できないオブジェクトが発生した場合の対処策」を参照してください。

ドメイン・コントローラが壊れたら
基本的には再インストールすべき

 このようにいったん,この現象が起きると対策は厄介です。ドメイン・コントローラが壊れた場合,基本的にはインストールし直した方がいいでしょう。再インストールしたサーバーをドメイン・コントローラに昇格すればActive Directoryの複製機能で新しいドメイン・コントローラに正しい情報が自動的にコピーされます。

山川秀明