次の方法で共有


CLR 統合プログラミング モデルの制限事項

マネージド ストアド プロシージャまたはその他のマネージド データベース オブジェクトをビルドする場合、SQL Server によって実行される特定のコード チェックは、データベースに最初に登録されたときに、 CREATE ASSEMBLY ステートメントを使用して、実行時にもマネージド コード アセンブリに対してチェックを実行します。 マネージド コードは実行時にもチェックされます。アセンブリ内には、実行時に実際には到達できないコード パスがある可能性があるためです。 これにより、サードパーティのアセンブリを登録する柔軟性が得られます。特に、クライアント環境で実行するように設計された "安全でない" コードがあるが、ホストされている CLR では実行されない場合にアセンブリがブロックされないようにします。 マネージド コードが満たす必要がある要件は、アセンブリが SAFEEXTERNAL_ACCESS、または UNSAFEとして登録されているかどうかによって異なります SAFE 、以下に示します。

マネージド コード アセンブリには、制限事項に加えてコード セキュリティ権限も付与されます。 共通言語ランタイム (CLR) では、マネージド コードのコード アクセス セキュリティ (CAS) と呼ばれるセキュリティ モデルがサポートされています。 このモデルでは、コードの ID に基づいてアセンブリに権限が許可されます。 SAFEEXTERNAL_ACCESS、および UNSAFE の各アセンブリには、それぞれ異なる CAS 権限が付与されます。 詳細については、「 CLR 統合コード アクセス セキュリティを参照してください。

CREATE ASSEMBLY チェック

CREATE ASSEMBLY ステートメントを実行すると、セキュリティ レベルごとに次のチェックが実行されます。 いずれかのチェックが失敗した場合、 CREATE ASSEMBLY はエラー メッセージで失敗します。

グローバル (すべてのセキュリティ レベル)

参照されるすべてのアセンブリは、次の条件のうち 1 つ以上を満たす必要があります。

  • 既にデータベースに登録されていること。

  • サポートされているアセンブリの 1 つであること。 詳細については、「 サポートされている .NET Framework ライブラリ」を参照してください。

  • CREATE ASSEMBLY FROM <location> を使用しており、参照されているすべてのアセンブリとその依存関係を <location> で使用できます。

  • CREATE ASSEMBLY FROM <bytes ...> を使用しており、すべての参照はスペース区切りバイトで指定されます。

EXTERNAL_ACCESS

すべての EXTERNAL_ACCESS アセンブリは、次の条件を満たす必要があります。

  • 静的フィールドは、情報の格納には使用されません。 読み取り専用の静的フィールドは許可されます。

  • PEVerify テストに合格しました。 MSIL コードと関連するメタデータが型の安全性要件を満たしていることを確認する PEVerify ツール (peverify.exe) は、.NET Framework SDK で提供されます。

  • たとえば、 SynchronizationAttribute クラスとの同期は使用されません。

  • ファイナライザー メソッドは使用されません。

EXTERNAL_ACCESS アセンブリでは、次のカスタム属性が許可されません。

  • System.ContextStaticAttribute

  • System.MTAThreadAttribute

  • System.Runtime.CompilerServices.MethodImplAttribute

  • System.Runtime.CompilerServices.CompilationRelaxationsAttribute

  • System.Runtime.Remoting.Contexts.ContextAttribute

  • System.Runtime.Remoting.Contexts.SynchronizationAttribute

  • System.Runtime.InteropServices.DllImportAttribute

  • System.Security.Permissions.CodeAccessSecurityAttribute

  • System.Security.SuppressUnmanagedCodeSecurityAttribute

  • System.Security.UnverifiableCodeAttribute

  • System.STAThreadAttribute

  • System.ThreadStaticAttribute

金庫

  • EXTERNAL_ACCESS アセンブリの条件がすべてチェックされていること。

ランタイム チェック

コード アセンブリは、実行時に次の条件をチェックされます。 これらの条件のいずれかが見つかった場合、マネージド コードの実行は許可されず、例外がスローされます。

UNSAFE

バイト配列から System.Reflection.Assembly.Load() メソッドを呼び出してアセンブリを明示的に読み込むか、 Reflection.Emit 名前空間を使用して暗黙的に読み込むのは許可されません。

EXTERNAL_ACCESS

UNSAFE の条件がすべてチェックされていること。

サポートされているアセンブリの一覧の中で、次のホスト保護属性 (HPA) 値で注釈を付けられている型およびメンバーはすべて許可されません。

  • SelfAffectingProcessMgmt

  • SelfAffectingThreading

  • 同期化

  • SharedState

  • ExternalProcessMgmt

  • ExternalThreading

  • SecurityInfrastructure

  • MayLeakOnAbort

  • ユーザーインターフェース

HPA の詳細と、サポートされているアセンブリの許可されていない型とメンバーの一覧については、「 ホスト保護属性と CLR 統合プログラミング」を参照してください。

金庫

EXTERNAL_ACCESS の条件がすべてチェックされていること。

こちらもご覧ください

サポートされている .NET Framework ライブラリ
CLR 統合コード アクセス セキュリティ
ホスト保護属性と CLR 統合プログラミング
アセンブリの作成