TRUSTWORTHY
vlastnost databáze (při nastavení na ON
) v podstatě prohlašuje SQL Serveru, že kódu obsaženému v této databázi a spouštěnému v zosobněném kontextu by mělo být umožněno dosáhnout mimo tuto databázi při zachování tohoto zosobněného kontextu zabezpečení. Umožňuje také vše Sestavy SQLCLR v této databázi mají být nastaveny na EXTERNAL_ACCESS
a UNSAFE
, ať už se tento kód dostane mimo server (vnější význam:síťový přístup, přístup k systému souborů, přístup k registru, přístup k prostředí atd.).
Je to spíše obecný způsob, jak to umožnit, protože pokrývá veškerý kód v databázi. Použití certifikátů a/nebo asymetrických klíčů k podepisování modulů – procesů a/nebo sestavení – umožňuje podrobnější kontrolu nad tím, jaký kód má jaká oprávnění.
Nastavení databáze na TRUSTWORTHY
také umožňuje, aby jakýkoli proces začínající v této databázi dosáhl až na úroveň serveru a/nebo napříč jinými databázemi. Normálně je proces omezen / umístěn do karantény v databázi, kde začal. Pokud je databáze ve vlastnictví "sa" přihlášení, pak jakýkoli proces zahájený v této databázi a běžící jako "dbo" bude mít fakticky "sa" privilegia (fuj!).
Spíše než se zde snažit popsat množství podrobností, které jsou nutné k úplnému sdělení specifik o předstírání jiné identity, rozšíření zmíněného předstírání identity, modulů podepisování atd., doporučuji prostudovat si následující zdroje na toto téma:
- PROSÍM, prosím , přestaňte prosím používat předstírání identity, DŮVĚRYHODNOST a řetězení vlastnictví napříč databázemi
- Pokyny pro používání nastavení databáze DŮVĚRYHODNÉ v SQL Server
- Rozšíření zosobnění databáze pomocí EXECUTE AS
Toto je velmi informativní dokument, který pokrývá většinu aspektů tohoto tématu a je také odkazován na výše uvedené stránce. - Schodiště do SQLCLR Úroveň 4:Zabezpečení (EXTERNÍ a NEBEZPEČNÁ sestavení)
Toto je článek, který jsem napsal jako součást série o SQLCLR a který obsahuje příklady, které ilustrují rozdíly mezi metodou TRUSTWORTHY a metodou přihlášení na základě podepsaného shromáždění; Je vyžadována bezplatná registrace.
Měli byste se vyhnout nastavení databáze na TRUSTWORTHY
co nejvíc to půjde. Pokud opravdu musíte mít vícevláknová / asynchronní volání A pokud máte zdrojový kód a kompilujete sestavení, pak mě nenapadá důvod, proč použít SET TRUSTWORTHY ON
volba. Místo toho byste měli sestavení podepsat heslem a pomocí následujících příkazů nastavte preferovanou metodu povolení EXTERNAL_ACCESS
a UNSAFE
sestavení:
USE [master];
CREATE ASYMMETRIC KEY [ClrPermissionsKey]
AUTHORIZATION [dbo]
FROM EXECUTABLE FILE = 'C:\path\to\my\assembly.dll';
CREATE LOGIN [ClrPermissionsLogin]
FROM ASYMMETRIC KEY [ClrPermissionsKey];
GRANT UNSAFE ASSEMBLY TO [ClrPermissionsLogin];
Jakmile je to na místě, můžete přejít do databáze, kde bylo vaše sestavení načteno a spuštěno:
ALTER ASSEMBLY [MyAssembly] WITH PERMISSION_SET = UNSAFE;
Nebo jste mohli zahrnout WITH PERMISSION_SET = UNSAFE
na konci CREATE ASSEMBLY
příkaz.