SQL Server Programlama ve Ana Bilgisayar Koruması Öznitelikleri

Sql Server konağından yönetilen kodu yükleyip yürütebilmek için hem kod erişim güvenliği hem de konak kaynak koruması için konağın gereksinimlerini karşılaması gerekir. Kod erişimi güvenlik gereksinimleri üç SQL Server izin kümesinden biri tarafından belirtilir: SAFE, EXTERNAL-ACCESS veya UNSAFE. SAFE veya EXTERNAL-ACCESS izin kümelerinde yürütülen kod, özniteliği uygulanmış olan belirli türlerden veya üyelerden HostProtectionAttribute kaçınmalıdır. HostProtectionAttribute, konağın izin verebileceği tür veya yöntemler gibi belirli kod yapılarını tanımlaması için güvenilirlik garantisi kadar bir güvenlik izni değildir. kullanımı HostProtectionAttribute , konağın kararlılığını korumaya yardımcı olan bir programlama modeli uygular.

Not

Kod Erişim Güvenliği (CAS), .NET Framework ve .NET'in tüm sürümlerinde kullanım dışı bırakılmıştır. .NET'in son sürümleri CAS ek açıklamalarını dikkate almaz ve CAS ile ilgili API'ler kullanılırsa hata üretir. Geliştiriciler, güvenlik görevlerini yerine getirmek için alternatif yöntemler aramalıdır.

Konak Koruma Öznitelikleri

Konak koruma öznitelikleri, konak programlama modeline uymayan türleri veya üyeleri tanımlar ve aşağıdaki artan güvenilirlik tehdidi düzeylerini temsil eder:

  • Aksi takdirde zararsızdır.

  • Sunucu tarafından yönetilen kullanıcı kodunun istikrarının bozulmasına neden olabilir.

  • Sunucu işleminin kendisinde istikrarsızlığa yol açabilir.

SQL Server, ExternalProcessMgmtSynchronizationMayLeakOnAbortveya değerini belirten bir HostProtectionAttribute türün veya üyenin kullanılmasına SharedStateizin vermemektedir.HostProtectionResource Bu, derlemelerin paylaşım durumunu etkinleştiren, eşitleme gerçekleştiren, sonlandırma sırasında kaynak sızıntısına neden olabilen veya SQL Server işleminin bütünlüğünü etkileyen üyeleri çağırmasını önler.

İzin Verilmeyen Türler ve Üyeler

Aşağıdaki tabloda, değerleriNE SQL Server tarafından izin verilmeyen türler ve üyeler HostProtectionResource tanımlanmıştır.

Ad Alanı Tür veya üye
Microsoft.Win32 PowerModeChangedEventArgs sınıfı

PowerModeChangedEventHandler Temsilci

SessionEndedEventArgs sınıfı

SessionEndedEventHandler Temsilci

SessionEndingEventArgs sınıfı

SessionEndingEventHandler Temsilci

SessionSwitchEventArgs sınıfı

SessionSwitchEventHandler Temsilci

SystemEvents sınıfı

TimerElapsedEventArgs sınıfı

TimerElapsedEventHandler Temsilci

UserPreferenceChangedEventArgs sınıfı

UserPreferenceChangingEventArgs sınıfı
System.Collections ArrayList.Synchronized Yöntem

Hashtable.Synchronized Yöntem

Queue.Synchronized Yöntem

SortedList.Synchronized Yöntem

Stack.Synchronized Yöntem
System.ComponentModel AddingNewEventArgs sınıfı

AddingNewEventHandler Temsilci

ArrayConverter sınıfı

AsyncCompletedEventArgs sınıfı

AsyncCompletedEventHandler Temsilci

AsyncOperation sınıfı

AsyncOperationManager sınıfı

AttributeCollection sınıfı

BackgroundWorker sınıfı

BaseNumberConverter sınıfı

BindingList<T> sınıfı

BooleanConverter sınıfı

ByteConverter sınıfı

CancelEventArgs sınıfı

CancelEventHandler Temsilci

CharConverter sınıfı

CollectionChangeEventArgs sınıfı

CollectionChangeEventHandler Temsilci

CollectionConverter sınıfı

ComponentCollection sınıfı

ComponentConverter sınıfı

ComponentEditor sınıfı

ComponentResourceManager sınıfı

Container sınıfı

ContainerFilterService sınıfı

CultureInfoConverter sınıfı

CustomTypeDescriptor sınıfı

DateTimeConverter sınıfı

DecimalConverter sınıfı

ActiveDesignerEventArgs sınıfı

ActiveDesignerEventHandler Temsilci

CheckoutException sınıfı

CommandID sınıfı

ComponentChangedEventArgs sınıfı

ComponentChangedEventHandler Temsilci

ComponentChangingEventArgs sınıfı

ComponentChangingEventHandler Temsilci

ComponentEventArgs sınıfı

ComponentEventHandler Temsilci

ComponentRenameEventArgs sınıfı

ComponentRenameEventHandler Temsilci

DesignerCollection sınıfı

DesignerEventArgs sınıfı

DesignerEventHandler Temsilci

DesignerOptionService sınıfı

DesignerTransaction sınıfı

DesignerTransactionCloseEventArgs sınıfı

DesignerTransactionCloseEventHandler Temsilci

DesignerVerb sınıfı

DesignerVerbCollection sınıfı

DesigntimeLicenseContext sınıfı

DesigntimeLicenseContextSerializer sınıfı

MenuCommand sınıfı

ComponentSerializationService sınıfı

ContextStack sınıfı

DesignerLoader sınıfı

InstanceDescriptor sınıfı

MemberRelationshipService sınıfı

ResolveNameEventArgs sınıfı

ResolveNameEventHandler Temsilci

SerializationStore sınıfı

ServiceContainer sınıfı

ServiceCreatorCallback Temsilci

StandardCommands sınıfı

StandardToolWindows sınıfı

DoubleConverter sınıfı

DoWorkEventArgs sınıfı

DoWorkEventHandler Temsilci

EnumConverter sınıfı

EventDescriptor sınıfı

EventDescriptorCollection sınıfı

EventHandlerList sınıfı

ExpandableObjectConverter sınıfı

HandledEventArgs sınıfı

HandledEventHandler Temsilci

InstanceCreationEditor sınıfı

Int16Converter sınıfı

Int32Converter sınıfı

Int64Converter sınıfı

InvalidAsynchronousStateException sınıfı

InvalidEnumArgumentException sınıfı

BeginInvoke Yöntem

License sınıfı

LicenseContext sınıfı

LicenseException sınıfı

LicenseManager sınıfı

LicenseProvider sınıfı

LicFileLicenseProvider sınıfı

ListChangedEventArgs sınıfı

ListChangedEventHandler Temsilci

ListSortDescription sınıfı

ListSortDescriptionCollection sınıfı

MaskedTextProvider sınıfı

MemberDescriptor sınıfı

MultilineStringConverter sınıfı

NestedContainer sınıfı

NullableConverter sınıfı

ProgressChangedEventArgs sınıfı

ProgressChangedEventHandler Temsilci

PropertyChangedEventArgs sınıfı

PropertyChangedEventHandler Temsilci

PropertyDescriptor sınıfı

PropertyDescriptorCollection sınıfı

ReferenceConverter sınıfı

RefreshEventArgs sınıfı

RefreshEventHandler Temsilci

RunWorkerCompletedEventArgs sınıfı

RunWorkerCompletedEventHandler Temsilci

SByteConverter sınıfı

SingleConverter sınıfı

StringConverter sınıfı

SyntaxCheck sınıfı

TimeSpanConverter sınıfı

TypeConverter sınıfı

TypeDescriptionProvider sınıfı

TypeDescriptor sınıfı

TypeListConverter sınıfı

UInt16Converter sınıfı

UInt32Converter sınıfı

UInt64Converter sınıfı

WarningException sınıfı

Win32Exception sınıfı
System.Diagnostics Debug.Listeners Özellik

Trace.Listeners Özellik

EventLog.SynchronizingObject Özellik

ConsoleTraceListener sınıfı

DefaultTraceListener sınıfı

DelimitedListTraceListener sınıfı

EventLogTraceListener sınıfı

PerformanceCounter sınıfı

PerformanceCounterCategory sınıfı

Process sınıfı

ProcessStartInfo sınıfı

TextWriterTraceListener sınıfı

TraceListener sınıfı

XmlWriterTraceListener sınıfı

TraceSource.Listeners Özellik
System.IO Stream.Synchronized Yöntem

TextReader.Synchronized Yöntem

TextWriter.Synchronized Yöntem
System.Reflection.Emit ConstructorBuilder sınıfı

EventBuilder sınıfı

FieldBuilder sınıfı

MethodBuilder sınıfı

CustomAttributeBuilder sınıfı

MethodRental sınıfı

ModuleBuilder sınıfı

PropertyBuilder sınıfı

TypeBuilder sınıfı

UnmanagedMarshal sınıfı
System.Text Group.Synchronized Yöntem

Match.Synchronized Yöntem
System.Threading AutoResetEvent sınıfı

EventWaitHandle sınıfı

ManualResetEvent sınıfı

Monitor sınıfı

Mutex sınıfı

ReaderWriterLock sınıfı

Semaphore sınıfı

Thread.AllocateNamedDataSlot Yöntem

Thread.BeginCriticalRegion Yöntem

Thread.EndCriticalRegion Yöntem

Thread.FreeNamedDataSlot Yöntem

Thread.GetData Yöntem

Thread.Join Yöntem

Thread.SetApartmentState Yöntem

Thread.SetData Yöntem

Thread.SpinWait Yöntem

Thread.Start Yöntem

Thread.TrySetApartmentState Yöntem

ThreadPool sınıfı

Timer sınıfı
System.Timers Timer sınıfı
System.Web.Configuration MachineKeyValidationConverter sınıfı
System.Windows.Forms AutoCompleteStringCollection.SyncRoot Özellik

SQL Server İzin Kümeleri

SQL Server, kullanıcıların veritabanına dağıtılan kod için güvenilirlik gereksinimlerini belirtmesine olanak tanır. Derlemeler veritabanına yüklendiğinde, derlemenin yazarı bu derleme için üç izin kümesinden birini belirtebilir: SAFE, EXTERNAL-ACCESS veya UNSAFE.

İzin kümesi GÜVENLİ EXTERNAL-ACCESS GÜVENLİ OLMAYAN
Kod erişimi güvenliği Yalnızca yürüt Dış kaynaklara + erişim yürütme Sınırsız
Programlama modeli kısıtlamaları Yes Yes Kısıtlama yok
Doğrulanabilirlik gereksinimi Yes Evet Hayır
Yerel kodu çağırabilme Hayır Hayı Evet

SAFE, izin verilen programlama modeli açısından ilişkili kısıtlamalara sahip en güvenilir ve güvenli moddur. SAFE kodu yüksek güvenilirlik ve güvenlik özelliklerine sahiptir. SAFE derlemelerine çalıştırmak, hesaplamalar gerçekleştirmek ve yerel veritabanına erişim sağlamak için yeterli izin verilir. SAFE derlemelerinin doğrulanabilir tür güvenli olması gerekir ve yönetilmeyen kodu çağırmasına izin verilmez.

EXTERNAL-ACCESS, kodun veritabanı dışındaki kaynaklara erişmesine izin veren ancak yine de SAFE güvenilirliğine ve güvenliğine sahip olan bir ara güvenlik seçeneği sağlar.

UNSAFE, yalnızca veritabanı yöneticileri tarafından oluşturulabilen son derece güvenilir koda yöneliktir. Bu güvenilen kodun kod erişimi kısıtlaması yoktur ve yönetilmeyen (yerel) kodu çağırabilir.

SQL Server, SQL Server kataloglarında depolanan izin kümesine göre üç izin kümesinden birini veren bir konak ilkesi ayarlamak için konak düzeyi kod erişim güvenlik ilkesi katmanını kullanır. Veritabanının içinde çalışan yönetilen kod her zaman bu kod erişim izin kümelerinden birini alır.

Programlama Modeli Kısıtlamaları

SQL Server'da yönetilen kod için programlama modeli, birden çok çağrıda tutulan durum kullanımını veya birden çok kullanıcı oturumu arasında durum paylaşımını gerektirmeyen işlevler, yordamlar ve türler gerektirir. Ayrıca, daha önce açıklandığı gibi, paylaşılan durumun varlığı, ölçeklenebilirliği ve uygulamanın güvenilirliğini etkileyen kritik özel durumlara neden olabilir.

Bu noktalar göz önünde bulundurulduğunda, SQL Server statik değişkenlerin ve statik veri üyelerinin kullanılmasına izin vermemektedir. SAFE ve EXTERNAL-ACCESS derlemeleri için SQL Server, CREATE ASSEMBLY zamanında derlemenin meta verilerini inceler ve statik veri üyeleri ile değişkenlerin kullanımını bulursa bu tür derlemelerin oluşturulmasında başarısız olur.

Ayrıca bkz.