次の方法で共有


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

適用対象: SQL Server Azure SQL Managed Instance

マネージド ストアド プロシージャまたはその他のマネージド データベース オブジェクトをビルドすると、SQL Server は考慮する必要がある特定のコード チェックを実行します。 これらのチェックは、 CREATE ASSEMBLY ステートメントを使用して、データベースに最初に登録されたとき、および実行時にマネージド コード アセンブリに対して実行されます。 また、実行時にマネージド コードもチェックされます。アセンブリ内には、実行時に実際には到達できないコード パスがある可能性があるためです。

これらのコード チェックにより、特にサードパーティアセンブリを登録する柔軟性が得られます。これにより、クライアント環境で実行するように設計された 安全でない コードはブロックされませんが、ホストされている共通言語ランタイム (CLR) では実行されません。 マネージド コードが満たす必要がある要件は、アセンブリが SAFEEXTERNAL_ACCESS、または UNSAFEとして登録されているかどうかによって異なります。 SAFE は最も厳密なセキュリティ レベルです。

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

publisher ポリシーが設定されている場合、CREATE ASSEMBLYは失敗します。

CREATE ASSEMBLY のチェック

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

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

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

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

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

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

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

EXTERNAL_ACCESS

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

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

  • PEVerify テストに合格しました。 共通中間言語 (CIL) コードと関連するメタデータが型の安全性要件を満たしていることを確認する 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

SAFE

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

実行時のチェック

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

UNSAFE

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

EXTERNAL_ACCESS

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

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

  • SelfAffectingProcessMgmt
  • SelfAffectingThreading
  • Synchronization
  • SharedState
  • ExternalProcessMgmt
  • ExternalThreading
  • SecurityInfrastructure
  • MayLeakOnAbort
  • UI

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

SAFE

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