Návrh sestavení
platí pro:SQL Server
Tento článek popisuje následující faktory, které byste měli zvážit při návrhu sestavení:
- Balení sestavení
- Správa zabezpečení sestavení
- Omezení sestavení
Sestavení balíčků
Sestavení může obsahovat funkce pro více než jednu rutinu SQL Serveru nebo typ ve svých třídách a metodách. Ve většině případů dává smysl zabalit funkce rutin, které provádějí související funkce ve stejném sestavení, zejména pokud tyto rutiny sdílejí třídy, jejichž metody vzájemně volají. Například třídy, které provádějí úlohy správy zadávání dat pro triggery CLR (Common Language Runtime) a uložené procedury CLR lze zabalit do stejného sestavení. Důvodem je to, že metody pro tyto třídy jsou pravděpodobnější, že se navzájem volají než metody méně souvisejících úkolů.
Při balení kódu do sestavení zvažte:
Uživatelem definované typy a indexy CLR, které závisí na uživatelem definovaných funkcích CLR, můžou způsobit, že trvalá data budou v databázi, která závisí na sestavení. Úprava kódu sestavení je často složitější, pokud existují trvalá data, která závisí na sestavení v databázi. Proto je lepší oddělit kód, na kterém se trvalé závislosti dat spoléhají (například uživatelem definované typy a indexy pomocí uživatelem definovaných funkcí) od kódu, který tyto trvalé závislosti dat neobsahuje. Další informace naleznete v tématu Implementace sestavení a ALTER ASSEMBLY.
Pokud část spravovaného kódu vyžaduje vyšší oprávnění, je lepší tento kód oddělit do samostatného sestavení od kódu, který nevyžaduje vyšší oprávnění.
Správa zabezpečení sestavení
Můžete řídit, kolik sestavení má přístup k prostředkům chráněným zabezpečením přístupu kódu .NET při spuštění spravovaného kódu. Provedete to zadáním jedné ze tří sad oprávnění při vytváření nebo úpravě sestavení: SAFE
, EXTERNAL_ACCESS
nebo UNSAFE
.
Oprávnění SAFE
SAFE
je výchozí sada oprávnění a je to nejvíce omezující. Kód spuštěný sestavením s oprávněními SAFE
nemůže přistupovat k externím systémovým prostředkům, jako jsou soubory, síť, proměnné prostředí nebo registr.
SAFE
kód může přistupovat k datům z místních databází SQL Serveru nebo provádět výpočty a obchodní logiku, které nezahrnují přístup k prostředkům mimo místní databáze.
Většina sestavení provádí úlohy výpočtu a správy dat bez přístupu k prostředkům mimo SQL Server. Proto doporučujeme SAFE
jako sadu oprávnění sestavení.
oprávnění EXTERNAL_ACCESS
EXTERNAL_ACCESS
umožňuje sestavením přistupovat k určitým externím systémovým prostředkům, jako jsou soubory, sítě, webové služby, proměnné prostředí a registr. Vytvářet EXTERNAL_ACCESS
sestavení můžou pouze přihlášení SQL Serveru s oprávněními EXTERNAL ACCESS
.
SESTAVENÍ SAFE a EXTERNAL_ACCESS
mohou obsahovat pouze kód, který je ověřitelně typově bezpečný. To znamená, že tato sestavení mají přístup pouze k třídám prostřednictvím jasně definovaných vstupních bodů, které jsou platné pro definici typu. Proto nemůžou libovolně přistupovat k vyrovnávacím pamětím paměti, které kód nevlastní. Navíc nemůžou provádět operace, které by mohly mít nepříznivý vliv na robustnost procesu SQL Serveru.
NEBEZPEČNÁ oprávnění
UNSAFE
dává sestavením neomezený přístup k prostředkům, a to jak v rámci SQL Serveru, tak i mimo sql Server. Kód spuštěný z UNSAFE
sestavení může volat nespravovaný kód.
Zadání UNSAFE
také umožňuje kódu v sestavení provádět operace, které jsou považovány za nebezpečné typu pomocí ověřovatele CLR. Tyto operace můžou potenciálně přistupovat k vyrovnávací paměti v procesním prostoru SQL Serveru nekontrolovatelným způsobem.
UNSAFE
sestavení mohou také potenciálně podvrátit systém zabezpečení SQL Serveru nebo modulu CLR (Common Language Runtime).
UNSAFE
oprávnění by měla být udělena pouze vysoce důvěryhodným sestavením zkušeným vývojářům nebo správcům. Sestavení
Omezení sestavení
SQL Server zavádí určitá omezení spravovaného kódu v sestaveních, aby se zajistilo, že se můžou spouštět spolehlivým a škálovatelným způsobem. To znamená, že určité operace, které mohou ohrozit odolnost serveru, nejsou povoleny v SAFE
a EXTERNAL_ACCESS
sestavení.
Nepovolené vlastní atributy
Sestavení nemohou být opatřena poznámkami s následujícími vlastními atributy:
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
Kromě toho SAFE
a EXTERNAL_ACCESS
sestavení nelze anotovat následujícími vlastními atributy:
System.Security.SuppressUnmanagedCodeSecurityAttribute
System.Security.UnverifiableCodeAttribute
Nepovolené rozhraní API rozhraní .NET Framework
Z SAFE
a sestavení EXTERNAL_ACCESS
nelze volat jakékoli rozhraní API rozhraní .NET Framework s poznámkami s jednou z nepovolených HostProtectionAttributes
.
HostProtectionAttribute.SelfAffectingProcessMgmt
HostProtectionAttribute.SelfAffectingThreading
HostProtectionAttribute.Synchronization
HostProtectionAttribute.SharedState
HostProtectionAttribute.ExternalProcessMgmt
HostProtectionAttribute.ExternalThreading
HostProtectionAttribute.SecurityInfrastructure
HostProtectionAttribute.MayLeakOnAbort
HostProtectionAttribute.UI
Podporovaná sestavení rozhraní .NET Framework
Jakékoli sestavení, na které odkazuje vaše vlastní sestavení, musí být načteno do SQL Serveru pomocí CREATE ASSEMBLY
. Následující sestavení rozhraní .NET Framework jsou již načtena do SQL Serveru, a proto lze odkazovat vlastními sestaveními, aniž by bylo nutné používat CREATE ASSEMBLY
.
mscorlib.dll
CustomMarshalers.dll
Microsoft.VisualBasic.dll
Microsoft.VisualC.dll
System.Configuration.dll
System.Core.dll
System.Data.OracleClient.dll
System.Data.SqlXml.dll
System.Data.dll
System.Deployment.dll
System.Security.dll
System.Transactions.dll
System.Web.Services.dll
System.Xml.Linq.dll
system.Xml.dll
System.dll
Související obsah
- sestavení
(databázový stroj) - zabezpečení integrace CLR