次の方法で共有


SQL Server プログラミング属性とホスト保護属性

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 は、SharedStateSynchronizationMayLeakOnAbort、またはExternalProcessMgmtHostProtectionResource値を指定するHostProtectionAttributeを持つ型またはメンバーの使用を禁止します。 これにより、共有状態を有効にし、同期を実行し、終了時にリソースを漏洩する可能性があり、SQL Server プロセスの整合性に影響を与えるメンバーの呼び出しをアセンブリに禁止します。

許可されていない型とメンバー

次の表は、SQL Server によって HostProtectionResource 値が許可されていない型とメンバーを示しています。

Namespace 型またはメンバー
Microsoft.Win32 PowerModeChangedEventArgs クラス

PowerModeChangedEventHandler 代表

SessionEndedEventArgs クラス

SessionEndedEventHandler 代表

SessionEndingEventArgs クラス

SessionEndingEventHandler 代表

SessionSwitchEventArgs クラス

SessionSwitchEventHandler 代表

SystemEvents クラス

TimerElapsedEventArgs クラス

TimerElapsedEventHandler 代表

UserPreferenceChangedEventArgs クラス

UserPreferenceChangingEventArgs クラス
System.Collections ArrayList.Synchronized メソッド

Hashtable.Synchronized メソッド

Queue.Synchronized メソッド

SortedList.Synchronized メソッド

Stack.Synchronized メソッド
System.ComponentModel AddingNewEventArgs クラス

AddingNewEventHandler 代表

ArrayConverter クラス

AsyncCompletedEventArgs クラス

AsyncCompletedEventHandler 代表

AsyncOperation クラス

AsyncOperationManager クラス

AttributeCollection クラス

BackgroundWorker クラス

BaseNumberConverter クラス

BindingList<T> クラス

BooleanConverter クラス

ByteConverter クラス

CancelEventArgs クラス

CancelEventHandler 代表

CharConverter クラス

CollectionChangeEventArgs クラス

CollectionChangeEventHandler 代表

CollectionConverter クラス

ComponentCollection クラス

ComponentConverter クラス

ComponentEditor クラス

ComponentResourceManager クラス

Container クラス

ContainerFilterService クラス

CultureInfoConverter クラス

CustomTypeDescriptor クラス

DateTimeConverter クラス

DecimalConverter クラス

ActiveDesignerEventArgs クラス

ActiveDesignerEventHandler 代表

CheckoutException クラス

CommandID クラス

ComponentChangedEventArgs クラス

ComponentChangedEventHandler 代表

ComponentChangingEventArgs クラス

ComponentChangingEventHandler 代表

ComponentEventArgs クラス

ComponentEventHandler 代表

ComponentRenameEventArgs クラス

ComponentRenameEventHandler 代表

DesignerCollection クラス

DesignerEventArgs クラス

DesignerEventHandler 代表

DesignerOptionService クラス

DesignerTransaction クラス

DesignerTransactionCloseEventArgs クラス

DesignerTransactionCloseEventHandler 代表

DesignerVerb クラス

DesignerVerbCollection クラス

DesigntimeLicenseContext クラス

DesigntimeLicenseContextSerializer クラス

MenuCommand クラス

ComponentSerializationService クラス

ContextStack クラス

DesignerLoader クラス

InstanceDescriptor クラス

MemberRelationshipService クラス

ResolveNameEventArgs クラス

ResolveNameEventHandler 代表

SerializationStore クラス

ServiceContainer クラス

ServiceCreatorCallback 代表

StandardCommands クラス

StandardToolWindows クラス

DoubleConverter クラス

DoWorkEventArgs クラス

DoWorkEventHandler 代表

EnumConverter クラス

EventDescriptor クラス

EventDescriptorCollection クラス

EventHandlerList クラス

ExpandableObjectConverter クラス

HandledEventArgs クラス

HandledEventHandler 代表

InstanceCreationEditor クラス

Int16Converter クラス

Int32Converter クラス

Int64Converter クラス

InvalidAsynchronousStateException クラス

InvalidEnumArgumentException クラス

BeginInvoke メソッド

License クラス

LicenseContext クラス

LicenseException クラス

LicenseManager クラス

LicenseProvider クラス

LicFileLicenseProvider クラス

ListChangedEventArgs クラス

ListChangedEventHandler 代表

ListSortDescription クラス

ListSortDescriptionCollection クラス

MaskedTextProvider クラス

MemberDescriptor クラス

MultilineStringConverter クラス

NestedContainer クラス

NullableConverter クラス

ProgressChangedEventArgs クラス

ProgressChangedEventHandler 代表

PropertyChangedEventArgs クラス

PropertyChangedEventHandler 代表

PropertyDescriptor クラス

PropertyDescriptorCollection クラス

ReferenceConverter クラス

RefreshEventArgs クラス

RefreshEventHandler 代表

RunWorkerCompletedEventArgs クラス

RunWorkerCompletedEventHandler 代表

SByteConverter クラス

SingleConverter クラス

StringConverter クラス

SyntaxCheck クラス

TimeSpanConverter クラス

TypeConverter クラス

TypeDescriptionProvider クラス

TypeDescriptor クラス

TypeListConverter クラス

UInt16Converter クラス

UInt32Converter クラス

UInt64Converter クラス

WarningException クラス

Win32Exception クラス
System.Diagnostics Debug.Listeners プロパティ

Trace.Listeners プロパティ

EventLog.SynchronizingObject プロパティ

ConsoleTraceListener クラス

DefaultTraceListener クラス

DelimitedListTraceListener クラス

EventLogTraceListener クラス

PerformanceCounter クラス

PerformanceCounterCategory クラス

Process クラス

ProcessStartInfo クラス

TextWriterTraceListener クラス

TraceListener クラス

XmlWriterTraceListener クラス

TraceSource.Listeners プロパティ
System.IO Stream.Synchronized メソッド

TextReader.Synchronized メソッド

TextWriter.Synchronized メソッド
System.Reflection.Emit ConstructorBuilder クラス

EventBuilder クラス

FieldBuilder クラス

MethodBuilder クラス

CustomAttributeBuilder クラス

MethodRental クラス

ModuleBuilder クラス

PropertyBuilder クラス

TypeBuilder クラス

UnmanagedMarshal クラス
System.Text Group.Synchronized メソッド

Match.Synchronized メソッド
System.Threading AutoResetEvent クラス

EventWaitHandle クラス

ManualResetEvent クラス

Monitor クラス

Mutex クラス

ReaderWriterLock クラス

Semaphore クラス

Thread.AllocateNamedDataSlot メソッド

Thread.BeginCriticalRegion メソッド

Thread.EndCriticalRegion メソッド

Thread.FreeNamedDataSlot メソッド

Thread.GetData メソッド

Thread.Join メソッド

Thread.SetApartmentState メソッド

Thread.SetData メソッド

Thread.SpinWait メソッド

Thread.Start メソッド

Thread.TrySetApartmentState メソッド

ThreadPool クラス

Timer クラス
System.Timers Timer クラス
System.Web.Configuration MachineKeyValidationConverter クラス
System.Windows.Forms AutoCompleteStringCollection.SyncRoot プロパティ

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 時にアセンブリのメタデータを調べ、静的データ メンバーと変数の使用が見つかると、そのようなアセンブリの作成に失敗します。

こちらも参照ください