Q

Active Directoryの運用中に,誤ってユーザーを削除してしまいました。保存しておいた削除前のバックアップ・データからActive Directoryデータベースの復元を試みましたが,そのユーザーは自動的に削除されてしまい,復元することができません。復元には何か特別な方法が必要なのでしょうか?

A

Active Directoryを構成するドメイン・コントローラは,それらの間で定期的にユーザーなどのオブジェクト情報を複製し合っています。複製で競合が発生した場合には,これらの情報がもつグローバル一意スタンプから優先させるものを判断しています。

バージョン番号 :1から始まりオリジナルが更新されるたびに1ずつ増加する
タイム・スタンプ:更新が開始された日付
サーバーGUID  :オリジナル更新が実行されたドメイン・コントローラを識別するためのID
表1●オブジェクトの整合性確認に使うグローバル一意スタンプ

 グローバル一意スタンプとして保存している項目には,表1に示した(1)バージョン番号,(2)タイム・スタンプ,(3)サーバーGUID,の3つがあります。これらの情報が複製の際にいっしょに伝達され,複製先に異なるオブジェクト情報があった場合は順番に比較していきます。この中ではバージョン番号が最も優先順位が高く,次にタイム・スタンプ,最後にサーバーGUIDという順に比較し,どちらの情報を優先するかを判断します。

削除された情報で上書きされる
 今回のようにユーザーを削除した場合,Active Directoryではそのユーザーに関する情報がすぐに消去されるわけではありません。削除されたという情報を追加した新しい情報として他のドメイン・コントローラに複製します。このため,バックアップから以前のユーザー情報をリストアしても,復元した情報より削除したという情報の方が新しいバージョン番号なため,再び削除されてしまうのです。

 このような場合に目的のオブジェクトを部分復元するAuthoritativeリストアと呼ぶ方法をActive Directoryでは用意しています。具体的には,Ntdsutil.exeというユーティリティを使います(図1)。


△ 図をクリックすると拡大されます
図1●削除したActive Directoryのオブジェクトを復活させる場合には,バックアップから復元後すぐにAuthoritativeリストアを実行する

 まず,復元対象のドメイン・コントローラを起動しながらF8キーを押し,[ディレクトリサービス復元モード]で起動します。続いて,Active Directoryデータベースを通常の方法と同様にリストアします。リブートが要求された場合にはキャンセルし,コマンド・プロンプトからNtdsutil.exeを起動してから「authoritative restore」と入力します。

 authoritative restoreプロンプトで「restore subtree <オブジェクトの識別名>」と入力します。オブジェクトの識別名は復元したいオブジェクトのパスです。例えば,test.comのOU1が復元対象の場合は,「restore subtree OU=OU1,DC=test,DC=com」のように入力します。入力が終わったら,Ntdsutilユーティリティを終了し,ドメイン・コントローラを再起動します。

バージョン番号を強制的に増加
 Ntdsutil.exeでは,対象のオブジェクトがもつバージョン番号を,バックアップ時点から復元までの日数で1日当たり10万ずつ強制的に増加させます。つまり,復元したオブジェクトがバックアップ以降,毎日10万回ずつ変更した扱いになります。このため,復元されたオブジェクトは他のドメイン・コントローラに複製されたオブジェクトよりも優先され,他に上書きされることがなくなります。

 なお,AuthoritativeリストアではNtdsutil.exeで復元対象のオブジェクトを細かく指定できるため,目的のオブジェクト以外は,通常通りの復元を実施することができます。もし,ディレクトリ全体をAuthoritativeリストアする場合は,authoritative restoreプロンプトで「restore database」を実行します。

 Authoritativeリストアによる部分復元(restore subtree),完全復元(restore database)は十分注意して実行する必要があります。不用意に実施するとActive Directory全体に影響を与える可能性があります。

60日を経過したDCは使わない
 Active Directoryデータベースのオブジェクトを削除した場合,「Tombstone」(削除標識,破棄状態の意味)と呼ぶマークを付けてオブジェクトを無効にすると同時に,削除されるまでの期間を「Tombstone Lifetime」として設定しています。このTombstone Lifetimeは標準設定では60日となっています。

 先月号のトラブル解決Q&Aで書いてあるように,各ドメイン・コントローラでは12時間ごとにガベージ・コレクションと呼ばれる,最適化プロセスを実行してTombstoneマークが付いていてTombstone Lifetimeを経過したオブジェクトを削除します。このため,60日以上経過したバックアップからActive Directoryデータベースをリストアすると,他のドメイン・コントローラで既に完全に削除されたオブジェクトが復活してしまいます。

 そうすると,Active Directoryデータベースに矛盾が生じて,既に存在しないオブジェクトが表示されてしまったり,孤立オブジェクトとして存在してしまうといった現象が発生します。このような現象を回避するためにも,60日以上を経過したバックアップからはリストアしないようにする必要があります。また,60日以上停止していたドメイン・コントローラも同様にオンラインにしないようにします。このような事態になってしまった場合の対処方法についてはマイクロソフトのサポート技術情報に記載されています(文書番号,JP314282)。

瀧澤 俊臣