Programování serveru SQL Server a atributy ochrany hostitele
Schopnost načíst a spustit spravovaný kód v hostiteli SQL Serveru vyžaduje splnění požadavků hostitele na zabezpečení přístupu kódu i ochranu prostředků hostitele. Požadavky na zabezpečení přístupu kódu jsou určeny jednou ze tří sad oprávnění SQL Serveru: SAFE, EXTERNAL-ACCESS nebo UNSAFE. Kód spuštěný v rámci sad oprávnění SAFE nebo EXTERNAL-ACCESS se musí vyhnout určitým typům nebo členům s použitým atributem HostProtectionAttribute . Nejedná HostProtectionAttribute se o oprávnění zabezpečení stejně jako záruku spolehlivosti v tom, že identifikuje konkrétní konstrukce kódu, buď typy nebo metody, které může hostitel zakázat. Použití HostProtectionAttribute vynucuje programovací model, který pomáhá chránit stabilitu hostitele.
Poznámka:
Zabezpečení přístupu kódu (CAS) je zastaralé ve všech verzích rozhraní .NET Framework a .NET. Nedávné verze rozhraní .NET nedotknou poznámek CAS a generují chyby, pokud se používají rozhraní API související s casem. Vývojáři by měli hledat alternativní způsoby provádění úloh zabezpečení.
Atributy ochrany hostitele
Atributy ochrany hostitele identifikují typy nebo členy, které neodpovídají programovacímu modelu hostitele, a představují následující zvyšující se úrovně ohrožení spolehlivosti:
Jsou jinak neškodné.
Mohlo by vést k deaktivaci uživatelského kódu spravovaného serverem.
Mohlo by vést k deaktivaci samotného procesu serveru.
SQL Server zakáže použití typu nebo člena, který má HostProtectionAttribute hodnotu HostProtectionResourceSharedState, , Synchronizationnebo MayLeakOnAbortExternalProcessMgmt. Tím zabráníte sestavením volat členy, které umožňují stav sdílení, provádět synchronizaci, způsobit únik prostředků při ukončení nebo ovlivnit integritu procesu SQL Serveru.
Nepovolené typy a členy
Následující tabulka identifikuje typy a členy, jejichž HostProtectionResource hodnoty sql Server nepovolují.
Sady oprávnění SQL Serveru
SQL Server umožňuje uživatelům určit požadavky na spolehlivost kódu nasazeného do databáze. Při nahrání sestavení do databáze může autor sestavení určit jednu ze tří sad oprávnění pro toto sestavení: BEZPEČNÉ, EXTERNÍ PŘÍSTUP nebo NEBEZPEČNÉ.
Sada oprávnění | BEZPEČNÉ | EXTERNÍ PŘÍSTUP | NEBEZPEČNÉ |
---|---|---|---|
Zabezpečení přístupu kódu | Spustit pouze | Spuštění a přístup k externím prostředkům | Neomezené |
Omezení programovacího modelu | Ano | Yes | Žádná omezení |
Požadavek na ověřitelnost | Ano | Ano | No |
Schopnost volat nativní kód | No | No | Ano |
SAFE je nejspolehlivější a nejbezpečnější režim s přidruženými omezeními z hlediska povoleného programovacího modelu. Kód SAFE má vysoce spolehlivé a bezpečnostní funkce. Sestavení SAFE mají dostatečná oprávnění ke spuštění, provádění výpočtů a přístupu k místní databázi. Sestavení SAFE musí být ověřitelně typově bezpečná a nesmí volat nespravovaný kód.
EXTERNAL-ACCESS poskytuje zprostředkující možnost zabezpečení, která umožňuje kódu přistupovat k prostředkům externím databázím, ale stále má spolehlivost a bezpečnost SAFE.
NEBEZPEČNÉ je pro vysoce důvěryhodný kód, který může vytvářet pouze správci databáze. Tento důvěryhodný kód nemá žádná omezení přístupu ke kódu a může volat nespravovaný (nativní) kód.
SQL Server používá vrstvu zásad zabezpečení přístupu kódu na úrovni hostitele k nastavení zásady hostitele, která uděluje jednu ze tří sad oprávnění na základě sady oprávnění uložené v katalogech SQL Serveru. Spravovaný kód spuštěný v databázi vždy získá jednu z těchto sad oprávnění pro přístup ke kódu.
Omezení programovacího modelu
Programovací model spravovaného kódu v SQL Serveru vyžaduje funkce, postupy a typy, které nevyžadují použití stavu uchovávaného v několika vyvolání nebo sdílení stavu napříč několika uživatelskými relacemi. Jak je popsáno výše, přítomnost sdíleného stavu může způsobit kritické výjimky, které mají vliv na škálovatelnost a spolehlivost aplikace.
Vzhledem k těmto aspektům SQL Server zakáže použití statických proměnných a statických datových členů. V případě sestavení SAFE a EXTERNAL-ACCESS sql Server prozkoumá metadata sestavení v době VYTVOŘENÍ SESTAVENÍ a selže vytvoření těchto sestavení, pokud najde použití statických datových členů a proměnných.