CLR-integrering kodåtkomstsäkerhet
gäller för:SQL Server
Common Language Runtime (CLR) stöder en säkerhetsmodell som kallas kodåtkomstsäkerhet för hanterad kod. I den här modellen beviljas behörigheter till sammansättningar baserat på kodens identitet. Mer information finns i Code Access Security.
Den säkerhetsprincip som avgör vilka behörigheter som beviljas för sammansättningar definieras på tre olika platser:
Machine Policy: Den här principen gäller för all hanterad kod som körs på den dator där SQL Server är installerat.
Användarprincip: Den här principen gäller för hanterad kod som hanteras av en process. För SQL Server är användarprincipen specifik för det Windows-konto som SQL Server-tjänsten körs på.
Värdprincip: Den här principen konfigureras av värden för CLR (i det här fallet SQL Server) som gäller för hanterad kod som körs på den värden.
Säkerhetsmekanismen för kodåtkomst som stöds av CLR baseras på antagandet att körningen kan vara värd för både fullständigt betrodd och delvis betrodd kod. De resurser som skyddas av CLR-kodåtkomstsäkerhet omsluts vanligtvis av programmeringsgränssnitt för hanterade program som kräver motsvarande behörighet innan åtkomst till resursen tillåts. Kravet på behörigheten uppfylls endast om alla anropare (på sammansättningsnivå) i anropsstacken har motsvarande resursbehörighet.
Den uppsättning säkerhetsbehörigheter för kodåtkomst som beviljas till hanterad kod när de körs i SQL Server är skärningspunkten för den uppsättning behörigheter som beviljats av de föregående tre principnivåerna. Även om SQL Server ger en uppsättning behörigheter till en sammansättning som läses in i SQL Server kan den eventuella uppsättningen behörigheter som ges till användarkod begränsas ytterligare av användar- och datornivåprinciperna.
Behörighetsuppsättningar för SQL Server-värdprincipnivå
Den uppsättning säkerhetsbehörigheter för kodåtkomst som beviljas för sammansättningar av SQL Server-värdprincipnivån bestäms av den behörighetsuppsättning som angavs när sammansättningen skapades. Det finns tre behörighetsuppsättningar: SAFE
, EXTERNAL_ACCESS
och UNSAFE
(anges med alternativet PERMISSION_SET
CREATE ASSEMBLY).
SQL Server tillhandahåller en säkerhetsprincipnivå på värdnivå till CLR när du är värd för den. Den här principen är en extra principnivå under de två principnivåer som alltid gäller. Den här principen anges för varje programdomän som skapas av SQL Server. Den här principen är inte avsedd för den standardprogramdomän som skulle gälla när SQL Server skapar en instans av CLR.
SQL Server-principen på värdnivå är en kombination av en fast SQL Server-princip för systemsammansättningar och användardefinierade principer för användarsammansättningar.
Den fasta principen för CLR-sammansättningar och SQL Server-systemsammansättningar ger dem fullständigt förtroende.
Den användardefinierade delen av SQL Server-värdprincipen baseras på sammansättningsägaren som anger en av tre behörighets bucketar för varje sammansättning. Mer information om följande säkerhetsbehörigheter finns i .NET Framework SDK.
SÄKER
Endast intern beräkning och lokal dataåtkomst tillåts.
SAFE
är den mest restriktiva behörighetsuppsättningen. Kod som körs av en sammansättning med SAFE
behörigheter kan inte komma åt externa systemresurser som filer, nätverk, miljövariabler eller registret.
SAFE
sammansättningar har följande behörigheter och värden:
Tillåtelse | Värden/beskrivning |
---|---|
SecurityPermission |
Execution : Behörighet att köra hanterad kod. |
SqlClientPermission |
Context connection = true , context connection = yes : Endast kontextanslutningen kan användas och anslutningssträngen kan bara ange värdet context connection=true eller context connection=yes .AllowBlankPassword = false : Tomma lösenord tillåts inte. |
EXTERNAL_ACCESS
EXTERNAL_ACCESS
sammansättningar har samma behörigheter som SAFE
sammansättningar, med ytterligare möjlighet att komma åt externa systemresurser som filer, nätverk, miljövariabler och registret.
EXTERNAL_ACCESS
sammansättningar har också följande behörigheter och värden:
Tillåtelse | Värden/beskrivning |
---|---|
DistributedTransactionPermission |
Unrestricted : Distribuerade transaktioner tillåts. |
DNSPermission |
Unrestricted : Behörighet att begära information från domännamnsservrar. |
EnvironmentPermission |
Unrestricted : Fullständig åtkomst till system- och användarmiljövariabler tillåts. |
EventLogPermission |
Administer : Följande åtgärder tillåts: skapa en händelsekälla, läsa befintliga loggar, ta bort händelsekällor eller loggar, svara på poster, rensa en händelselogg, lyssna på händelser och få åtkomst till en samling med alla händelseloggar. |
FileIOPermission |
Unrestricted : Fullständig åtkomst till filer och mappar tillåts. |
KeyContainerPermission |
Unrestricted : Fullständig åtkomst till nyckelcontainrar tillåts. |
NetworkInformationPermission |
Access : Pingning tillåts. |
RegistryPermission |
Tillåter läsbehörighet för HKEY_CLASSES_ROOT , HKEY_LOCAL_MACHINE , HKEY_CURRENT_USER , HKEY_CURRENT_CONFIG och HKEY_USERS. |
SecurityPermission |
Assertion : Möjlighet att hävda att alla anropare av den här koden har den behörighet som behövs för åtgärden.ControlPrincipal : Möjlighet att ändra huvudobjektet.Execution : Behörighet att köra hanterad kod.SerializationFormatter : Möjlighet att tillhandahålla serialiseringstjänster. |
SmtpPermission |
Access : Utgående anslutningar till SMTP-värdport 25 tillåts. |
SocketPermission |
Connect : Utgående anslutningar (alla portar, alla protokoll) på en transportadress tillåts. |
SqlClientPermission |
Unrestricted : Fullständig åtkomst till datakällan tillåts. |
StorePermission |
Unrestricted : Fullständig åtkomst till X.509-certifikatarkiv tillåts. |
WebPermission |
Connect : Utgående anslutningar till webbresurser tillåts. |
OSÄKER
UNSAFE
tillåter obegränsad åtkomst till resurser, både inom och utanför SQL Server. Kod som körs inifrån en UNSAFE
sammansättning kan också anropa ohanterad kod.
UNSAFE
sammansättningar ges FullTrust
.
Rekommenderade behörighetsinställningar
SAFE
är den rekommenderade behörighetsinställningen för sammansättningar som utför beräknings- och datahanteringsuppgifter utan att komma åt resurser utanför SQL Server.
EXTERNAL_ACCESS
rekommenderas för sammansättningar som har åtkomst till resurser utanför SQL Server.
EXTERNAL_ACCESS
sammansättningar körs som standard som SQL Server-tjänstkonto. Det är möjligt att EXTERNAL_ACCESS
kod uttryckligen personifierar anroparens säkerhetskontext för Windows-autentisering. Eftersom standardvärdet är att köra som SQL Server-tjänstkonto bör behörighet att köra EXTERNAL_ACCESS
endast ges till inloggningar som är betrodda att köra som tjänstkonto.
Ur ett säkerhetsperspektiv är EXTERNAL_ACCESS
och UNSAFE
sammansättningar identiska. Men EXTERNAL_ACCESS
sammansättningar ger olika tillförlitlighets- och robusthetsskydd som inte finns i UNSAFE
sammansättningar.
Om du anger UNSAFE
kan koden i sammansättningen utföra olagliga åtgärder mot SQL Server-processutrymmet och kan därför potentiellt äventyra SQL Server:s robusthet och skalbarhet. Mer information om hur du skapar CLR-sammansättningar i SQL Server finns i Hantera CLR-integreringssammansättningar.
Viktig
SQL Server innehåller CLR-sammansättningar som databasmotorn använder för att tillhandahålla vissa funktioner. Den Microsoft.SQLServer.Types
sammansättning som ingår i SQL Server-installationen visas i metadata som en UNSAFE
sammansättning. Detta är avsiktligt. Dessa sammansättningar anses vara betrodda & säkra som standard.
Få åtkomst till externa resurser
Om en användardefinierad typ (UDT), lagrad procedur eller annan typ av konstruktionssammansättning har registrerats med SAFE
behörighetsuppsättning, kan inte den hanterade kod som körs i konstruktionen komma åt externa resurser. Men om behörighetsuppsättningarna EXTERNAL_ACCESS
eller UNSAFE
anges och hanterad kod försöker komma åt externa resurser tillämpar SQL Server följande regler:
Om | Då |
---|---|
Körningskontexten motsvarar en SQL Server-inloggning. | Försök att komma åt externa resurser nekas och ett säkerhetsfel genereras. |
Körningskontexten motsvarar en Windows-inloggning och körningskontexten är den ursprungliga anroparen. | Den externa resursen nås under säkerhetskontexten för SQL Server-tjänstkontot. |
Anroparen är inte den ursprungliga anroparen. | Åtkomst nekas och ett säkerhetsfel genereras. |
Körningskontexten motsvarar en Windows-inloggning och körningskontexten är den ursprungliga anroparen och anroparen personifieras. | Åtkomst använder anroparens säkerhetskontext och inte tjänstkontot. |
Sammanfattning av behörighetsuppsättning
I följande diagram sammanfattas de begränsningar och behörigheter som beviljats till behörighetsuppsättningarna SAFE
, EXTERNAL_ACCESS
och UNSAFE
.
Funktionalitet | SAFE |
EXTERNAL_ACCESS |
UNSAFE |
---|---|---|---|
Behörigheter för kodåtkomstsäkerhet | Kör endast | Kör + åtkomst till externa resurser | Obegränsad (inklusive P/Invoke) |
Begränsningar för programmeringsmodell | Ja | Ja | Inga begränsningar |
Verifierbarhetskrav | Ja | Ja | Nej |
Lokal dataåtkomst | Ja | Ja | Ja |
Möjlighet att anropa intern kod | Nej | Nej | Ja |