CLR 統合プログラミング モデルの制限事項
適用対象: SQL Server Azure SQL Managed Instance
マネージド ストアド プロシージャまたはその他のマネージド データベース オブジェクトをビルドすると、SQL Server は考慮する必要がある特定のコード チェックを実行します。 これらのチェックは、 CREATE ASSEMBLY
ステートメントを使用して、データベースに最初に登録されたとき、および実行時にマネージド コード アセンブリに対して実行されます。 また、実行時にマネージド コードもチェックされます。アセンブリ内には、実行時に実際には到達できないコード パスがある可能性があるためです。
これらのコード チェックにより、特にサードパーティアセンブリを登録する柔軟性が得られます。これにより、クライアント環境で実行するように設計された 安全でない コードはブロックされませんが、ホストされている共通言語ランタイム (CLR) では実行されません。 マネージド コードが満たす必要がある要件は、アセンブリが SAFE
、 EXTERNAL_ACCESS
、または UNSAFE
として登録されているかどうかによって異なります。 SAFE
は最も厳密なセキュリティ レベルです。
マネージド コード アセンブリには、制限事項に加えてコード セキュリティ権限も付与されます。 CLR は、コード アクセス セキュリティ (CAS) と呼ばれるマネージド コード用のセキュリティ モデルをサポートしています。 このモデルでは、コードの ID に基づいてアセンブリに権限が許可されます。 SAFE
、EXTERNAL_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
の条件がすべてチェックされていること。