Delen via


CLR-integratiecodetoegangsbeveiliging

van toepassing op:SQL Server-

De Common Language Runtime (CLR) ondersteunt een beveiligingsmodel met de naam codetoegangsbeveiliging voor beheerde code. In dit model worden machtigingen verleend aan assembly's op basis van de identiteit van de code. Zie Code Access Securityvoor meer informatie.

Het beveiligingsbeleid dat bepaalt welke machtigingen aan assembly's worden verleend, wordt op drie verschillende plaatsen gedefinieerd:

  • machinebeleid: dit beleid is van kracht voor alle beheerde code die wordt uitgevoerd op de computer waarop SQL Server is geïnstalleerd.

  • gebruikersbeleid: dit beleid is van kracht voor beheerde code die wordt gehost door een proces. Voor SQL Server is het gebruikersbeleid specifiek voor het Windows-account waarop de SQL Server-service wordt uitgevoerd.

  • Hostbeleid: dit beleid wordt ingesteld door de host van de CLR (in dit geval SQL Server) die van kracht is voor beheerde code die op die host wordt uitgevoerd.

Het beveiligingsmechanisme voor codetoegang dat door de CLR wordt ondersteund, is gebaseerd op de veronderstelling dat de runtime zowel volledig vertrouwde als gedeeltelijk vertrouwde code kan hosten. De resources die worden beveiligd door clr-codetoegangsbeveiliging, worden doorgaans verpakt door beheerde toepassingsprogrammeringsinterfaces waarvoor de bijbehorende machtiging is vereist voordat toegang tot de resource wordt toegestaan. De vraag naar de machtiging wordt alleen voldaan als alle bellers (op assemblyniveau) in de aanroepstack de bijbehorende resourcemachtiging hebben.

De set beveiligingsmachtigingen voor codetoegang die worden verleend aan beheerde code bij uitvoering in SQL Server, is het snijpunt van de set machtigingen die zijn verleend door de vorige drie beleidsniveaus. Zelfs als SQL Server een set machtigingen verleent aan een assembly die in SQL Server is geladen, kan de uiteindelijke set machtigingen die aan gebruikerscode worden gegeven, verder worden beperkt door het beleid op gebruikers- en computerniveau.

Machtigingensets op hostbeleidsniveau van SQL Server

De set beveiligingsmachtigingen voor codetoegang die zijn verleend aan assembly's op het niveau van het SQL Server-hostbeleid, wordt bepaald door de machtigingenset die is opgegeven bij het maken van de assembly. Er zijn drie machtigingensets: SAFE, EXTERNAL_ACCESSen UNSAFE (opgegeven met de optie PERMISSION_SET van CREATE ASSEMBLY).

SQL Server levert een beveiligingsbeleidsniveau op hostniveau aan de CLR tijdens het hosten ervan. Dit beleid is een extra beleidsniveau onder de twee beleidsniveaus die altijd van kracht zijn. Dit beleid wordt ingesteld voor elk toepassingsdomein dat door SQL Server wordt gemaakt. Dit beleid is niet bedoeld voor het standaardtoepassingsdomein dat van kracht zou zijn wanneer SQL Server een exemplaar van de CLR maakt.

Het beleid op hostniveau van SQL Server is een combinatie van vast SQL Server-beleid voor systeemassembly's en door de gebruiker opgegeven beleid voor gebruikersassembly's.

Het vaste beleid voor CLR-assembly's en SQL Server-systeemassembly's verleent deze volledige vertrouwensrelatie.

Het door de gebruiker opgegeven gedeelte van het SQL Server-hostbeleid is gebaseerd op de assembly-eigenaar die een van de drie machtigingsbuckets voor elke assembly opgeeft. Zie de .NET Framework SDK voor meer informatie over de volgende beveiligingsmachtigingen.

VEILIG

Alleen interne berekeningen en lokale gegevenstoegang zijn toegestaan. SAFE is de meest beperkende machtigingenset. Code die wordt uitgevoerd door een assembly met SAFE machtigingen heeft geen toegang tot externe systeembronnen, zoals bestanden, het netwerk, omgevingsvariabelen of het register.

SAFE assembly's beschikken over de volgende machtigingen en waarden:

Toestemming Waarden/beschrijving
SecurityPermission Execution: machtiging voor het uitvoeren van beheerde code.
SqlClientPermission Context connection = true, context connection = yes: Alleen de contextverbinding kan worden gebruikt en de verbindingsreeks kan alleen een waarde van context connection=true of context connection=yesopgeven.

AllowBlankPassword = false: Lege wachtwoorden zijn niet toegestaan.

EXTERNAL_ACCESS

EXTERNAL_ACCESS assembly's dezelfde machtigingen hebben als SAFE assembly's, met de extra mogelijkheid om toegang te krijgen tot externe systeembronnen, zoals bestanden, netwerken, omgevingsvariabelen en het register.

EXTERNAL_ACCESS assembly's hebben ook de volgende machtigingen en waarden:

Toestemming Waarden/beschrijving
DistributedTransactionPermission Unrestricted: gedistribueerde transacties zijn toegestaan.
DNSPermission Unrestricted: machtiging voor het aanvragen van gegevens van Domain Name Servers.
EnvironmentPermission Unrestricted: Volledige toegang tot systeem- en gebruikersomgevingsvariabelen is toegestaan.
EventLogPermission Administer: De volgende acties zijn toegestaan: maak een gebeurtenisbron, lees bestaande logboeken, verwijder gebeurtenisbronnen of logboeken, reageer op vermeldingen, wis een gebeurtenislogboek, luister naar gebeurtenissen en open een verzameling van alle gebeurtenislogboeken.
FileIOPermission Unrestricted: volledige toegang tot bestanden en mappen is toegestaan.
KeyContainerPermission Unrestricted: Volledige toegang tot sleutelcontainers is toegestaan.
NetworkInformationPermission Access: Pinging is toegestaan.
RegistryPermission Hiermee staat u leesrechten toe aan HKEY_CLASSES_ROOT, HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIGen HKEY_USERS.
SecurityPermission Assertion: mogelijkheid om te bevestigen dat alle aanroepers van deze code over de vereiste machtiging voor de bewerking beschikken.

ControlPrincipal: mogelijkheid om het principal-object te bewerken.

Execution: machtiging voor het uitvoeren van beheerde code.

SerializationFormatter: mogelijkheid om serialisatieservices te bieden.
SmtpPermission Access: uitgaande verbindingen met SMTP-hostpoort 25 zijn toegestaan.
SocketPermission Connect: uitgaande verbindingen (alle poorten, alle protocollen) op een transportadres zijn toegestaan.
SqlClientPermission Unrestricted: volledige toegang tot de gegevensbron is toegestaan.
StorePermission Unrestricted: Volledige toegang tot X.509-certificaatarchieven is toegestaan.
WebPermission Connect: uitgaande verbindingen met webresources zijn toegestaan.

ONVEILIG

UNSAFE staat assembly's onbeperkte toegang tot resources toe, zowel binnen als buiten SQL Server. Code die vanuit een UNSAFE assembly wordt uitgevoerd, kan ook onbeheerde code aanroepen.

UNSAFE assembly's worden FullTrustgegeven.

SAFE is de aanbevolen machtigingsinstelling voor assembly's die reken- en gegevensbeheertaken uitvoeren zonder toegang te krijgen tot resources buiten SQL Server.

EXTERNAL_ACCESS wordt aanbevolen voor assembly's die toegang hebben tot resources buiten SQL Server. EXTERNAL_ACCESS assembly's standaard uitvoeren als het SQL Server-serviceaccount. Het is mogelijk dat EXTERNAL_ACCESS code expliciet de beveiligingscontext voor Windows-verificatie van de beller imiteert. Omdat de standaardinstelling is om uit te voeren als het SQL Server-serviceaccount, mag u alleen toestemming geven voor het uitvoeren van EXTERNAL_ACCESS worden verleend aan aanmeldingen die worden vertrouwd om te worden uitgevoerd als het serviceaccount.

Vanuit beveiligingsperspectief zijn EXTERNAL_ACCESS en UNSAFE assembly's identiek. EXTERNAL_ACCESS assembly's bieden echter verschillende betrouwbaarheids- en robuustheidsbeveiligingen die zich niet in UNSAFE assembly's.

Als u UNSAFE opgeeft, kan de code in de assembly illegale bewerkingen uitvoeren op de SQL Server-procesruimte, waardoor de robuustheid en schaalbaarheid van SQL Server mogelijk worden aangetast. Zie CLR-integratieassembly's beherenvoor meer informatie over het maken van CLR-assembly's in SQL Server.

Belangrijk

SQL Server bevat CLR-assembly's die door de database-engine worden gebruikt om bepaalde functionaliteit te bieden. De Microsoft.SQLServer.Types assembly die is opgenomen in sql Server-installatie, wordt weergegeven in de metagegevens als een UNSAFE assembly. Dit is standaard. Deze assembly's worden standaard beschouwd als vertrouwde & veilig.

Toegang tot externe resources

Als een door de gebruiker gedefinieerd type (UDT), opgeslagen procedure of een ander type constructassembly is geregistreerd bij de SAFE machtigingenset, heeft beheerde code die in de constructie wordt uitgevoerd, geen toegang tot externe resources. Als echter de EXTERNAL_ACCESS of UNSAFE machtigingensets zijn opgegeven en beheerde code toegang probeert te krijgen tot externe resources, past SQL Server de volgende regels toe:

Als Dan
De uitvoeringscontext komt overeen met een SQL Server-aanmelding. Pogingen om toegang te krijgen tot externe resources worden geweigerd en er wordt een beveiligingsonderzondering gegenereerd.
De uitvoeringscontext komt overeen met een Windows-aanmelding en de uitvoeringscontext is de oorspronkelijke aanroeper. De externe resource wordt geopend in de beveiligingscontext van het SQL Server-serviceaccount.
De beller is niet de oorspronkelijke beller. De toegang wordt geweigerd en er wordt een beveiligingsonderzondering gegenereerd.
De uitvoeringscontext komt overeen met een Windows-aanmelding en de uitvoeringscontext is de oorspronkelijke aanroeper en de beller wordt geïmiteerd. Access maakt gebruik van de beveiligingscontext van de beller en niet van het serviceaccount.

Samenvatting van machtigingenset

De volgende grafiek bevat een overzicht van de beperkingen en machtigingen die zijn verleend aan de SAFE, EXTERNAL_ACCESSen UNSAFE machtigingensets.

Functionaliteit SAFE EXTERNAL_ACCESS UNSAFE
Machtigingen voor beveiliging van codetoegang Alleen uitvoeren Uitvoeren en toegang tot externe resources Onbeperkt (inclusief P/Invoke)
Beperkingen voor programmeermodellen Ja Ja Geen beperkingen
Verifieerbaarheidsvereiste Ja Ja Nee
Toegang tot lokale gegevens Ja Ja Ja
Mogelijkheid om systeemeigen code aan te roepen Nee Nee Ja