次の方法で共有


Active Directory ドメイン サービスでの各種の上限とスケーラビリティ

この記事では、Active Directory 環境の特定の側面に関して、スケーラビリティに影響する可能性がある各種の上限について説明します。 Active Directory の展開を計画する際には、これらの制限に留意することをお勧めします。

オブジェクトの最大数

Active Directory フォレスト内の各ドメイン コントローラーは、有効期間中に約 21 億 5000 万個のオブジェクトを作成できます。

各 Active Directory ドメイン コントローラーには、ドメイン コントローラーごとに固有の一意の識別子があります。 これらの識別子は、識別名タグ (DNT) と呼ばれる一意の値で、レプリケートされたり他のドメイン コントローラーに表示されることはありません。 DNT の値の範囲は 0 から 2,147,483,393 (2 の 31 乗から 255 を引いた値) です。 あるオブジェクトを削除した場合も、後で作成した新しいオブジェクトに同じ DNT を使用することはできません。 このためドメイン コントローラーでのオブジェクトの作成は、このドメイン コントローラーでレプリケートするオブジェクトも含め、20 億個未満に制限されます。 この制限は、ドメイン ネットワーク コンピューター (NC)、構成、スキーマ、アプリケーション ディレクトリ パーティションを含む、ドメイン コントローラーでホストされているすべてのパーティションのすべてのオブジェクトの集計に適用されます。

ドメイン コントローラーの有効期間における作成制限を回避する方法はいくつかあります。 たとえば、オブジェクトを完全に削除することで、ドメインからオブジェクトを削除できます。 また、新しいドメイン コントローラーをインストールして、残っているオブジェクトを対象のドメイン コントローラーからレプリケートするすることもできます。 ただし、新しいドメイン コントローラーがレプリケーションを通じてオブジェクトを受け取ることと、IFM (メディアからのインストール) オプションを使用して昇格しないことを確認する必要があります。 IFM を使用してインストールされたドメイン コントローラーは、IFM バックアップの基になっているドメイン コントローラーから DNT 値を継承します。

データベースで DNT 制限に到達すると、次のエラー メッセージが表示されます。

Error: Add: Operations Error. <1> Server error: 000020EF: SvcErr: DSID-0208044C, problem 5012 (DIR_ERROR), data -1076.

次のコマンドを実行して approximateHighestInternalObjectID 属性を調べると、ドメイン コントローラーで現在使用されている最も大きい DNT の値を確認できます。

$ossupported = $false
 
# max possible DNTs
$maxdnts = [System.Math]::Pow(2, 31) - 255
 
# connect rootDSE
$root = [ADSI]"LDAP://rootDSE"
 
# get operational attribute dsaVersionString
$root.RefreshCache("dsaVersionString")
 
# get version string usable in System.Version
$osverstring = $root.dsaVersionString[0].Substring(0, $root.dsaVersionString[0].IndexOf(" "))
 
try
{
    $osver = New-Object System.Version $osverstring
 
    # we need at least W2K12 DC to see the approximateHighestInternalObjectID exposed
    if ($osver.Major -gt 6)
    { $ossupported = $true }
 
    elseif ($osver.Major -eq 6)
    { $ossupported = ($osver.Minor -ge 2) }
}
 
catch
{ Write-Host "ERROR: Could not evaluate DC OsVer!"  }
 
if ($ossupported)
{
    # get operational attribute approximateHighestInternalObjectID
    $root.RefreshCache("approximateHighestInternalObjectID")
 
    Write-Host "Approx highest committed DNT: $($root.approximateHighestInternalObjectID[0])"
 
    Write-Host "DNTs left for new assignments: $($maxdnts - $root.approximateHighestInternalObjectID[0]) from $maxdnts"
}
 
else
{ Write-Host "approximateHighestInternalObjectID not exposed (DC OsVer: $osverstring)" }

セキュリティ識別子の最大数

ドメイン コントローラーの有効期間中に作成できるセキュリティ識別子の最大数は、相対識別子 (RID) 2,147,483,647 個です。 RID の発行と監視の詳細については、「RID 発行の管理」を参照してください。

この制限は、ドメイン内のユーザー、グループ、およびコンピューター アカウントに割り当てられる各 SID を一意にするグローバル相対識別子 (RID) プールのサイズが原因です。 RID は、セキュリティ プリンシパルを削除しても再利用されないため、ドメイン内のセキュリティ プリンシパルの数に関係なく、常に上限が適用されます。

RID は、各ドメインの RID 操作マスター ロールを持つドメイン コントローラーから、既定で 500 ブロック単位で割り当てられます。 ドメイン コントローラーを降格した場合、元々ドメイン コントローラーに割り当てられていた未使用の RID はグローバル RID プールに戻らず、ドメインで使用できなくなります。

Windows Server では、使用可能な RID の数が使用可能なグローバル RID 領域の 90% に達すると、RID 発行の人為的な制限の準備が開始されます。 使用可能な RID の数がその制限の 1% 以内になると、RID プールを要求したドメイン コントローラーは、システム イベント ログで Directory-Services-SAM 警告イベント 16656 を受け取ります。

RID 制限の部分的な回避策は、アカウントを保持するためのドメインを追加で作成し、その新しいドメインにアカウントを移行することです。 ただし制限に達する前に、新しいドメインに必要な信頼関係を作成する必要があります。 信頼関係を作成するには、セキュリティ プリンシパル (信頼ユーザー アカウント) が必要です。

Active Directory データベースでは、コンテナー内のオブジェクトの数に制限は設定されませんが、何千ものオブジェクトを操作する場合は制限が設定されます。 Microsoft によってこれらの制限が構成されているのは、アプリケーションまたはサービスについて一定レベルの可用性を提供するためです。 これらの制限は、表示メニューでフィルター オプションの設定を再構成するか、Lightweight Directory Access Protocol (LDAP) ポリシーを変更することで調整できます。 詳しくは、KB 315071 を参照してください。

随意アクセス制御リストとセキュリティ アクセス制御リストのエントリの最大数

この制限は、ntSecurityDescriptor 属性を使用して Active Directory オブジェクトの随意アクセス制御リスト (DACL) またはセキュリティ アクセス制御リスト (SACL) に含めることができるエントリの数に適用されます。 制限自体は、アクセス制御リスト (ACL) のサイズ制限 (64 K) に基づいています。アクセス制御エントリ (ACE) は 1 つ以上のグローバル一意識別子 (GUID) を含んでおりサイズが異なることがあるため、実際のエントリ (SID) の最大数は 1,100 ~ 1,820 の範囲になります。 詳細については、セキュリティ記述子とアクセス制御リストの動作に関する記事を参照してください。

セキュリティ プリンシパルのグループ メンバーシップ

ユーザー、グループ、コンピューター アカウントなどのセキュリティ プリンシパルは、最大 1,015 個のグループのメンバーにすることができます。 各セキュリティ プリンシパルに対して作成するアクセス トークンのサイズ制限は、グループを入れ子にする方法の影響を受けないため、この制限が適用されます。 詳しくは、KB 328889 を参照してください。

ドメイン コントローラーで、承認の決定に使用されるデータ構造が作成される方法の詳細については、以下の記事を参照してください。

FQDN の長さ制限

Active Directory の完全修飾ドメイン名 (FQDN) の長さは、ハイフンやピリオドを含めて合計 64 文字以内にする必要があります。 この制限が存在するのは、SYSVOL 共有に格納されている Win32 アプリケーション プログラミング インターフェイス (API) とグループ ポリシー オブジェクト (GPO) によって MAX_PATH 値が 260 文字に定義されているためです。 詳しくは、KB 909264 を参照してください。

ファイル名とパスの制限

SYSVOL、データベース (NTDS.DIT)、ログ ファイル パスなど、Active Directory コンポーネントが使用する物理ファイルは、Win32 API で定義されている MAX_PATH の長さ 260 文字によって制限されます。 Active Directory のインストール中に SYSVOL およびデータベース ファイルを配置する場所を決定するときは、Active Directory 内の物理ファイルへの完全なファイル パスが 260 文字を超えるようなネストされたフォルダー構造を避けてください。

その他の名前の長さの制限

KB 909264 で説明されている次の名前の長さの制限が、Active Directory のリソース名とファイル名にも適用されます。

  • NetBIOS コンピューター名とドメイン名の長さは 15 文字以内にする必要があります。

  • ドメイン ネーム システム (DNS) ホスト名の長さは 24 文字以内にする必要があります。

  • OU 名の長さは 64 文字以内にする必要があります。

スキーマによる名前の長さの制限

Active Directory オブジェクトの属性名には、スキーマによって既定で以下の制限が適用されます。

  • Display-Name 属性」で説明されているように、表示名の長さは 256 文字以内にする必要があります。

  • Common-Name 属性」で説明されているように、共通名の長さは 64 文字以内にする必要があります。

  • スキーマ内で SAM-Account-Name 属性の長さは 256 文字以内にする必要があります。 ただし、下位互換性の理由から、ユーザーに対する Active Directory の制限は 20 文字です。 詳細については、「SAM-Account-Name 属性」 を参照してください。

LDAP simple bind 操作での名前の長さの制限

ディレクトリへのバインド時に、LDAP simple bind 操作ではユーザーの識別名 (DN) が 255 文字に制限されます。 255 文字を超える長さで LDAP simple bind を試みると、次の認証エラーが発生する可能性があります。

Error <49>: ldap_simple_bind_s() failed: Invalid Credentials
Server error: 80090308: LdapErr: DSID-0C0903AA, comment: AcceptSecurityContext error, data 57, v1771
Error 0x80090308 The token supplied to the function is invalid

ディレクトリへのバインドを試みるアプリケーション、スクリプト、ユーティリティで Secure LDAP バインドを使用することにより、この問題を回避できます。 OU 構造の深さを抑えたり、OU 名の長さを短くしたりすることもできます。 たとえば、次の識別名は 261 文字です。

CN=BobKelly,OU=CorporateVicePresidents,OU=CorporateOfficers,OU=ViewOfPugetSoundOffices,OU=TopFloor,OU=Building1557,OU=CorporateCampus,OU=Redmond,OU=Washington,OU=NorthWestern,OU=UnitedStatesOfAmerica,OU=NorthAmerica,DC=BusinessGroup,DC=humongousinsurance,DC=com

CorporateVicePresidents という OU を CVPに短縮すると、BobKelly ユーザー アカウントの識別名は 242 文字のみになり、制限内に収まります。

適用できる GPO の最大数

Active Directory では、ユーザーまたはコンピューター アカウントに適用できる GPO の数が 999 に制限されています。 この制限は、システム上のポリシー設定の合計数が 999 に制限されることを意味するものではありません。 単一のユーザーまたはコンピューターが 999 を超える GPO を処理できないということです。 この制限は、同時に処理される GPO が多すぎることによるパフォーマンスの問題を防ぐために存在します。

信頼の制限

信頼の制限は、信頼されたドメイン オブジェクト (TDO) の数および信頼パスの長さと、利用可能な信頼をクライアントが検出する能力に適用されます。 Active Directory の信頼制限には、以下の制限が含まれます。

  • Kerberos クライアントは、別のドメインで要求されたリソースを特定するために、最大 10 個の信頼リンクを走査できます。 ドメイン間の信頼パスがこの制限を超えると、ドメインへのアクセスの試行は失敗となります。

  • クライアントが信頼パスを検索する場合、検索の対象は、ドメインで直接確立された信頼と、フォレスト内の推移的な信頼に限定されます。

  • 以前のテストでは、組織の Active Directory の実装に 2,400 を超える TDO が含まれている場合、ドメイン間の認証など、TDO 関連の操作を完了するまでの時間が長くなり、パフォーマンスが著しく低下することが示されています。

信頼制限の詳細については、実際の信頼制限に関する記事を参照してください。

LDAP トランザクションあたりのアカウントの最大数

LDAP トランザクションを実行するスクリプトを作成したり、アプリケーションを設計したりする場合は、実行する操作を LDAP トランザクションあたり 5,000 以下に制限することをお勧めします。 LDAP トランザクションは、追加、削除、変更など、1 つの単位として扱われるディレクトリ操作のグループです。 1 つの LDAP トランザクションで 5,000 を超える操作を実行すると、リソース制限に達して操作タイムアウトが発生するリスクがあります。この問題が発生すると、トランザクション内のすべての操作がロールバックされ、トランザクション中に行った変更がすべて失われます。 変更をコミットする LDAP データ構造の詳細については、「LDAPModA 構造体」を参照してください。

Windows 2000 Active Directory 環境の場合、グループ内で推奨される最大メンバー数は 5,000 です。 この推奨値は、1 つのデータベース トランザクションでコミットできる同時アトミック変更の数に基づいています。

Windows Server 2003 以降では、リンクされた複数値プロパティへの個別の変更をレプリケートする機能が、Linked Value Replication (LVR) と呼ばれるテクノロジとして導入されました。 LVR を有効にするには、フォレストの機能レベルを Windows Server 2003 中間レベル以上に引き上げる必要があります。 フォレストの機能レベルを引き上げると、グループ メンバーシップ (およびその他のリンクされた複数値属性) がデータベースに格納され、ドメイン コントローラー間でレプリケートされる方法が変わります。 これにより、Windows 2000 のフォレスト機能レベルで、グループ メンバーシップの数が、Windows 2000 または Windows Server 2003 に対する以前の推奨制限である 5,000 を超えることができます。

現時点では、この領域でのテストでは、グループ内のメンバー数またはその他のリンクされた複数値属性に対する新しい推奨制限はまだ明らかにされていません。 運用環境のメンバー数は 400 万人を超えると報告されており、Microsoft のスケーラビリティ テストは 5 億人のメンバーに達しました。

重要

フォレストの機能レベルを Windows Server 2003 中間レベル以上に引き上げても、既存のグループ メンバーの保存方法やレプリケート方法は変更されません。 そのためには、フォレストの機能レベルが Windows Server 2003 に引き上げられる前にグループに追加されたメンバーを削除してから、適切なグループに再度追加する必要があります。 フォレストの機能レベルを引き上げた後に追加または削除したグループ メンバーは、(LVR 対応でない他のメンバーがグループに含まれていても) LVR 対応になります。 リンク属性の詳細については、 「リンク属性」 を参照してください。 レプリケーション プロセスの詳細については、Active Directory レプリケーション モデルのしくみに関する記事を参照してください。

次の表に、各ドメイン機能レベルで推奨される最大ドメイン数を示します。

ドメインの機能レベル ドメインの推奨最大数
Windows 2000 サーバ 800(八百)
Windows Server 2003 1,200
Windows Server 2025 3,000

Windows Server 2003 での 1,200 という上限は、Windows Server 2003 におけるリンクされていない複数値属性の制限です。 詳細については、データ ストアのしくみに関する記事 (/previous-versions/windows/it-pro/windows-server-2003/cc772829(v=ws.10)) の「データベース レコード の最大サイズ」を参照してください。

ドメインごとに使用するドメイン コントローラーの数を 1,200 に制限することをお勧めします。 この制限により、障害が発生した場合に SYSVOL を確実に回復できるようになります。

ネットワーク内の Active Directory ドメインにあるドメイン コントローラーが 1,200 を超えることが予想され、それらのドメイン コントローラーで Active Directory 統合ドメイン ネーム システム (DNS) ゾーンをホストする場合は、計画用に KB 267855 を確認することをお勧めします。

Kerberos チケットの推奨最大サイズは 48,000 バイトです。 チケット サイズは、KB 938118 で説明されているように、HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Lsa\Kerberos\Parameters レジストリの MaxTokenSize REG_DWORD 値を構成するか、グループ ポリシーを通じて設定できます。

MaxTokenSize の最大許容値は 65,535 バイトです。 IP セキュリティ (IPsec) キー管理に Kerberos を使用する場合、上限は 65,536 バイトです。 ただし、認証コンテキスト トークンの HTTP base64 エンコードのため、maxTokenSize レジストリ エントリを 48,000 バイトより大きい値に設定しないことをお勧めします。 Windows Server 2012 以降では、MaxTokenSize レジストリ エントリの既定値は 48,000 バイトです。

Kerberos チケットの詳細については、 Kerberos のトラブルシューティングのための追加リソースに関する記事を参照してください。

リンクされていない属性値の最大数

Active Directory データベースでは、リンクされていない属性値をリンクされたディレクトリに格納しますが、これはデータベース ページに収める必要があります。 このサイズ要件の結果として、属性を 1 つだけ持つオブジェクトに対するリンクされていない属性は、上限が 1,200 になります。 Windows Server 2025 フォレストでは、上限を最大 3,000 まで引き上げることができます。

実際の展開では、オブジェクトがリンクされていない属性の上限に近づくとエラーが発生し始めます。 この種類のエラーの状態コードは 0x00000b で、"サーバーで LDAP_ADMIN_LIMIT_EXCEEDED 管理制限を超えました" という文字列に対応します。

制限の詳細については、AD データベースの詳細に関する記事、単一の DNS 名に対する多数の DNS レコードに関する記事、および「Active Directory レプリケーション エラー 8304: オブジェクトの最大サイズを超えました」を参照してください。

Active Directory オブジェクトの最大サイズ

大量のデータを含む属性を変更するには、新しい値と古い値をデータベース トランザクションに格納する必要があります。 値を格納しておくと、トランザクションの途中でデータベースがシャットダウンした場合に、トランザクションをロールバックできます。 トランザクションの最大サイズにより、属性値データの合計 BLOB サイズが 5 MB に制限されます。

実行できる Active Directory トランザクションの最大サイズは、リンク値のレプリケーション前に保持できるグループ メンバーの数の制限と、グループ メンバーシップの変更に含まれるトランザクションの数の制限にも影響します。