セキュリティ コンテキストと Active Directory Domain Services
アプリケーションが Active Directory ドメイン コントローラー (DC) にバインドすると、ユーザーまたはコンピューターやシステム サービスなどのエンティティである可能性があるセキュリティ プリンシパルのセキュリティ コンテキストでバインドされます。 セキュリティ コンテキストは、スレッドがセキュリティ保護可能なオブジェクトにアクセスしようとしたときにセキュリティを適用するためにシステムが使用するユーザー アカウントです。 このデータには、ユーザー セキュリティ識別子 (SID)、グループ メンバーシップ、および特権が含まれます。
ユーザーは、認証用の資格情報を提示することによってセキュリティ コンテキストを確立します。 資格情報が認証されると、システムは、ユーザー アカウントに関連付けられているグループ メンバーシップと特権を識別するアクセス トークンを生成します。 ディレクトリ オブジェクトにアクセスしようとすると、システムによってアクセス トークンが検証されます。 これは、アクセス トークン内のデータを、オブジェクト セキュリティ記述子によってアクセスが許可または拒否されたアカウントおよびグループと比較します。
Active Directory DC にバインドするセキュリティ コンテキストを制御するには、次のメソッドを使用します。
- ADS_SECURE_AUTHENTICATION オプションを使用して、ADsOpenObject 関数または IADsOpenDSObject::OpenDSObjectメソッドをしてバインドし、ユーザー名とパスワードを明示的に指定します。 システムはこれらの資格情報を認証し、そのバインドの期間中、アクセス検証に使用するアクセス トークンを生成します。 詳細については、「認証 をする」を参照してください。
- ADS_SECURE_AUTHENTICATION オプションを使用してバインドしますが、資格情報は指定しません。 ユーザーを偽装していない場合、システムはアプリケーションのプライマリ セキュリティ コンテキスト、つまりアプリケーションを開始したユーザーのセキュリティ コンテキストを使用します。 システム サービスの場合、これはサービス アカウントまたは LocalSystem アカウントのセキュリティ コンテキストです。
- ユーザーを偽装し、資格情報を指定せずに ADS_SECURE_AUTHENTICATIONでバインドします。 この場合、システムは偽装されたクライアントのセキュリティ コンテキストを使用します。 詳細については、「クライアント偽装」を参照してください。
- ADS_NO_AUTHENTICATION オプション 使用して ADsOpenObject または IADsOpenDSObject::OpenDSObjectをしてバインドします。 このメソッドは認証なしでバインドされ、セキュリティ コンテキストとして "Everyone" になります。 LDAP プロバイダーのみがこのオプションをサポートします。
可能であれば、資格情報を指定せずにバインドします。 つまり、ログオン しているユーザーまたは偽装されたクライアントのセキュリティ コンテキストを使用します。 これにより、資格情報のキャッシュを回避できます。 代替ユーザー資格情報を使用する必要がある場合は、資格情報の入力を求め、バインドしますが、キャッシュしないでください。 複数のバインド操作で同じセキュリティ コンテキストを使用するには、最初のバインド操作のユーザー名とパスワードを指定してから、ユーザー名のみを指定して後続のバインドを行います。 この手法の使用方法の詳細については、「認証」を参照してください。
一部のセキュリティ コンテキストは、他のセキュリティ コンテキストよりも強力です。 たとえば、ドメイン コントローラー上の LocalSystem アカウントは Active Directory Domain Services への完全なアクセス権を持ちますが、一般的なユーザーはディレクトリ内の一部のオブジェクトにのみアクセスできます。 一般に、操作を実行するのに十分な強力なセキュリティ コンテキストが十分でない場合は、LocalSystem などの強力なセキュリティ コンテキストでアプリケーションを実行しないでください。 つまり、アプリケーションを個別のコンポーネントに分割し、それぞれを実行する操作に適したセキュリティ コンテキストで実行することができます。 たとえば、アプリケーションのセットアップは次のように分割できます。
- スキーマ管理者グループのメンバーであるユーザーのコンテキストでスキーマの変更と拡張機能を実行します。
- エンタープライズ管理者グループのメンバーであるユーザーのコンテキストで、構成コンテナーの変更を実行します。
- ドメイン管理者グループのメンバーであるユーザーのコンテキストでドメイン コンテナーの変更を実行します。