Partager via


Attributs de programmation et de protection des hôtes SQL Server

Mise à jour : novembre 2007

Pour charger et exécuter du code managé dans un hôte SQL Server, les exigences de l'hôte en termes de sécurité d'accès du code et de protection de ses ressources doivent être satisfaites. Les exigences en matière de sécurité d'accès du code sont spécifiées par l'un de trois jeux d'autorisations SQL Server : SAFE, EXTERNAL-ACCESS ou UNSAFE. Le code exécuté dans les jeux d'autorisations SAFE ou EXTERNAL-ACCESS doit éviter certains types ou membres dont l'attribut HostProtectionAttribute est appliqué. HostProtectionAttribute n'est pas tant une autorisation de sécurité qu'une garantie de fiabilité en cela qu'il identifie des constructions de code spécifiques, à savoir des types ou des méthodes, que l'hôte peut rejeter. L'utilisation de HostProtectionAttribute applique un modèle de programmation qui contribue à protéger la stabilité de l'hôte.

Attributs de protection de l'hôte

Les attributs de protection de l'hôte identifient des types ou des membres qui ne sont pas adaptés au modèle de programmation hôte et représentent les niveaux croissants suivants de menace en termes de fiabilité :

  • Sans gravité par ailleurs.

  • Susceptible de déstabiliser le code utilisateur géré par le serveur.

  • Susceptible de déstabiliser le processus serveur lui-même.

SQL Server rejette l'utilisation d'un type ou d'un membre qui a un HostProtectionAttribute qui spécifie une valeur HostProtectionResource de SharedState, Synchronization, MayLeakOnAbort ou ExternalProcessMgmt. Cela empêche les assemblys d'appeler des membres qui activent l'état de partage, exécutent la synchronisation, peuvent entraîner une fuite de ressources ou affectent l'intégrité du processus SQL Server.

Types et membres rejetés

Le tableau suivant identifie les types et les membres dont les valeurs HostProtectionResource sont rejetées par SQL Server.

Espace de noms

Type ou membre

Microsoft.Win32

Classe PowerModeChangedEventArgs

Délégué PowerModeChangedEventHandler

Classe SessionEndedEventArgs

Délégué SessionEndedEventHandler

Classe SessionEndingEventArgs

Délégué SessionEndingEventHandler

Classe SessionSwitchEventArgs

Délégué SessionSwitchEventHandler

Classe SystemEvents

Classe TimerElapsedEventArgs

Délégué TimerElapsedEventHandler

Classe UserPreferenceChangedEventArgs

Classe UserPreferenceChangingEventArgs

System.Collections

Méthode ArrayList.Synchronized

Méthode Hashtable.Synchronized

Méthode Queue.Synchronized

Méthode SortedList.Synchronized

Méthode Stack.Synchronized

System.ComponentModel

Classe AddingNewEventArgs

Délégué AddingNewEventHandler

Classe ArrayConverter

Classe AsyncCompletedEventArgs

Délégué AsyncCompletedEventHandler

Classe AsyncOperation

Classe AsyncOperationManager

Classe AttributeCollection

Classe BackgroundWorker

Classe BaseNumberConverter

Classe BindingList<T>

Classe BooleanConverter

Classe ByteConverter

Classe CancelEventArgs

Délégué CancelEventHandler

Classe CharConverter

Classe CollectionChangeEventArgs

Délégué CollectionChangeEventHandler

Classe CollectionConverter

Classe ComponentCollection

Classe ComponentConverter

Classe ComponentEditor

Classe ComponentResourceManager

Classe Container

Classe ContainerFilterService

Classe CultureInfoConverter

Classe CustomTypeDescriptor

Classe DateTimeConverter

Classe DecimalConverter

Classe ActiveDesignerEventArgs

Délégué ActiveDesignerEventHandler

Classe CheckoutException

Classe CommandID

Classe ComponentChangedEventArgs

Délégué ComponentChangedEventHandler

Classe ComponentChangingEventArgs

Délégué ComponentChangingEventHandler

Classe ComponentEventArgs

Délégué ComponentEventHandler

Classe ComponentRenameEventArgs

Délégué ComponentRenameEventHandler

Classe DesignerCollection

Classe DesignerEventArgs

Délégué DesignerEventHandler

Classe DesignerOptionService

Classe DesignerTransaction

Classe DesignerTransactionCloseEventArgs

Délégué DesignerTransactionCloseEventHandler

Classe DesignerVerb

Classe DesignerVerbCollection

Classe DesigntimeLicenseContext

Classe DesigntimeLicenseContextSerializer

Classe MenuCommand

Classe ComponentSerializationService

Classe ContextStack

Classe DesignerLoader

Classe InstanceDescriptor

Classe MemberRelationshipService

Classe ResolveNameEventArgs

Délégué ResolveNameEventHandler

Classe SerializationStore

Classe ServiceContainer

Délégué ServiceCreatorCallback

Classe StandardCommands

Classe StandardToolWindows

Classe DoubleConverter

Classe DoWorkEventArgs

Délégué DoWorkEventHandler

Classe EnumConverter

Classe EventDescriptor

Classe EventDescriptorCollection

Classe EventHandlerList

Classe ExpandableObjectConverter

Classe HandledEventArgs

Délégué HandledEventHandler

Classe InstanceCreationEditor

Classe Int16Converter

Classe Int32Converter

Classe Int64Converter

Classe InvalidAsynchronousStateException

Classe InvalidEnumArgumentException

Méthode BeginInvoke

Classe License

Classe LicenseContext

Classe LicenseException

Classe LicenseManager

Classe LicenseProvider

Classe LicFileLicenseProvider

Classe ListChangedEventArgs

Délégué ListChangedEventHandler

Classe ListSortDescription

Classe ListSortDescriptionCollection

Classe MaskedTextProvider

Classe MemberDescriptor

Classe MultilineStringConverter

Classe NestedContainer

Classe NullableConverter

Classe ProgressChangedEventArgs

Délégué ProgressChangedEventHandler

Classe PropertyChangedEventArgs

Délégué PropertyChangedEventHandler

Classe PropertyDescriptor

Classe PropertyDescriptorCollection

Classe ReferenceConverter

Classe RefreshEventArgs

Délégué RefreshEventHandler

Classe RunWorkerCompletedEventArgs

Délégué RunWorkerCompletedEventHandler

Classe SByteConverter

Classe SingleConverter

Classe StringConverter

Classe SyntaxCheck

Classe TimeSpanConverter

Classe TypeConverter

Classe TypeDescriptionProvider

Classe TypeDescriptor

Classe TypeListConverter

Classe UInt16Converter

Classe UInt32Converter

Classe UInt64Converter

Classe WarningException

Classe Win32Exception

System.Diagnostics

Propriété Debug.Listeners

Propriété Trace.Listeners

Propriété EventLog.SynchronizingObject

Classe ConsoleTraceListener

Classe DefaultTraceListener

Classe DelimitedListTraceListener

Classe EventLogTraceListener

Classe PerformanceCounter

Classe PerformanceCounterCategory

Classe Process

Classe ProcessStartInfo

Classe TextWriterTraceListener

Classe TraceListener

Classe XmlWriterTraceListener

Propriété TraceSource.Listeners

System.IO

Méthode Stream.Synchronized

Méthode TextReader.Synchronized

Méthode TextWriter.Synchronized

System.Reflection.Emit

Classe ConstructorBuilder

Classe EventBuilder

Classe FieldBuilder

Classe MethodBuilder

Classe CustomAttributeBuilder

Classe MethodRental

Classe ModuleBuilder

Classe PropertyBuilder

Classe TypeBuilder

Classe UnmanagedMarshal

System.Text

Méthode Group.Synchronized

Méthode Match.Synchronized

System.Threading

Classe AutoResetEvent

Classe EventWaitHandle

Classe ManualResetEvent

Classe Monitor

Classe Mutex

Classe ReaderWriterLock

Classe Semaphore

Méthode Thread.AllocateNamedDataSlot

Méthode Thread.BeginCriticalRegion

Méthode Thread.EndCriticalRegion

Méthode Thread.FreeNamedDataSlot

Méthode Thread.GetData

Méthode Thread.Join

Méthode Thread.SetApartmentState

Méthode Thread.SetData

Méthode Thread.SpinWait

Méthode Thread.Start

Méthode Thread.TrySetApartmentState

Classe ThreadPool

Classe Timer

System.Timers

Classe Timer

System.Web.Configuration

Classe MachineKeyValidationConverter

System.Windows.Forms

Propriété AutoCompleteStringCollection.SyncRoot

Jeux d'autorisations SQL Server

SQL Server permet aux utilisateurs de spécifier les exigences de fiabilité du code déployé dans une base de données. Lorsque les assemblys sont téléchargés dans la base de données, l'auteur de l'assembly peut spécifier l'un de trois jeux d'autorisations suivants pour cet assembly : SAFE, EXTERNAL-ACCESS ou UNSAFE.

Jeu d'autorisations

SAFE

EXTERNAL-ACCESS

UNSAFE

Sécurité d'accès du code

Exécuter uniquement

Exécuter + accès aux ressources externes

Intégral

Restrictions du modèle de programmation

Oui

Oui

Aucune restriction

Vérifiabilité requise

Oui

Oui

Non

Possibilité d'appeler du code natif

Non

Non

Oui

SAFE est le mode le plus fiable et sécurisé avec des restrictions associées quant au modèle de programmation autorisé. Le code SAFE possède des fonctionnalités de fiabilité et de sécurité élevées. Les assemblys SAFE bénéficient d'autorisations suffisantes pour s'exécuter, effectuer des calculs et avoir accès à la base de données locale. Les assemblys SAFE doivent être de type sécurisé vérifié et ne sont pas autorisés à appeler du code non managé.

EXTERNAL-ACCESS fournit une option de sécurité intermédiaire. Il permet au code d'accéder à des ressources externes à la base de données, mais possède néanmoins la fiabilité et la sécurité de SAFE.

UNSAFE est réservé à du code de confiance élevée qui peut être créé uniquement par les administrateurs de base de données. Ce code de confiance n'a pas de restrictions d'accès du code et peut appeler du code non managé (natif).

SQL Server utilise la couche de stratégie de sécurité d'accès du code de niveau hôte pour définir une stratégie hôte qui accorde l'un des trois jeux d'autorisations en fonction du jeu d'autorisations stocké dans les catalogues SQL Server. Le code managé exécuté à l'intérieur de la base de données obtient toujours l'un de ces jeux d'autorisations d'accès du code.

Restrictions du modèle de programmation

Le modèle de programmation du code managé dans SQL Server exige des fonctions, des procédures et des types qui ne nécessitent pas l'utilisation d'un état maintenu d'un appel à un autre ou le partage de l'état sur plusieurs sessions utilisateur. Par ailleurs, comme décrit précédemment, la présence d'un état partagé peut provoquer des exceptions critiques qui affectent l'évolutivité et la fiabilité de l'application.

Compte tenu de ces considérations, SQL Server rejette l'utilisation de variables statiques et de membres de données statiques. Pour les assemblys SAFE et EXTERNAL-ACCESS, SQL Server examine les métadonnées de l'assembly au moment de la création de l'assembly et échoue dans la création de tels assemblys s'il détecte l'utilisation de membres de données et des variables statiques.

Voir aussi

Référence

HostProtectionAttribute

HostProtectionResource