SQL Server ホストでマネージド コードを読み込んで実行するには、コード アクセス セキュリティとホスト リソース保護の両方に関するホストの要件を満たす必要があります。 コード アクセス セキュリティ要件は、3 つの SQL Server アクセス許可セット (SAFE、EXTERNAL-ACCESS、UNSAFE) のいずれかで指定されます。 SAFE 権限セットまたは EXTERNAL-ACCESS 権限セット内で実行するコードでは、 HostProtectionAttribute 属性が適用されている特定の型またはメンバーを回避する必要があります。 HostProtectionAttributeは、ホストが許可しない可能性のある特定のコードコンストラクト (型またはメソッド) を識別するという信頼性保証ほどセキュリティアクセス許可ではありません。 HostProtectionAttribute を使用すると、ホストの安定性を保護するのに役立つプログラミング モデルが適用されます。
注
コード アクセス セキュリティ (CAS) は、.NET Framework と .NET のすべてのバージョンで非推奨になりました。 最近のバージョンの .NET では、CAS に関連する API が使用されている場合、CAS 注釈は使用されず、エラーが発生します。 開発者は、セキュリティ タスクを実行するための代替手段を求める必要があります。
ホスト保護属性
ホスト保護属性は、ホスト プログラミング モデルに適合しない型またはメンバーを識別し、次の高まる信頼性の脅威を表します。
他の場合には特に害のない脅威
サーバーで実行されるマネージ ユーザー コードの不安定化につながる脅威
サーバー プロセス自体の不安定化につながる脅威
SQL Server は、SharedState、Synchronization、MayLeakOnAbort、またはExternalProcessMgmtのHostProtectionResource値を指定するHostProtectionAttributeを持つ型またはメンバーの使用を禁止します。 これにより、共有状態を有効にし、同期を実行し、終了時にリソースを漏洩する可能性があり、SQL Server プロセスの整合性に影響を与えるメンバーの呼び出しをアセンブリに禁止します。
許可されていない型とメンバー
次の表は、SQL Server によって HostProtectionResource 値が許可されていない型とメンバーを示しています。
SQL Server 権限セット
SQL Server を使用すると、ユーザーはデータベースにデプロイされるコードの信頼性要件を指定できます。 アセンブリがデータベースにアップロードされると、アセンブリの作成者は、そのアセンブリに対して SAFE、EXTERNAL-ACCESS、UNSAFE の 3 つの権限セットのいずれかを指定できます。
アクセス許可セット | 金庫 | 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 時にアセンブリのメタデータを調べ、静的データ メンバーと変数の使用が見つかると、そのようなアセンブリの作成に失敗します。
こちらも参照ください
.NET