共通言語ランタイム (CLR) では、マネージド コードに対してコード アクセス セキュリティというセキュリティ モデルがサポートされます。 このモデルでは、コードの ID に基づいてアセンブリに権限が許可されます。 詳細については、.NET Framework ソフトウェア開発キットの「コード アクセス セキュリティ」セクションを参照してください。
アセンブリに許可される権限を決定するセキュリティ ポリシーは、次の 3 つに分類されます。
マシン ポリシー: これは、SQL Server がインストールされているマシンで実行されているすべてのマネージド コードに対して有効なポリシーです。
ユーザー ポリシー: これは、プロセスによってホストされるマネージド コードに対して有効なポリシーです。 SQL Server サービスが実行されています。
ホスト ポリシー: これは、そのホストで実行されているマネージド コードに対して有効な CLR (この場合は SQL Server) のホストによって設定されるポリシーです。
CLR でサポートされるコード アクセス セキュリティ メカニズムは、ランタイムが完全に信頼されるコードと部分的に信頼されるコードの両方をホストできるという前提に基づいています。 CLR コード アクセス セキュリティによって保護されるリソースは、通常、リソースへのアクセスを許可する前に対応するアクセス許可を必要とするマネージド アプリケーション プログラミング インターフェイスによってラップされます。 アクセス許可の要求が満たされるのは、呼び出し履歴内のすべての呼び出し元 (アセンブリ レベル) に対応するリソース アクセス許可がある場合のみです。
SQL Server 内で実行するときにマネージド コードに付与されるコード アクセス セキュリティアクセス許可のセットは、SQL Server に読み込まれたアセンブリに一連のアクセス許可を付与します。ユーザー コードに与えられるアクセス許可の最終的なセットは、ユーザーレベルおよびマシンレベルのポリシーによってさらに制限される可能性があります。
SQL Server ホスト ポリシー レベルのアクセス許可セット
SQL Server ホスト ポリシー レベルによってアセンブリに付与されるコード アクセス セキュリティアクセス許可のセットは、アセンブリの作成時に指定されたアクセス許可セットによって決まります。 アクセス許可セットには、SAFE
、EXTERNAL_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 = true 、 context 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_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
与えられる。
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 では、呼び出し元のセキュリティ コンテキストが使用されます。サービス アカウントではありません。 |
アクセス許可セットの概要
次の表は、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 ホスト環境