次の方法で共有


接続の権限借用と資格情報

Microsoft SQL Server CLR (共通言語ランタイム) 統合では、複雑な Windows 認証を使用する方が、SQL Server 認証を使用するよりもセキュリティが向上します。統合認証を使用する場合には、次の点を考慮してください。

Windows に接続する SQL Server プロセスは、SQL Server Windows サービス アカウントのセキュリティ コンテキストを既定で取得します。ただし、CLR 関数をプロキシ ID にマッピングすることにより、その発信接続に対し、Windows サービス アカウントとは異なるセキュリティ コンテキストを設定することができます。

場合によっては、サービス アカウントで実行する代わりに、SqlContext.WindowsIdentity プロパティを使用して呼び出し元の権限を借用することもあります。WindowsIdentity インスタンスは、呼び出し元のコードを実行するクライアントの ID を表し、クライアントで統合認証を使用する場合のみ入手できます。WindowsIdentity インスタンスを取得すると、Impersonate を呼び出してスレッドのセキュリティ トークンを変更し、その後でクライアントの代わりに ADO.NET 接続を開くことができます。

次の例では、SqlContext.WindowsIdentity プロパティを使用して呼び出し元の権限を借用します。

Visual C#

WindowsIdentity clientId = null;
WindowsImpersonationContext impersonatedUser = null;

clientId = SqlContext.WindowsIdentity;

// This outer try block is used to protect from 
// exception filter attacks which would prevent
// the inner finally block from executing and 
// resetting the impersonation.
try
{
   try
   {
      impersonatedUser = clientId.Impersonate();
      if (impersonatedUser != null)
         return GetFileDetails(directoryPath);
         else return null;
   }
   finally
   {
      if (impersonatedUser != null)
         impersonatedUser.Undo();
   }
}
catch
{
   throw;
}

SqlContext.WindowsIdentity プロパティを使用した権限借用の完全な例については、「Impersonation サンプル」を参照してください。

Microsoft Windows ID インスタンスを取得した場合、既定では、そのインスタンスを別のコンピュータに反映できません。既定では、Windows セキュリティ インフラストラクチャによりこの操作が制限されます。ただし、"委任" というメカニズムを使用すると、信頼関係のある複数のコンピュータに Windows ID を反映できるようになります。委任の詳細については、TechNet の資料「Kerberos のプロトコル遷移と制約付き委任」を参照してください。

参照

概念

SqlContext オブジェクト

その他の技術情報

認証モード

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 4 月 14 日

更新内容 :
  • わかりやすくするために最初の 2 つの段落を書き換えました。
  • コード例を追加しました。