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
Azure SQL Managed Instance
Felügyelt tárolt eljárás vagy más felügyelt adatbázis-objektum létrehozásakor az SQL Server bizonyos kódellenőrzéseket hajt végre, amelyeket figyelembe kell venni. Ezeket az ellenőrzéseket a felügyelt kódszerelvényen hajtják végre, amikor először regisztrálják az adatbázist a CREATE ASSEMBLY utasítás használatával, valamint futásidőben is. A felügyelt kódot futásidőben is ellenőrzi a rendszer, mert előfordulhat, hogy egy szerelvényben olyan kódútvonalak vannak, amelyek futásidőben valójában soha nem lesznek elérhetők.
These code checks provide flexibility for registering third-party assemblies especially, so that an assembly isn't blocked where there's unsafe code designed to run in a client environment, but would never be executed in the hosted common language runtime (CLR). A felügyelt kód követelményeinek attól függ, hogy a szerelvény SAFE, EXTERNAL_ACCESSvagy UNSAFEnéven van-e regisztrálva .
SAFE a legszigorúbb biztonsági szint.
A felügyelt kódszerelvényekre vonatkozó korlátozások mellett a kódbiztonsági engedélyek is meg vannak adva. A CLR támogatja a felügyelt kód kódhozzáférés-biztonsági (CAS) nevű biztonsági modelljét. Ebben a modellben a kód identitása alapján kapnak engedélyeket a szerelvényekhez.
SAFE, EXTERNAL_ACCESSés UNSAFE szerelvények eltérő CAS-engedélyekkel rendelkeznek. További információ: CLR integrációs kód hozzáférésének biztonsága.
If the publisher policy is set, CREATE ASSEMBLY fails.
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.
CREATE ASSEMBLY-ellenőrzések
A CREATE ASSEMBLY utasítás futtatásakor a rendszer az alábbi ellenőrzéseket hajtja végre az egyes biztonsági szinteken. Ha az ellenőrzés sikertelen, CREATE ASSEMBLY hibaüzenettel meghiúsul.
Globális (bármilyen biztonsági szint)
Minden hivatkozott szerelvényeknek meg kell felelniük az alábbi feltételek közül egynek vagy többnek:
A szerelvény már regisztrálva van az adatbázisban.
A szerelvény a támogatott szerelvények egyike. További információ: támogatott .NET-keretrendszerkódtárak.
CREATE ASSEMBLY FROM <location>használ, és az összes hivatkozott szerelvények és azok függőségei elérhetők a<location>.CREATE ASSEMBLY FROM <bytes ...>használ, és az összes hivatkozás szóközzel elválasztott bájtokkal van megadva.
EXTERNAL_ACCESS
Minden EXTERNAL_ACCESS szerelvényeknek meg kell felelniük a következő feltételeknek:
A statikus mezők nem az információk tárolására szolgálnak. Írásvédett statikus mezők engedélyezettek.
A PEVerify teszt sikeres. A PEVerify eszköz (
peverify.exe), amely ellenőrzi, hogy a közös köztes nyelv (CIL)-kód és a kapcsolódó metaadatok megfelelnek-e a típusbiztonsági követelményeknek, a .NET-keretrendszer SDK-val rendelkezik.A szinkronizálást, például a
SynchronizationAttributeosztályt nem használja a rendszer.A finalizer metódusok nem használhatók.
A következő egyéni attribútumok nem engedélyezettek EXTERNAL_ACCESS szerelvényekben:
System.ContextStaticAttributeSystem.MTAThreadAttributeSystem.Runtime.CompilerServices.MethodImplAttributeSystem.Runtime.CompilerServices.CompilationRelaxationsAttributeSystem.Runtime.Remoting.Contexts.ContextAttributeSystem.Runtime.Remoting.Contexts.SynchronizationAttributeSystem.Runtime.InteropServices.DllImportAttributeSystem.Security.Permissions.CodeAccessSecurityAttributeSystem.Security.SuppressUnmanagedCodeSecurityAttributeSystem.Security.UnverifiableCodeAttributeSystem.STAThreadAttributeSystem.ThreadStaticAttribute
SAFE
- A rendszer minden
EXTERNAL_ACCESSszerelvényfeltételt ellenőrzi.
Runtime checks
Futásidőben a kódszerelvény a következő feltételek teljesülését ellenőrzi. Ha ezen feltételek bármelyike megtalálható, a felügyelt kód nem futtatható, és a rendszer kivételt okoz.
UNSAFE
A szerelvény nem tölthető be explicit módon úgy, hogy meghívja a System.Reflection.Assembly.Load() metódust egy bájttömbből, vagy implicit módon Reflection.Emit névteret használ.
EXTERNAL_ACCESS
A rendszer minden UNSAFE feltételt ellenőrzi.
A támogatott szerelvények listájában az alábbi gazdagépvédelmi attribútum (HPA) értékekkel jegyzett összes típus és metódus nem engedélyezett.
SelfAffectingProcessMgmtSelfAffectingThreadingSynchronizationSharedStateExternalProcessMgmtExternalThreadingSecurityInfrastructureMayLeakOnAbortUI
További információ a HPA-król, valamint a támogatott szerelvények nem engedélyezett típusairól és tagjairól: Gazdagépvédelmi attribútumok és CLR integrációs programozás.
SAFE
A rendszer minden EXTERNAL_ACCESS feltételt ellenőrzi.