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_ACCESS
en 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=yes opgeven.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_CONFIG en 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 FullTrust
gegeven.
Aanbevolen machtigingsinstellingen
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_ACCESS
en 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 |