ホスト保護属性と CLR 統合プログラミング

CLR (共通言語ランタイム) には、.NET Framework の一部であるマネージ API (アプリケーション プログラミング インターフェイス) に、特定の属性で注釈を付けるメカニズムが用意されています。このような属性は、SQL Server (SQL Server 2005 以降) など CLR のホストのための属性です。このような HPA (ホスト保護属性) の例としては、次のものがあります。

  • SharedState。共有状態 (静的なクラス フィールドなど) を作成または管理する機能が API で公開されるかどうかを示します。

  • Synchronization。スレッド間で同期を実行する機能が API で公開されるかどうかを示します。

  • ExternalProcessMgmt。ホスト プロセスを制御する方法が API で公開されるかどうかを示します。

SQL Server は、これらの属性が与えられると、CAS (コード アクセス セキュリティ) を使用して、ホストされた環境で許可されない HPA の一覧を指定します。CAS 要件は、SQL Server の 3 つの権限セット (SAFE、EXTERNAL_ACCESS、または UNSAFE) のいずれかで指定します。アセンブリをサーバーに登録する際に、CREATE ASSEMBLY ステートメントを使用して、これら 3 つのセキュリティ レベルのいずれかを指定します。SAFE 権限セットまたは EXTERNAL_ACCESS 権限セット内で実行されるコードでは、System.Security.Permissions.HostProtectionAttribute 属性が適用される特定の型またはメンバを使用しないようにする必要があります。詳細については、「アセンブリの作成」および「CLR 統合プログラミング モデルの制限事項」を参照してください。

HostProtectionAttribute は、ホストで許可されないコード構文 (型またはメソッド) を特定するという点で、信頼性を向上するための手段がセキュリティ権限とは異なります。HostProtectionAttribute を使用すると、ホストの安定性確保に役立つプログラミング モデルを適用できます。

ホスト保護属性

HPA は、ホスト プログラミング モデルに適合しない型またはメンバを識別して、次に示す信頼性に対する脅威を表します (リスクの低いものから順に並べています)。

  • 他の場合には特に害のない脅威

  • サーバーで実行されるマネージ ユーザー コードの不安定化につながる脅威

  • サーバー プロセス自体の不安定化につながる脅威

SQL Server では、System.Security.Permissions.HostProtectionResource 列挙 (ExternalProcessMgmt、ExternalThreading、MayLeakOnAbort、SecurityInfrastructure、SelfAffectingProcessMgmnt、SelfAffectingThreading、SharedState、Synchronization、または UI の値を含む) を示す HostProtectionAttribute を含む型またはメンバを使用することができません。これにより、状態の共有を可能にしたり、同期を実行するメンバをアセンブリから呼び出すことができなくなります。さらに、終了時にリソース リークを発生させたり、SQL Server プロセスの整合性に影響を与える可能性があるメンバの呼び出しも禁止されます。

許可されない型およびメンバ

次のトピックでは、HostProtectionResource の値が SQL Server によって許可されない型およびメンバを示します。

注意

各トピックに含まれる一覧は、.NET Framework Version 2.0 SP1 がサポートするアセンブリから作成されたものです。詳細については、「サポートされている .NET Framework ライブラリ」を参照してください。

このセクションの内容