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

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

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

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

  • ユーザー ポリシー : 特定のプロセスをホストとするマネージド コードに対して効力を持つポリシーです。 SQL Serverサービスが実行されている場合。

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

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

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

SQL Server ホスト ポリシー レベルの権限セット

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

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

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

CLR アセンブリと SQL Server システム アセンブリ用の固定ポリシーは、アセンブリに完全な信頼を与えます。

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

SAFE

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

SAFE アセンブリには、次の権限および値が含まれます。

権限 値/説明
SecurityPermission Execution: マネージド コードを実行する権限です。
SqlClientPermission Context connection = truecontext connection = yes: context-connection のみを使用できます。接続文字列に指定できる値は、"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 が与えられます。

重要

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

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

UDT (ユーザー定義型)、ストアド プロシージャ、または他の種類のコンストラクト アセンブリを SAFE 権限セットで登録すると、コンストラクト内で実行しているマネージド コードから外部リソースにアクセスできなくなります。 ただし、 または UNSAFE アクセス許可セットがEXTERNAL_ACCESS指定されていて、マネージド コードが外部リソースへのアクセスを試みると、SQL Serverは次の規則を適用します。

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

権限セットの概要

次の表は、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 ホスト環境