SQL Server プログラミングとホスト保護属性
SQL Server ホストにマネージド コードを読み込み、実行する機能を利用するには、コード アクセス セキュリティとホスト リソース保護の両方においてホストの要件を満たす必要があります。 コード アクセス セキュリティの要件は、SAFE、EXTERNAL-ACCESS、UNSAFE という 3 つの SQL Server アクセス許可セットのいずれかにより指定されます。 SAFE アクセス許可セット内か EXTERNAL-ACCESS アクセス許可セット内でコードを実行する場合、HostProtectionAttribute 属性が適用されている特定の型またはメンバーを避ける必要があります。 HostProtectionAttribute はセキュリティ アクセス許可ではなく、むしろ信頼性保証であり、ホストが許可しない可能性がある特定のコード コンストラクト (型またはメソッド) を識別します。 HostProtectionAttribute を使用すると、ホストの安定性確保に役立つプログラミング モデルを適用できます。
Note
コード アクセス セキュリティ (CAS) は、.NET Framework と .NET のすべてのバージョンで非推奨になりました。 最近のバージョンの .NET では、CAS 関連の API が使われている場合、CAS の注釈は使われず、エラーが発生します。 開発者は、代わりの手段を見つけてセキュリティ タスクを実現する必要があります。
ホスト保護属性
ホスト保護属性は、ホスト プログラミング モデルに合わない型またはメンバーを特定し、以下の信頼性レベルの脅威の増加を表します。
他の場合には特に害のない脅威
サーバーで実行されるマネージ ユーザー コードの不安定化につながる脅威
サーバー プロセス自体の不安定化につながる脅威
SQL Server は、HostProtectionResource 値として SharedState、Synchronization、MayLeakOnAbort、ExternalProcessMgmt を指定する HostProtectionAttribute を持つ型またはメンバーの使用を禁止します。 これにより、共有状態を有効にし、同期を実行し、終了時にリソースを漏洩する可能性があり、SQL Server プロセスの整合性に影響を与えるメンバーの呼び出しをアセンブリに禁止します。
禁止されている型とメンバー
次の表は、HostProtectionResource 値が SQL Server により禁止される型とメンバーをまとめたものです。
SQL Server アクセス許可セット
SQL Server では、データベースに展開されたコードの信頼性要件をユーザーは指定できます。 アセンブリがデータベースにアップロードされるとき、アセンブリの作者はそのアセンブリの 3 つのアクセス許可セット (SAFE、EXTERNAL-ACCESS、UNSAFE) のいずれかを指定できます。
アクセス許可セット | SAFE | EXTERNAL-ACCESS | UNSAFE |
---|---|---|---|
コード アクセス セキュリティ | 実行のみ | 実行および外部リソースへのアクセス | 無制限 |
プログラミング モデルの制限事項 | はい | はい | 制限事項なし |
検証可能性の要件 | はい | はい | いいえ |
ネイティブ コードを呼び出す機能 | いいえ | 番号 | はい |
SAFE は、許可されているプログラミング モデルの中でも多くの制限事項が関連付けられており、最も信頼性が高く、セキュリティで保護されたモードです。 SAFE コードには、信頼性とセキュリティの高い機能があります。 SAFE アセンブリには、実行、計算の実行、およびローカル データベースへのアクセスを行うには十分な権限が許可されます。 SAFE アセンブリは検証可能なタイプ セーフである必要があり、アンマネージ コードを呼び出すことはできません。
EXTERNAL-ACCESS はセキュリティとして中間の選択肢であり、データベースの外にあるリソースへのアクセスをコードに許可しますが、SAFE の信頼性と安全性も備えています。
UNSAFE は、データベース管理者のみが作成できる信頼性の高いコードに指定します。 信頼性の高いこのコードにはコード アクセス制限がなく、アンマネージ (ネイティブ) コードを呼び出すことができます。
SQL Server はホスト レベルのコード アクセス セキュリティ ポリシー層を利用し、SQL Server カタログに保存されているアクセス許可セットに基づき、3 つのアクセス許可セットのいずれかを与えるホスト ポリシーを設定します。 データベース内部で実行するマネージド コードには、これらのコード アクセス権限セットのうちのいずれかが必ず許可されます。
プログラミング モデルの制限
SQL Server のマネージド コードのプログラミング モデルは、複数の呼び出しで状態を維持すること、または、複数のユーザー セッションで状態を共有することを要求しない関数、プロシージャ、型を必要とします。 さらに、既に説明したように、共有状態が存在すると、アプリケーションのスケーラビリティや信頼性に影響を与える重大な例外が発生する可能性があります。
以上を考慮した上で、SQL Server は静的変数と静的データ メンバーの使用を禁止します。 SAFE アセンブリと EXTERNAL-ACCESS アセンブリに関しては、SQL Server は CREATE ASSEMBLY 時にアセンブリのメタデータを調べ、静的データ メンバーや静的変数の使用が見つかった場合、SAFE アセンブリまたは EXTERNAL-ACCESS アセンブリの作成に失敗します。
関連項目
.NET