Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Felügyelt Azure SQL-példány
A közös nyelvi futtatókörnyezet (CLR) a .NET-keretrendszer központja, és az összes .NET-keretrendszerkód végrehajtási környezetét biztosítja. A CLR-ben futó kódot felügyelt kódnak nevezzük. A CLR különböző funkciókat és szolgáltatásokat biztosít a program végrehajtásához, beleértve az igény szerinti (JIT) fordítást, a memória kiosztását és kezelését, a típusbiztonság kényszerítését, a kivételkezelést, a szálkezelést és a biztonságot. További információ: .NET-keretrendszer fejlesztési útmutatója.
Jegyzet
Az új .NET sql server nyelvi bővítményekkel való használatáról további információt az .NET-futtatókörnyezet meghívása az SQL Server Language Extensionscímű témakörben talál.
Az SQL Serverben üzemeltetett CLR -vel (az úgynevezett CLR-integrációval) tárolt eljárásokat, eseményindítókat, felhasználó által definiált függvényeket, felhasználó által definiált típusokat és felhasználó által definiált összesítéseket készíthet felügyelt kódban. Mivel a felügyelt kód a végrehajtás előtt natív kódra fordítható, bizonyos esetekben jelentős teljesítménynövekedés érhető el.
Kódhozzáférés biztonsága
Az SQL Server 2016 (13.x) és korábbi verzióiban a Code Access Security (CAS) megakadályozta a szerelvények bizonyos műveletek végrehajtását.
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 szerelvényt egy tanúsítvánnyal vagy aszimmetrikus kulccsal írja alá egy megfelelő bejelentkezéssel, amely UNSAFE ASSEMBLY engedélyt kapott az master adatbázisban. Az SQL Server rendszergazdái szerelvényeket is hozzáadhatnak a szerelvények listájához, amelyekben az adatbázismotornak megbízhatónak kell lennie. További információ: sys.sp_add_trusted_assembly.
A CLR-integráció előnyei
Transact-SQL az adatbázisban való közvetlen adathozzáféréshez és -kezeléshez készült. Bár Transact-SQL kiválóan működik az adathozzáférés és -kezelés terén, ez nem teljes körű programozási nyelv. A Transact-SQL például nem támogatja a tömböket, gyűjteményeket, minden ciklushoz, biteltolást vagy osztályt. Bár ezen szerkezetek némelyike szimulálható a Transact-SQL-ben, a felügyelt kód integrált támogatást nyújt ezekhez a szerkezetekhez. A forgatókönyvtől függően ezek a funkciók meggyőző okot adhatnak bizonyos adatbázis-funkciók felügyelt kódban való implementálására.
A Visual Basic és a C# objektumorientált képességeket kínál, például beágyazást, öröklést és polimorfizmust. A kapcsolódó kód mostantól egyszerűen rendszerezhető osztályokba és névterekbe. Ha nagy mennyiségű kiszolgálókóddal dolgozik, ezek a képességek lehetővé teszik a kód egyszerűbb rendszerezését és karbantartását.
A felügyelt kód jobban használható, mint Transact-SQL számításokhoz és bonyolult végrehajtási logikához, és számos összetett feladat széles körű támogatását biztosítja, beleértve a sztringkezelést és a reguláris kifejezéseket. A .NET-keretrendszerben található funkciókkal több ezer előre összeállított osztályhoz és rutinhoz férhet hozzá. Ezek az osztályok könnyen elérhetők bármilyen tárolt eljárásból, eseményindítóból vagy felhasználó által definiált függvényből. Az alaposztálytár (BCL) olyan osztályokat tartalmaz, amelyek a sztringek kezeléséhez, a speciális matematikai műveletekhez, a fájlhozzáféréshez, a titkosításhoz és egyebekhez nyújtanak funkciókat.
Jegyzet
Bár számos ilyen osztály használható az SQL Server CLR-kódjában, a kiszolgálóoldali használatra nem megfelelő osztályok (például ablakosztályok) nem érhetők el. További információ: támogatott .NET-keretrendszerkódtárak.
A felügyelt kód egyik előnye a típusbiztonság, vagy annak biztosítása, hogy a kód csak jól meghatározott, megengedett módon fér hozzá a típusokhoz. A felügyelt kód végrehajtása előtt a CLR ellenőrzi, hogy a kód biztonságos-e. A kód például ellenőrzi, hogy nincs-e olyan memória beolvasva, amely korábban nem lett megírva. A CLR azt is segítheti, hogy a kód ne manipulálja a nem felügyelt memóriát.
A CLR-integráció a jobb teljesítmény lehetőségét kínálja. További információ: CLR integrációs architektúra teljesítménye.
Válasszon a Transact-SQL és a felügyelt kód között
Tárolt eljárások, eseményindítók és felhasználó által definiált függvények írásakor el kell döntenie, hogy hagyományos Transact-SQL-t vagy .NET-keretrendszernyelvet( például Visual Basic vagy C#) használ. Használjon Transact-SQL, ha a kód többnyire kevés vagy semmilyen eljárási logikával végez adathozzáférést. Használjon felügyelt kódot olyan processzorigényes függvényekhez és eljárásokhoz, amelyek összetett logikát használnak, vagy ha a .NET-keretrendszer BCL-jét szeretné használni.
Válasszon a kiszolgálói végrehajtás és az ügyfélen belüli végrehajtás között
A Transact-SQL vagy felügyelt kód használatával kapcsolatos döntés másik tényezője, hogy hol szeretné tárolni a kódot, a kiszolgáló számítógépét vagy az ügyfélszámítógépet. A Transact-SQL és a felügyelt kód is futtatható a kiszolgálón. Ez közel helyezi egymáshoz a kódot és az adatokat, és lehetővé teszi a kiszolgáló feldolgozási erejének kihasználását. Előfordulhat azonban, hogy nem szeretne processzorigényes feladatokat elhelyezni az adatbázis-kiszolgálón. A legtöbb ügyfélszámítógép ma hatékony, és érdemes kihasználni ezt a feldolgozási teljesítményt azáltal, hogy a lehető legtöbb kódot helyezi el az ügyfélen. A felügyelt kód futtatható egy ügyfélszámítógépen, míg Transact-SQL nem.
A kiterjesztett tárolt eljárások és a felügyelt kód kiválasztása
A kiterjesztett tárolt eljárások úgy hozhatók létre, hogy Transact-SQL tárolt eljárásokkal nem lehet funkciókat végrehajtani. A kiterjesztett tárolt eljárások azonban veszélyeztethetik az SQL Server-folyamat integritását, míg a típusbiztosnak ellenőrzött felügyelt kód nem. Emellett a memóriakezelés, a szálak és szálak ütemezése, valamint a szinkronizálási szolgáltatások mélyebben integrálódnak a CLR és az SQL Server felügyelt kódja között. A CLR-integrációval a kiterjesztett tárolt eljárásoknál biztonságosabban írhatja meg a Transact-SQL-ben nem lehetséges feladatok elvégzéséhez szükséges tárolt eljárásokat. További információ a CLR-integrációról és a kiterjesztett tárolt eljárásokról: CLR integrációs architektúra teljesítménye.