クライアントの権限借用
偽装は、サーバーがクライアント要求を他のサーバー プロセスまたはオペレーティング システムに渡す必要がある分散コンピューティング環境で役立ちます。 この場合、サーバーはクライアントのセキュリティ コンテキストを偽装します。 その後、他のサーバー プロセスは、元のクライアントによって行われたかのように要求を処理できます。
たとえば、クライアントはサーバー A に対して要求を行います。サーバー A がサーバー B にクエリを実行して要求を完了する必要がある場合、サーバー A はクライアント セキュリティ コンテキストを偽装し、クライアントの代わりにサーバー B に要求を行います。 サーバー B は、サーバー A のセキュリティ ID ではなく、元のクライアントのセキュリティ コンテキストを使用して、タスクを完了するかどうかを決定します。
サーバーは RpcImpersonateClient を呼び出して、サーバー スレッドのセキュリティをクライアント セキュリティ コンテキストで上書きします。 タスクが完了すると、サーバーは RpcRevertToSelf または RpcRevertToSelfEx を呼び出して、サーバー スレッドに定義されているセキュリティ コンテキストを復元します。
バインド時に、クライアントは、サーバーがクライアントを偽装する方法を指定するセキュリティに関するサービス品質情報を指定できます。 たとえば、設定の 1 つを使用すると、サーバーが偽装を許可されないことをクライアントが指定できます。 詳細については、「サービスの品質」を参照してください。
元のクライアントの偽装中に他のサーバーを呼び出す機能を 委任と呼びます。 委任を使用する場合、クライアントを偽装しているサーバーは別のサーバーを呼び出し、クライアントの資格情報を使用してネットワーク呼び出しを行うことができます。 つまり、2 番目のサーバーの観点からは、最初のサーバーからの要求は、クライアントからの要求と区別できません。 すべてのセキュリティ プロバイダーが委任をサポートしているわけではありません。 Microsoft には、委任をサポートするセキュリティ プロバイダー Kerberos が 1 つだけ付属しています。
委任は、リモート プロシージャ コール中にクライアントがサーバーに与える特権が原因で危険な機能になる可能性があります。 このため、Kerberos では、相互認証が要求された場合にのみ、委任の偽装レベルでの呼び出しが許可されます。 ドメイン管理者は、委任偽装レベルの呼び出しが行われるコンピューターを制限して、疑いのないクライアントが資格情報を悪用する可能性のあるサーバーへの呼び出しを行わないようにすることができます。
委任規則の 1 つの例外が存在します。 ncalrpc を使用した呼び出しです。 これらの呼び出しが行われると、偽装レベルの偽装が指定されている場合でも、サーバーは委任権限を取得します。 つまり、サーバーはクライアントの代わりに他のサーバーを呼び出すことができます。 これは、1 つのリモート呼び出しに対してのみ機能します。 たとえば、クライアント A が ncalrpc ローカル サーバー LB を使用してローカル サーバー LB を呼び出す場合、リモート サーバー RB を偽装して呼び出すことができます。 RB はクライアント A に代わって動作できますが、RB が実行されているリモート コンピューターでのみ動作します。 LB が RB を呼び出したときに委任の偽装レベルを指定しない限り、リモート コンピューター C に対して別のネットワーク呼び出しを行うことはできません。
注意
偽装という用語は、2 つの重複する意味を表します。 偽装の最初の意味は、クライアントに代わって行動する一般的なプロセスです。 2 つ目の意味は、偽装と呼ばれる特定の偽装レベルです。 テキストのコンテキストは、一般的に意味を明確にします。