コンピューティングにおいて、ディレクトリサービスまたはネームサービスは、ネットワークリソースの名前をそれぞれのネットワークアドレスにマッピングします。これは、ボリューム、フォルダ、ファイル、プリンタ、ユーザー、グループ、デバイス、電話番号、その他のオブジェクトを含む、日常的なアイテムやネットワークリソースの検索、管理、運用、整理を行うための共有情報インフラストラクチャです。ディレクトリサービスは、ネットワークオペレーティングシステムの重要な構成要素です。ディレクトリサーバまたはネームサーバは、このようなサービスを提供するサーバです。ネットワーク上の各リソースは、ディレクトリサーバによってオブジェクトとして扱われます。特定のリソースに関する情報は、そのリソースまたはオブジェクトに関連付けられた属性の集合として格納されます。
ディレクトリサービスは、ネットワークの名前空間を定義します。名前空間は、各オブジェクトに名前(一意の識別子)を割り当てるために使用されます。ディレクトリには通常、ネットワークリソースの命名と識別方法を決定する一連のルールがあり、識別子が一意かつ曖昧でないことが求められるのが一般的です。ディレクトリサービスを使用する場合、ユーザーはネットワークリソースの物理アドレスを覚えておく必要はありません。名前を指定するだけでリソースを特定できます。一部のディレクトリサービスにはアクセス制御機能があり、ディレクトリ情報へのアクセスを許可されたユーザーのみに制限できます。
ディレクトリサービスとリレーショナルデータベースにはいくつかの違いがあります。パフォーマンス向上に役立つ場合は、データを冗長化することができます(たとえば、キーを介して別のテーブルの内容に関連付けるのではなく、テーブルの行全体で値を繰り返すことで、この手法は非正規化と呼ばれます。別の手法としては、実際のスループットを向上させるためにレプリカを利用することが挙げられます)。[ 1 ]
ディレクトリスキーマは、オブジェクトクラス、属性、名前バインディング、知識(名前空間)で構成され、オブジェクトクラスには以下のものが含まれます。
属性は、複数の値を持つ場合があり、1つのレベルで複数の命名属性を指定できます(例えば、マシンタイプとシリアル番号の連結、または「勤務先電話番号」に複数の電話番号を指定するなど)。属性とオブジェクトクラスは通常、業界全体で標準化されています。例えば、X.500属性とクラスは、オブジェクトIDのためにIANAに正式に登録されることがよくあります。そのため、ディレクトリアプリケーションは、既存のディレクトリサーバーソフトウェアの利点を最大限に活かすために、標準クラスと属性を再利用しようとします。
オブジェクトインスタンスは名前空間に配置されます。各オブジェクトクラスは親オブジェクトクラス(そして最終的には階層のルート)から継承し、必須属性と任意属性のリストに属性を追加します。ディレクトリサービスは、 ITシステムのセキュリティ設計において中心的な役割を果たすことが多く、それに伴いアクセス制御の粒度も非常に細かくなります。
ディレクトリサービスの設計と管理において、レプリケーションと分散はそれぞれ異なる意味を持ちます。レプリケーションとは、冗長性とスループット向上のために、同じディレクトリ名前空間(同じオブジェクト)を別のディレクトリサーバーにコピーすることを意味します。複製された名前空間は、同じ権限によって管理されます。一方、分散とは、異なる名前空間にある複数のディレクトリサーバーが相互接続され、分散ディレクトリサービスを形成することを意味します。各名前空間は、異なる権限によって管理される可能性があります。
ディレクトリサービスは、共通ネットワーク標準とマルチベンダー相互運用性を実現するためのオープンシステム相互接続(OSI)イニシアチブの一環でした。1980年代には、 ITUとISOがディレクトリサービス用のX.500規格セットを作成しました。当初は、通信事業者間の電子メッセージングとネットワーク名検索の要件をサポートするためでした。軽量ディレクトリアクセスプロトコル(LDAP)は、X.500ディレクトリ情報サービスに基づいており、TCP/IPスタックとインターネット上のX.500ディレクトリアクセスプロトコル(DAP)文字列エンコーディング方式を使用しています。
X.500以前に開発されたシステムには以下のようなものがある。
LDAP/X.500ベースの実装には以下が含まれます。
ディレクトリサービスを作成するためのオープンソースツールには、OpenLDAP、Kerberosプロトコル、およびKerberosとLDAPバックエンドを備えたWindowsドメインコントローラーとして機能するSambaソフトウェアなどがあります。管理はGOsaまたはSamba SWATで行います。
Unixシステムにおけるネームサービスは通常nsswitch.confで設定されます。ネームサービスの情報はgetentコマンドで取得できます。