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.
Applies to:SQL Server
Ez a cikk az alábbi tényezőket ismerteti, amelyeket figyelembe kell vennie a szerelvények tervezésekor:
- Packaging assemblies
- Szerelvénybiztonság kezelése
- Szerelvényekre vonatkozó korlátozások
Package assemblies
Egy szerelvény több SQL Server-rutinhoz is tartalmazhat funkciókat, vagy beírhatja az osztályait és metódusait. Az idő nagy részében érdemes csomagolni azokat a rutinokat, amelyek egy szerelvényen belül hajtanak végre kapcsolódó funkciókat, különösen akkor, ha ezek a rutinok olyan osztályokat osztanak meg, amelyek metódusai meghívják egymást. A közös nyelvi futtatókörnyezeti (CLR) eseményindítókhoz és a CLR-ben tárolt eljárásokhoz adatbevitel-kezelési feladatokat végző osztályok például ugyanabba a szerelvénybe csomagolhatók. Ennek az az oka, hogy ezeknek az osztályoknak a metódusai nagyobb valószínűséggel hívják egymást, mint a kevésbé kapcsolódó tevékenységek módszerei.
Amikor kódokat csomagol a szerelvénybe, fontolja meg a következő szempontokat:
A CLR felhasználó által definiált függvényeitől függő, felhasználó által definiált CLR-típusok és indexek miatt a tárolt adatok a szerelvénytől függő adatbázisban lehetnek. A szerelvény kódjának módosítása gyakran összetettebb, ha az adatbázisban lévő szerelvénytől függő adatok vannak megőrzve. Ezért érdemes elkülöníteni azokat a kódot, amelyeken a tartós adatfüggőségek támaszkodnak (például felhasználó által definiált típusok és indexek felhasználó által definiált függvényeket használnak) olyan kódtól, amely nem rendelkezik ezekkel a tartós adatfüggőségekkel. For more information, see Implement assemblies and ALTER ASSEMBLY.
Ha egy felügyelt kód egy része magasabb szintű engedélyt igényel, jobb, ha a kódot külön szerelvényre alakítja, és nem igényel magasabb szintű engedélyt.
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.
Szerelvénybiztonság kezelése
Szabályozhatja, hogy egy szerelvény mennyire fér hozzá a .NET Code Access Security által védett erőforrásokhoz felügyelt kód futtatásakor. Ezt három engedélykészlet egyikének megadásával teheti meg egy szerelvény létrehozásakor vagy módosításakor: SAFE, EXTERNAL_ACCESSvagy UNSAFE.
SAFE permission
SAFE az alapértelmezett engedélykészlet, és ez a legkorlátozóbb. A SAFE engedélyekkel rendelkező szerelvény által futtatott kód nem fér hozzá külső rendszererőforrásokhoz, például fájlokhoz, hálózathoz, környezeti változókhoz vagy a beállításjegyzékhez.
SAFE kód hozzáférhet a helyi SQL Server-adatbázisokból származó adatokhoz, vagy olyan számításokat és üzleti logikát hajthat végre, amelyek nem járnak a helyi adatbázisokon kívüli erőforrások eléréséhez.
A szerelvények többsége számítási és adatkezelési feladatokat végez anélkül, hogy az SQL Serveren kívüli erőforrásokhoz kellene hozzáférnie. Ezért javasoljuk, hogy SAFE a szerelvény engedélykészleteként.
EXTERNAL_ACCESS permission
EXTERNAL_ACCESS lehetővé teszi, hogy a szerelvények hozzáférjenek bizonyos külső rendszererőforrásokhoz, például fájlokhoz, hálózatokhoz, webszolgáltatásokhoz, környezeti változókhoz és a beállításjegyzékhez. Csak EXTERNAL ACCESS engedélyekkel rendelkező SQL Server-bejelentkezések hozhatnak létre EXTERNAL_ACCESS szerelvényeket.
SAFE és EXTERNAL_ACCESS a szerelvények csak olyan kódot tartalmazhatnak, amely ellenőrizhetően típusbiztos. Ez azt jelenti, hogy ezek a szerelvények csak a típusdefinícióra érvényes, jól meghatározott belépési pontokon keresztül férhetnek hozzá az osztályokhoz. Ezért nem férhetnek hozzá önkényesen a kódhoz nem tartozó memóriapufferekhez. Emellett nem hajthatnak végre olyan műveleteket, amelyek kedvezőtlen hatással lehetnek az SQL Server-folyamat robusztusságára.
UNSAFE permission
UNSAFE korlátlan hozzáférést biztosít a szerelvényeknek az SQL Serveren belüli és kívüli erőforrásokhoz. A UNSAFE szerelvényen belül futó kód meghívhat nem felügyelt kódot.
Emellett a UNSAFE megadása lehetővé teszi, hogy a kód a szerelvényben olyan műveleteket hajt végre, amelyeket a CLR-ellenőrző nem biztonságosnak tart. Ezek a műveletek az SQL Server-folyamattér memóriapuffereit szabályozatlan módon érhetik el.
UNSAFE szerelvények az SQL Server vagy a közös nyelvi futtatókörnyezet biztonsági rendszerét is leállíthatják.
UNSAFE engedélyeket csak tapasztalt fejlesztők vagy rendszergazdák kaphatnak magas megbízhatóságú szerelvények számára. Only members of the sysadmin fixed server role can create UNSAFE assemblies.
Szerelvényekre vonatkozó korlátozások
Az SQL Server bizonyos korlátozásokat alkalmaz a felügyelt kód szerelvényekben való futtatására, hogy azok megbízható és méretezhető módon fussanak. Ez azt jelenti, hogy bizonyos műveletek, amelyek veszélyeztethetik a kiszolgáló robusztusságát, nem engedélyezettek SAFE és EXTERNAL_ACCESS szerelvényekben.
Nem engedélyezett egyéni attribútumok
A szerelvények nem fűzhetők megjegyzéshez a következő egyéni attribútumokkal:
System.ContextStaticAttribute
System.MTAThreadAttribute
System.Runtime.CompilerServices.MethodImplAttribute
System.Runtime.CompilerServices.CompilationRelaxationsAttribute
System.Runtime.Remoting.Contexts.ContextAttribute
System.Runtime.Remoting.Contexts.SynchronizationAttribute
System.Runtime.InteropServices.DllImportAttribute
System.Security.Permissions.CodeAccessSecurityAttribute
System.STAThreadAttribute
System.ThreadStaticAttribute
Ezenkívül SAFE és EXTERNAL_ACCESS szerelvények nem fűzhetők hozzá az alábbi egyéni attribútumokhoz:
System.Security.SuppressUnmanagedCodeSecurityAttribute
System.Security.UnverifiableCodeAttribute
Nem engedélyezett .NET-keretrendszer API-k
Az egyik nem engedélyezett HostProtectionAttributes jegyzettel ellátott .NET-keretrendszer API nem hívható meg SAFE és EXTERNAL_ACCESS szerelvényekből.
HostProtectionAttribute.SelfAffectingProcessMgmt
HostProtectionAttribute.SelfAffectingThreading
HostProtectionAttribute.Synchronization
HostProtectionAttribute.SharedState
HostProtectionAttribute.ExternalProcessMgmt
HostProtectionAttribute.ExternalThreading
HostProtectionAttribute.SecurityInfrastructure
HostProtectionAttribute.MayLeakOnAbort
HostProtectionAttribute.UI
Támogatott .NET-keretrendszer-szerelvények
Az egyéni szerelvény által hivatkozott összes szerelvényt be kell tölteni az SQL Serverbe a CREATE ASSEMBLYhasználatával. A következő .NET-keretrendszer-szerelvények már be vannak töltve az SQL Serverbe, ezért egyéni szerelvények hivatkozhatnak rá anélkül, hogy CREATE ASSEMBLYkellene használniuk.
mscorlib.dllCustomMarshalers.dllMicrosoft.VisualBasic.dllMicrosoft.VisualC.dllSystem.Configuration.dllSystem.Core.dllSystem.Data.OracleClient.dllSystem.Data.SqlXml.dllSystem.Data.dllSystem.Deployment.dllSystem.Security.dllSystem.Transactions.dllSystem.Web.Services.dllSystem.Xml.Linq.dllsystem.Xml.dllSystem.dll