Sql Server-programmeer- en hostbeveiligingskenmerken
De mogelijkheid om beheerde code in een SQL Server-host te laden en uit te voeren, moet voldoen aan de vereisten van de host voor zowel beveiliging van codetoegang als hostresourcebeveiliging. De beveiligingsvereisten voor codetoegang worden opgegeven door een van de drie SQL Server-machtigingensets: SAFE, EXTERNAL-ACCESS of ONVEILIG. Code die wordt uitgevoerd binnen de machtigingensetS SAFE of EXTERNAL-ACCESS, moet voorkomen dat bepaalde typen of leden het HostProtectionAttribute kenmerk hebben toegepast. Het HostProtectionAttribute is niet zozeer een beveiligingsmachtiging als een betrouwbaarheidsgarantie omdat hiermee specifieke codeconstructies, ofwel typen of methoden, worden geïdentificeerd die de host mogelijk niet toegeeft. Het gebruik van het HostProtectionAttribute dwingt een programmeermodel af waarmee de stabiliteit van de host wordt beschermd.
Notitie
Cas (Code Access Security) is afgeschaft in alle versies van .NET Framework en .NET. Recente versies van .NET respecteren geen CAS-aantekeningen en produceren fouten als CAS-gerelateerde API's worden gebruikt. Ontwikkelaars moeten alternatieve manieren zoeken om beveiligingstaken uit te voeren.
Kenmerken voor hostbeveiliging
Hostbeveiligingskenmerken identificeren typen of leden die niet passen bij het hostprogrammeermodel en vertegenwoordigen de volgende toenemende betrouwbaarheidsbedreigingen:
Zijn anders goedaardig.
Dit kan leiden tot een destabilisatie van door de server beheerde gebruikerscode.
Kan leiden tot een destabilisatie van het serverproces zelf.
SQL Server staat het gebruik van een type of lid dat een HostProtectionAttribute waarde van , Synchronization, of MayLeakOnAbortExternalProcessMgmt.SharedStateHostProtectionResource Hiermee voorkomt u dat de assembly's leden aanroepen die de status delen inschakelen, synchronisatie uitvoeren, een bronlek kunnen veroorzaken bij beëindiging of de integriteit van het SQL Server-proces beïnvloeden.
Niet-toegestane typen en leden
In de volgende tabel worden typen en leden geïdentificeerd waarvan HostProtectionResource de waarden niet zijn toegestaan door SQL Server.
SQL Server-machtigingensets
Met SQL Server kunnen gebruikers de betrouwbaarheidsvereisten opgeven voor code die in een database is geïmplementeerd. Wanneer assembly's worden geüpload naar de database, kan de auteur van de assembly een van de drie machtigingensets voor die assembly opgeven: SAFE, EXTERNAL-ACCESS of ONVEILIG.
Machtigingenset | SAFE | EXTERNE TOEGANG | ONVEILIGE |
---|---|---|---|
Beveiliging van codetoegang | Alleen uitvoeren | Uitvoeren en toegang tot externe resources | Onbeperkt |
Beperkingen voor programmeermodellen | Ja | Ja | Geen beperkingen |
Verifieerbaarheidsvereiste | Ja | Ja | Nr. |
Mogelijkheid om systeemeigen code aan te roepen | Nee | No | Ja |
SAFE is de meest betrouwbare en veilige modus met bijbehorende beperkingen in termen van het toegestane programmeermodel. SAFE-code heeft hoge betrouwbaarheid en beveiligingsfuncties. VEILIGE assembly's krijgen voldoende machtigingen om uit te voeren, berekeningen uit te voeren en toegang te hebben tot de lokale database. VEILIGE assembly's moeten verifieerbaar type veilig zijn en mogen niet onbeheerde code aanroepen.
EXTERNAL-ACCESS biedt een tussenliggende beveiligingsoptie, waardoor code toegang heeft tot resources buiten de database, maar nog steeds de betrouwbaarheid en veiligheid van SAFE heeft.
ONVEILIG is voor zeer vertrouwde code die alleen kan worden gemaakt door databasebeheerders. Deze vertrouwde code heeft geen toegangsbeperkingen voor code en kan onbeheerde (systeemeigen) code aanroepen.
SQL Server maakt gebruik van de beveiligingslaag voor codetoegang op hostniveau om een hostbeleid in te stellen dat een van de drie sets machtigingen verleent op basis van de machtigingenset die is opgeslagen in SQL Server-catalogi. Beheerde code die in de database wordt uitgevoerd, krijgt altijd een van deze machtigingensets voor codetoegang.
Beperkingen voor programmeermodellen
Voor het programmeermodel voor beheerde code in SQL Server zijn functies, procedures en typen vereist die het gebruik van de status niet vereisen voor meerdere aanroepen of het delen van de status voor meerdere gebruikerssessies. Zoals eerder beschreven, kan de aanwezigheid van de gedeelde status leiden tot kritieke uitzonderingen die van invloed zijn op de schaalbaarheid en de betrouwbaarheid van de toepassing.
Gezien deze overwegingen staat SQL Server het gebruik van statische variabelen en statische gegevensleden niet toe. Voor SAFE- en EXTERNAL ACCESS-assembly's onderzoekt SQL Server de metagegevens van de assembly op het moment VAN CREATE ASSEMBLY en mislukt het maken van dergelijke assembly's als het gebruik van statische gegevensleden en variabelen wordt gevonden.