次の方法で共有


CLR 統合のコード アクセス セキュリティ

共通言語ランタイム (CLR) では、マネージド コードに対してコード アクセス セキュリティというセキュリティ モデルがサポートされます。 このモデルでは、コードの ID に基づいてアセンブリに権限が許可されます。 詳細については、.NET Framework ソフトウェア開発キットの「コード アクセス セキュリティ」セクションを参照してください。

アセンブリに許可される権限を決定するセキュリティ ポリシーは、次の 3 つに分類されます。

  • マシン ポリシー: これは、SQL Server がインストールされているマシンで実行されているすべてのマネージド コードに対して有効なポリシーです。

  • ユーザー ポリシー: これは、プロセスによってホストされるマネージド コードに対して有効なポリシーです。 SQL Server サービスが実行されています。

  • ホスト ポリシー: これは、そのホストで実行されているマネージド コードに対して有効な CLR (この場合は SQL Server) のホストによって設定されるポリシーです。

CLR でサポートされるコード アクセス セキュリティ メカニズムは、ランタイムが完全に信頼されるコードと部分的に信頼されるコードの両方をホストできるという前提に基づいています。 CLR コード アクセス セキュリティによって保護されるリソースは、通常、リソースへのアクセスを許可する前に対応するアクセス許可を必要とするマネージド アプリケーション プログラミング インターフェイスによってラップされます。 アクセス許可の要求が満たされるのは、呼び出し履歴内のすべての呼び出し元 (アセンブリ レベル) に対応するリソース アクセス許可がある場合のみです。

SQL Server 内で実行するときにマネージド コードに付与されるコード アクセス セキュリティアクセス許可のセットは、SQL Server に読み込まれたアセンブリに一連のアクセス許可を付与します。ユーザー コードに与えられるアクセス許可の最終的なセットは、ユーザーレベルおよびマシンレベルのポリシーによってさらに制限される可能性があります。

SQL Server ホスト ポリシー レベルのアクセス許可セット

SQL Server ホスト ポリシー レベルによってアセンブリに付与されるコード アクセス セキュリティアクセス許可のセットは、アセンブリの作成時に指定されたアクセス許可セットによって決まります。 アクセス許可セットには、SAFEEXTERNAL_ACCESS、およびUNSAFEの 3 つがあります (CREATE ASSEMBLY (Transact-SQL)PERMISSION_SET オプションを使用して指定)。

SQL Server。 このポリシーは、SQL Server が CLR のインスタンスを作成するときに有効になる既定のアプリケーション ドメイン用ではありません。

システム アセンブリの SQL Server 固定ポリシーと、ユーザー アセンブリのユーザー指定ポリシー。

CLR アセンブリと SQL Server システム アセンブリの固定ポリシーにより、完全な信頼が付与されます。

SQL Server ホスト ポリシーのユーザー指定の部分は、アセンブリ所有者が各アセンブリに対して 3 つのアクセス許可バケットのいずれかを指定することに基づいています。 以下に示すセキュリティ アクセス許可の詳細については、.NET Framework SDK を参照してください。

金庫

内部コンピューター処理とローカル データのアクセスだけが許可されます。 SAFE は、最も制限の厳しいアクセス許可セットです。 SAFEアクセス許可を持つアセンブリによって実行されるコードは、ファイル、ネットワーク、環境変数、レジストリなどの外部システム リソースにアクセスできません。

SAFE アセンブリには、次のアクセス許可と値があります。

権限 値/説明
SecurityPermission Execution: マネージド コードを実行するためのアクセス許可。
SqlClientPermission Context connection = truecontext connection = yes: コンテキスト接続のみを使用でき、接続文字列では "context connection=true" または "context connection=yes" の値のみを指定できます。

AllowBlankPassword = false: 空白のパスワードは使用できません。

EXTERNAL_ACCESS

EXTERNAL_ACCESS アセンブリには、 SAFE アセンブリと同じアクセス許可があり、ファイル、ネットワーク、環境変数、レジストリなどの外部システム リソースにアクセスする追加の機能があります。

EXTERNAL_ACCESS アセンブリには、次のアクセス許可と値もあります。

権限 値/説明
DistributedTransactionPermission Unrestricted: 分散トランザクションは許可されます。
DNSPermission Unrestricted: ドメイン ネーム サーバーから情報を要求するアクセス許可。
EnvironmentPermission Unrestricted: システム環境変数とユーザー環境変数へのフル アクセスが許可されます。
EventLogPermission Administer: イベント ソースの作成、既存のログの読み取り、イベント ソースまたはログの削除、エントリへの応答、イベント ログのクリア、イベントのリッスン、およびすべてのイベント ログのコレクションへのアクセスが許可されます。
FileIOPermission Unrestricted: ファイルとフォルダーへのフル アクセスが許可されます。
KeyContainerPermission Unrestricted: キー コンテナーへのフル アクセスが許可されます。
NetworkInformationPermission Access: ping は許可されています。
RegistryPermission HKEY_CLASSES_ROOTHKEY_LOCAL_MACHINEHKEY_CURRENT_USERHKEY_CURRENT_CONFIG、および HKEY_USERS. の読み取り権限を許可します
SecurityPermission Assertion: このコードのすべての呼び出し元に、操作に必要なアクセス許可があることをアサートする機能。

ControlPrincipal: プリンシパル オブジェクトを操作する機能。

Execution: マネージド コードを実行するためのアクセス許可。

SerializationFormatter: シリアル化サービスを提供する機能。
SmtpPermission Access: SMTP ホスト ポート 25 への送信接続が許可されます。
SocketPermission Connect: トランスポート アドレス上の送信接続 (すべてのポート、すべてのプロトコル) が許可されます。
SqlClientPermission Unrestricted: データソースへのフル アクセスが許可されます。
StorePermission Unrestricted: X.509 証明書ストアへのフル アクセスが許可されます。
WebPermission Connect: Web リソースへの送信接続が許可されます。

UNSAFE

UNSAFE を使用すると、アセンブリは SQL Server 内と外部の両方のリソースに無制限にアクセスできます。 UNSAFE アセンブリ内から実行されるコードは、アンマネージ コードを呼び出すこともできます。

UNSAFE アセンブリは FullTrust与えられる。

Von Bedeutung

SAFE は、SQL Server の外部のリソースにアクセスせずに計算タスクとデータ管理タスクを実行するアセンブリに推奨されるアクセス許可設定です。 EXTERNAL_ACCESS アセンブリは既定で SQL Server サービス アカウントとして実行されます。 EXTERNAL_ACCESS を実行するアクセス許可は、サービス アカウントとして実行するために信頼されたログインにのみ付与する必要があります。 セキュリティの観点からは、EXTERNAL_ACCESS アセンブリと UNSAFE アセンブリは同じです。 ただし、 EXTERNAL_ACCESS アセンブリは、 UNSAFE アセンブリにないさまざまな信頼性と堅牢性の保護を提供します。 UNSAFEを指定すると、アセンブリ内のコードで SQL Server に対して無効な操作を実行できます。 SQL Server での CLR アセンブリの作成の詳細については、「 CLR 統合アセンブリの管理」を参照してください。

外部リソースへのアクセス

ユーザー定義型 (UDT)、ストアド プロシージャ、またはその他の種類のコンストラクト アセンブリが SAFE アクセス許可セットに登録されている場合、コンストラクトで実行されているマネージド コードは外部リソースにアクセスできません。 ただし、EXTERNAL_ACCESS または UNSAFE のアクセス許可セットを指定し、マネージド コードが外部リソースにアクセスしようとすると、SQL Server は次の規則を適用します。

もし THEN
実行コンテキストは、SQL Server ログインに対応します。 外部リソースへのアクセスが拒否され、セキュリティ例外が発生します。
実行コンテキストが Windows ログインに対応していると同時に、本来の呼び出し元である場合。 外部リソースは、SQL Server サービス アカウントのセキュリティ コンテキストでアクセスされます。
呼び出し元は元の呼び出し元ではありません。 アクセスが拒否され、セキュリティ例外が発生します。
実行コンテキストは Windows ログインに対応し、実行コンテキストは元の呼び出し元であり、呼び出し元は偽装されています。 Access では、呼び出し元のセキュリティ コンテキストが使用されます。サービス アカウントではありません。

アクセス許可セットの概要

次の表は、SAFEEXTERNAL_ACCESS、および UNSAFE アクセス許可セットに付与される制限とアクセス許可をまとめたものです。

SAFE EXTERNAL_ACCESS UNSAFE
Code Access Security Permissions 実行のみ 実行および外部リソースへのアクセス 無制限 (P/Invoke を含む)
Programming model restrictions イエス イエス 制限なし
Verifiability requirement イエス イエス いいえ
Local data access イエス イエス イエス
Ability to call native code いいえ いいえ イエス

こちらもご覧ください

CLR 統合のセキュリティ
ホスト保護属性と CLR 統合プログラミング
CLR 統合プログラミング モデルの制限事項
CLR ホスト環境