Megosztás a következőn keresztül:


CLR integrációs kód hozzáférési biztonsága

Applies to:SQL Server

A közös nyelvi futtatókörnyezet (CLR) támogatja a felügyelt kód kódhozzáféréses biztonság nevű biztonsági modelljét. Ebben a modellben a kód identitása alapján kapnak engedélyeket a szerelvényekhez. További információ: Code Access Security.

A szerelvényekhez megadott engedélyeket meghatározó biztonsági szabályzat három különböző helyen van meghatározva:

  • Machine policy: This policy is in effect for all managed code running in the machine on which SQL Server is installed.

  • User policy: This policy is in effect for managed code hosted by a process. Az SQL Server esetében a felhasználói szabályzat arra a Windows-fiókra vonatkozik, amelyen az SQL Server szolgáltatás fut.

  • Host policy: This policy is set up by the host of the CLR (in this case, SQL Server) that is in effect for managed code running in that host.

A CLR által támogatott kódhozzáférési biztonsági mechanizmus azon a feltételezésen alapul, hogy a futtatókörnyezet teljes mértékben megbízható és részben megbízható kódot is képes üzemeltetni. A CLR-kódhozzáférés-biztonság által védett erőforrásokat általában felügyelt alkalmazásprogramozási felületek burkolják, amelyek a megfelelő engedélyt igénylik az erőforráshoz való hozzáférés engedélyezése előtt. Az engedély iránti igény csak akkor teljesül, ha a hívásverem összes hívója (a szerelvény szintjén) rendelkezik a megfelelő erőforrás-engedéllyel.

Az SQL Serveren belüli futtatáskor a felügyelt kódhoz megadott kódhozzáférés biztonsági engedélykészlete az előző három szabályzatszint által megadott engedélykészlet metszete. Még akkor is, ha az SQL Server engedélykészletet ad az SQL Serverbe betöltött szerelvénynek, a felhasználói kódhoz adott engedélyek végleges készletét tovább korlátozhatja a felhasználó- és gépszintű szabályzatok.

A kódhozzáférés biztonsága már nem támogatott

A CLR a .NET-keretrendszerben a Code Access Securityt (CAS) használja, amely már nem támogatott biztonsági határként. Előfordulhat, hogy egy PERMISSION_SET = SAFE létrehozott CLR-szerelvény hozzáférhet külső rendszererőforrásokhoz, meghívhatja a nem felügyelt kódot, és sysadmin-jogosultságokat szerezhet be. Az SQL Server 2017 (14.x) és újabb verzióiban a sp_configure lehetőség, clr szigorú biztonsági, növeli a CLR-szerelvények biztonságát. A clr strict security alapértelmezés szerint engedélyezve van, és úgy kezeli a SAFE és EXTERNAL_ACCESS szerelvényeket, mintha UNSAFEjelölték volna őket. A clr strict security lehetőség letiltható a visszamenőleges kompatibilitás érdekében, de nem ajánlott.

Javasoljuk, hogy az összes összetevőt egy tanúsítvánnyal vagy aszimmetrikus kulccsal írja alá, amelyhez tartozik egy megfelelő jogosultsággal rendelkező bejelentkezés, amely UNSAFE ASSEMBLY engedélyt kapott az master adatbázisban. Az SQL Server rendszergazdái könyvtárakat is hozzáadhatnak egy listához, amelyekben az adatbázismotornak meg kell bíznia. For more information, see sys.sp_add_trusted_assembly.

SQL Server gazdagépházirend-szintű engedélykészletek

Az SQL Server gazdagépházirend-szintje által a szerelvények számára megadott kódhozzáférési biztonsági engedélyek készletét a szerelvény létrehozásakor megadott engedélykészlet határozza meg. There are three permission sets: SAFE, EXTERNAL_ACCESS, and UNSAFE (specified using the PERMISSION_SET option of CREATE ASSEMBLY).

Az SQL Server gazdagépszintű biztonsági szabályzatszintet biztosít a CLR-nek, miközben üzemelteti azt. Ez a szabályzat egy további szabályzatszint a mindig érvényben lévő két szabályzatszint alatt. Ez a szabályzat minden, az SQL Server által létrehozott alkalmazástartományhoz be van állítva. Ez a szabályzat nem arra az alapértelmezett alkalmazástartományra szolgál, amely akkor lépne érvénybe, amikor az SQL Server létrehozza a CLR egy példányát.

Az SQL Server gazdagépszintű szabályzata az SQL Server rögzített szabályzatának kombinációja a rendszerszerelvényekhez és a felhasználó által megadott szabályzatokhoz a felhasználói szerelvényekhez.

A CLR-szerelvényekre és az SQL Server rendszerszerelvényekre vonatkozó rögzített szabályzat teljes megbízhatóságot biztosít számukra.

Az SQL Server gazdagépszabályzatának felhasználó által megadott része a szerelvény tulajdonosán alapul, amely az egyes szerelvényekhez három engedélygyűjtő egyikét adja meg. Az alábbi biztonsági engedélyekkel kapcsolatos további információkért tekintse meg a .NET Framework SDK-t.

SAFE

Csak belső számítás és helyi adathozzáférés engedélyezett. SAFE a legkorlátozóbb engedélykészlet. A SAFE engedélyekkel rendelkező szerelvény által végrehajtott kód nem fér hozzá külső rendszererőforrásokhoz, például fájlokhoz, a hálózathoz, a környezeti változókhoz vagy a beállításjegyzékhez.

SAFE szerelvények a következő engedélyekkel és értékekkel rendelkeznek:

Permission Értékek / Leírás
SecurityPermission Execution: Felügyelt kód végrehajtására vonatkozó engedély.
SqlClientPermission Context connection = true, context connection = yes: Csak a környezetkapcsolat használható, a kapcsolati sztring pedig csak context connection=true vagy context connection=yesértéket adhat meg.

AllowBlankPassword = false: Az üres jelszavak nem engedélyezettek.

EXTERNAL_ACCESS

EXTERNAL_ACCESS szerelvények ugyanazokkal az engedélyekkel rendelkeznek, mint SAFE szerelvények, és további hozzáféréssel rendelkeznek a külső rendszererőforrásokhoz, például fájlokhoz, hálózatokhoz, környezeti változókhoz és a beállításjegyzékhez.

EXTERNAL_ACCESS szerelvények az alábbi engedélyekkel és értékekkel is rendelkeznek:

Permission Értékek / Leírás
DistributedTransactionPermission Unrestricted: Az elosztott tranzakciók engedélyezettek.
DNSPermission Unrestricted: Engedély a tartománynév-kiszolgálóktól való információkérésre.
EnvironmentPermission Unrestricted: A rendszer- és felhasználói környezeti változók teljes hozzáférése engedélyezett.
EventLogPermission Administer: A következő műveletek engedélyezettek: eseményforrás létrehozása, meglévő naplók olvasása, eseményforrások vagy naplók törlése, bejegyzések megválaszolása, eseménynapló törlése, események figyelése és az összes eseménynapló gyűjteményének elérése.
FileIOPermission Unrestricted: A fájlokhoz és mappákhoz való teljes hozzáférés engedélyezett.
KeyContainerPermission Unrestricted: A kulcstárolókhoz való teljes hozzáférés engedélyezett.
NetworkInformationPermission Access: A pingelés engedélyezett.
RegistryPermission Olvasási jogosultságok HKEY_CLASSES_ROOT, HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER, HKEY_CURRENT_CONFIGés HKEY_USERS.
SecurityPermission Assertion: Annak biztosítása, hogy a kód összes hívója rendelkezik a művelethez szükséges engedéllyel.

ControlPrincipal: Az egyszerű objektum manipulálásának képessége.

Execution: Felügyelt kód végrehajtására vonatkozó engedély.

SerializationFormatter: Szerializálási szolgáltatások biztosítása.
SmtpPermission Access: A 25-ös SMTP-gazdagépport kimenő kapcsolatai engedélyezettek.
SocketPermission Connect: Egy átviteli cím kimenő kapcsolatai (minden port, protokoll) engedélyezettek.
SqlClientPermission Unrestricted: Az adatforrás teljes hozzáférése engedélyezett.
StorePermission Unrestricted: Az X.509-tanúsítványtárolók teljes hozzáférése engedélyezett.
WebPermission Connect: A webes erőforrások kimenő kapcsolatai engedélyezettek.

UNSAFE

UNSAFE lehetővé teszi, hogy a szerelvények korlátlan hozzáférést férjenek hozzá az erőforrásokhoz az SQL Serveren belül és kívül egyaránt. A UNSAFE szerelvényen belülről végrehajtó kód nem felügyelt kódot is meghívhat.

UNSAFE szerelvények FullTrustkapnak.

SAFE ajánlott engedélybeállítás olyan szerelvényekhez, amelyek számítási és adatkezelési feladatokat végeznek anélkül, hogy hozzáférnek az SQL Serveren kívüli erőforrásokhoz.

EXTERNAL_ACCESS az SQL Serveren kívüli erőforrásokat elérő szerelvényekhez ajánlott. EXTERNAL_ACCESS szerelvények alapértelmezés szerint SQL Server-szolgáltatásfiókként futnak. Lehetséges, hogy EXTERNAL_ACCESS kód explicit módon megszemélyesíti a hívó Windows-hitelesítés biztonsági környezetét. Mivel az alapértelmezett az SQL Server szolgáltatásfiókként történő végrehajtás, a EXTERNAL_ACCESS végrehajtásához csak a szolgáltatásfiókként való futtatáshoz megbízható bejelentkezésekhez kell engedélyt adni.

Biztonsági szempontból a EXTERNAL_ACCESS és UNSAFE szerelvények azonosak. A EXTERNAL_ACCESS szerelvények azonban különböző megbízhatósági és robusztussági védelmet nyújtanak, amelyek nem UNSAFE szerelvényekben.

A UNSAFE megadásával a kód a szerelvényben illegális műveleteket hajthat végre az SQL Server-folyamattéren, ami potenciálisan veszélyeztetheti az SQL Server robusztusságát és méretezhetőségét. További információ a CLR-szerelvények SQL Serverben való létrehozásáról: CLR-integrációs szerelvények kezelése.

Important

Az SQL Server olyan CLR-szerelvényeket tartalmaz, amelyeket az adatbázismotor bizonyos funkciók biztosításához használ. Az SQL Server telepítésében szereplő Microsoft.SQLServer.Types szerelvény UNSAFE szerelvényként jelenik meg a metaadatokban. Ez terv szerint történik. Ezek a szerelvények alapértelmezés szerint megbízhatónak & biztonságosnak minősülnek.

Külső erőforrások elérése

Ha egy felhasználó által definiált típus (UDT), tárolt eljárás vagy más típusú szerelvény regisztrálva van a SAFE engedélykészletben, akkor a szerkezetben végrehajtó felügyelt kód nem tud hozzáférni a külső erőforrásokhoz. Ha azonban meg van adva a EXTERNAL_ACCESS vagy UNSAFE engedélykészlet, és a felügyelt kód megpróbálja elérni a külső erőforrásokat, az SQL Server a következő szabályokat alkalmazza:

If Then
A végrehajtási környezet egy SQL Server-bejelentkezésnek felel meg. A rendszer megtagadja a külső erőforrások elérésére tett kísérleteket, és biztonsági kivételt hoz létre.
A végrehajtási környezet egy Windows-bejelentkezésnek felel meg, és a végrehajtási környezet az eredeti hívó. A külső erőforrás az SQL Server szolgáltatásfiókjának biztonsági környezetében érhető el.
Nem a hívó az eredeti hívó. A hozzáférés megtagadva, és biztonsági kivétel keletkezik.
A végrehajtási környezet egy Windows-bejelentkezésnek felel meg, a végrehajtási környezet pedig az eredeti hívó, a hívó pedig megszemélyesítve. Az Access a hívó biztonsági környezetét használja, nem a szolgáltatásfiókot.

Engedélykészlet összegzése

Az alábbi diagram a SAFE, EXTERNAL_ACCESSés UNSAFE engedélykészletek számára biztosított korlátozásokat és engedélyeket foglalja össze.

Functionality SAFE EXTERNAL_ACCESS UNSAFE
Kódhozzáférés biztonsági engedélyei Execute only Végrehajtás + hozzáférés külső erőforrásokhoz Korlátlan (beleértve a P/Invoket is)
Programozási modell korlátozásai Yes Yes No restrictions
Verifiability requirement Yes Yes No
Helyi adathozzáférés Yes Yes Yes
Natív kód meghívásának képessége No No Yes