SQL Server-programmerings- och värdskyddsattribut
Möjligheten att läsa in och köra hanterad kod i en SQL Server-värd kräver att värdens krav för både kodåtkomstsäkerhet och värdresursskydd uppfylls. Säkerhetskraven för kodåtkomst anges av en av tre SQL Server-behörighetsuppsättningar: SAFE, EXTERNAL-ACCESS eller UNSAFE. Kod som körs i behörighetsuppsättningarna SAFE eller EXTERNAL-ACCESS måste undvika vissa typer eller medlemmar som har HostProtectionAttribute attributet tillämpat. HostProtectionAttribute är inte en säkerhetsbehörighet så mycket som en tillförlitlighetsgaranti eftersom den identifierar specifika kodkonstruktioner, antingen typer eller metoder, som värden kan neka. Användningen av HostProtectionAttribute den framtvingar en programmeringsmodell som hjälper till att skydda värdens stabilitet.
Kommentar
Code Access Security (CAS) har föråldrats i alla versioner av .NET Framework och .NET. De senaste versionerna av .NET följer inte CAS-anteckningar och skapar fel om CAS-relaterade API:er används. Utvecklare bör söka alternativa sätt att utföra säkerhetsuppgifter.
Värdskyddsattribut
Värdskyddsattribut identifierar typer eller medlemmar som inte passar värdprogrammeringsmodellen och representerar följande ökande nivåer av tillförlitlighetshot:
Är annars godartade.
Kan leda till destabilisering av serverhanterad användarkod.
Kan leda till destabilisering av själva serverprocessen.
SQL Server tillåter inte användning av en typ eller medlem som har en HostProtectionAttribute som anger HostProtectionResource värdet SharedState, Synchronization, MayLeakOnAborteller ExternalProcessMgmt. Detta förhindrar att sammansättningarna anropar medlemmar som aktiverar delningstillstånd, utför synkronisering, kan orsaka en resursläcka vid avslutning eller påverka integriteten i SQL Server-processen.
Otillåtna typer och medlemmar
I följande tabell identifieras typer och medlemmar vars värden inte tillåts HostProtectionResource av SQL Server.
SQL Server-behörighetsuppsättningar
MED SQL Server kan användarna ange tillförlitlighetskraven för kod som distribueras till en databas. När sammansättningar laddas upp till databasen kan författaren till sammansättningen ange en av tre behörighetsuppsättningar för den sammansättningen: SAFE, EXTERNAL-ACCESS eller UNSAFE.
Behörighetsuppsättning | SÄKER | EXTERN ÅTKOMST | OSÄKRA |
---|---|---|---|
Kodåtkomstsäkerhet | Kör endast | Kör + åtkomst till externa resurser | Obegränsat |
Begränsningar för programmeringsmodell | Ja | Ja | Inga begränsningar |
Verifierbarhetskrav | Ja | Ja | Nej |
Möjlighet att anropa intern kod | Nej | No | Ja |
SAFE är det mest tillförlitliga och säkra läget med tillhörande begränsningar när det gäller den tillåtna programmeringsmodellen. SAFE-kod har hög tillförlitlighet och säkerhetsfunktioner. SAFE-sammansättningar har tillräcklig behörighet för att köra, utföra beräkningar och ha åtkomst till den lokala databasen. SAFE-sammansättningar måste vara verifierbart typsäkra och får inte anropa ohanterad kod.
EXTERN ÅTKOMST ger ett mellanliggande säkerhetsalternativ som ger kod åtkomst till resurser utanför databasen men som fortfarande har tillförlitligheten och säkerheten för SAFE.
UNSAFE är för mycket betrodd kod som bara kan skapas av databasadministratörer. Den här betrodda koden har inga begränsningar för kodåtkomst och kan anropa ohanterad (intern) kod.
SQL Server använder säkerhetsprinciplagret för kodåtkomst på värdnivå för att konfigurera en värdprincip som ger en av de tre uppsättningarna behörigheter baserat på behörighetsuppsättningen som lagras i SQL Server-kataloger. Hanterad kod som körs i databasen hämtar alltid en av dessa kodåtkomstbehörighetsuppsättningar.
Begränsningar för programmeringsmodell
Programmeringsmodellen för hanterad kod i SQL Server kräver funktioner, procedurer och typer som inte kräver användning av tillstånd för flera anrop eller delning av tillstånd över flera användarsessioner. Som tidigare beskrivits kan förekomsten av delat tillstånd orsaka kritiska undantag som påverkar programmets skalbarhet och tillförlitlighet.
Med tanke på dessa överväganden tillåter SQL Server inte användning av statiska variabler och statiska datamedlemmar. För SAFE- och EXTERNAL-ACCESS-sammansättningar undersöker SQL Server metadata för sammansättningen vid CREATE ASSEMBLY-tiden och misslyckas med att skapa sådana sammansättningar om den hittar användningen av statiska datamedlemmar och variabler.