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 つのアクセス許可セットSAFE
EXTERNAL_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 = true 、context 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_ROOT 、HKEY_LOCAL_MACHINE 、HKEY_CURRENT_USER 、HKEY_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 ログインに対応していて、実行コンテキストが本来の呼び出し元であり、呼び出し元の権限が借用されている場合。 | アクセスにはサービス アカウントではなく、呼び出し元のセキュリティ コンテキストが使用されます。 |
権限セットの概要
次の表は、SAFE
、EXTERNAL_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 ホスト環境