【Active Directory入門 Part8】触るな危険!? Active Directoryのスキーマ

この記事の内容

  • Active Directoryのスキーマとは何か、その基本概念を解説します
  • スキーマ管理ツールはデフォルトで無効化されており、有効化にはコマンド実行が必要です
  • スキーマはクラスと属性で構成され、オブジェクト指向の考え方と同じ構造を持ちます
  • カスタム属性を追加するデモを通じて、スキーマ拡張の危険性を実際に確認します
  • Exchange Serverのインストール時にスキーマ拡張が行われる仕組みについて説明します

Active Directoryのスキーマとは

Active Directory(AD)のスキーマとは、ADが扱うオブジェクトの「定義情報」のことです。データベースで言えばテーブルの構造定義に相当するもので、ユーザーやコンピューターといったオブジェクトがどのような属性を持てるかを規定しています。

スキーマはオブジェクト指向プログラミングの概念と非常に近い構造をしており、「クラス」と「属性」の2つの要素で構成されています。

  • クラス:オブジェクトの種類を定義するもの(例:ユーザー、コンピューター、グループ)
  • 属性:各クラスが持てるデータ項目(例:アカウント名、メールアドレス、有効期限)

たとえばAD上のユーザーオブジェクトは「Userクラス」に属しており、accountExpiressAMAccountNameといった数多くの属性を持っています。ADSIエディターでユーザーオブジェクトのプロパティを確認すると、これらの属性が一覧表示されます。スキーマ管理ツールで確認できる「Userクラスの属性一覧」と、ADSIエディターで見える属性一覧は対応しています。


スキーマ管理ツールの有効化

Active Directoryのスキーマ管理ツールは、意図しない操作による事故を防ぐため、デフォルトでは使用できない状態になっています。「Active Directory スキーマ」スナップインは、標準のツールメニューには表示されません。

スキーマ管理ツールを有効化するには、まず対象のDLLをシステムに登録する必要があります。以下のコマンドを実行してください。

regsvr32.exe schmmgmt.dll

コマンドの実行に成功すると「登録に成功しました」というダイアログが表示されます。

その後、MMC(Microsoft管理コンソール)を起動してスナップインを追加することで、スキーマ管理ツールを使用できるようになります。

123...W[indow]Ascti[v+eRDiremcmtcory]

スキーマ拡張のデモ:カスタム属性の作成

スキーマ管理ツールでは、新しいクラスや属性を自分で定義することができます。ここでは説明のため、「FavoriteYouTuber」というカスタム属性を作成し、Userクラスに追加するデモを行いました。

⚠️ 注意:以下の操作は実環境では絶対に行わないでください。スキーマの変更は一度行うと削除できず、環境に予期しない影響を与える可能性があります。

手順の概要は以下の通りです。

  1. スキーマ管理ツールで「属性」を右クリックし、新しい属性を作成する
  2. 属性の名前(例:favoriteYouTuber)、OID(オブジェクト識別子)、データ型(Unicode文字列など)を設定する
  3. 作成した属性をUserクラスのプロパティから「オプション属性」として追加する

デモでは実際に属性の追加に成功し、ADSIエディターからユーザーオブジェクトの属性として値を設定できることを確認しました。


スキーマ拡張の危険性

デモ中に、スキーマ変更後にオブジェクトの複製処理でエラーが発生しました。「ディレクトリオブジェクトが見つかりません」というエラーが出るなど、環境が不安定な状態になることを実際に確認できました。

スキーマ変更が危険な主な理由は以下の通りです。

  • 変更を元に戻せない:スキーマに追加したクラスや属性は削除できません
  • フォレスト全体に影響する:スキーマ変更はADフォレスト全体に複製されます
  • 予期しない動作を引き起こす可能性がある:他のシステムやアプリケーションに影響を与える場合があります

このような理由から、スキーマ管理ツールは意図的に無効化されており、十分な理解と計画なしに操作することは推奨されません。


実際にスキーマ拡張が行われるケース:Exchange Server

スキーマ拡張を実施しなければならない現実的なケースとして代表的なのが、Exchange Serverのインストールです。

Exchange Serverは、ユーザーオブジェクトにメールアドレスやプロキシアドレスなどのメール関連属性を追加する必要があります。そのため、Exchange Serverのセットアップ時には、事前にADスキーマを拡張する手順が組み込まれています。

具体的には、Exchange ServerのセットアップDVDから以下のコマンドを実行することで、スキーマの拡張が行われます。

Setup.exe /PrepareSchema

このコマンドを実行すると、先ほどのデモで手動で行ったような「属性の追加」「クラスへの属性割り当て」が、Microsoft社の定義に基づいて自動的に実施されます。

Exchange ServerがインストールされているAD環境とそうでない環境では、ユーザーオブジェクトの属性数が異なるのはこのためです。ADSIエディターでユーザーオブジェクトを確認すると、Exchange拡張済みの環境ではメール関連の属性が多数確認できます。


スキーマに関する考え方と現在のトレンド

Active Directoryのスキーマは、もともとの設計思想として「自由にカスタマイズしてAD対応アプリケーションを開発できるプラットフォーム」として提供されていました。

しかし実際には、カスタムスキーマ拡張によるアプリケーション開発はほとんど行われておらず、現在では「スキーマはむやみにいじらないもの」というのが業界の共通認識になっています。

現在の観点では、新規にActive Directory対応アプリケーションを独自開発することはあまり推奨されません。スキーマはバックグラウンドの知識として理解しておくにとどめ、実際の操作は避けるのが賢明です。


まとめ

  • Active Directoryのスキーマとは、ADオブジェクトのクラス属性を定義した構造情報です
  • スキーマ管理ツールはデフォルトで無効化されており、有効化には regsvr32.exe schmmgmt.dll の実行が必要です
  • スキーマの変更は元に戻せないうえ、フォレスト全体に影響するため非常に危険な操作です
  • 実際にスキーマ拡張が行われる代表例はExchange Serverのインストールで、/PrepareSchema コマンドにより自動実行されます
  • スキーマの仕組みはバックグラウンドの知識として理解しておくことが重要ですが、自分で変更操作を行うことは基本的に避けてください