Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Applies to:SQL Server
Spravované databázové objekty, jako jsou uložené procedury nebo triggery, se kompilují a pak nasazují v jednotkách označovaných jako sestavení. Spravovaná sestavení DLL musí být zaregistrována na SQL Serveru, aby bylo možné použít funkce, které sestavení poskytuje. K registraci sestavení v databázi SQL Serveru použijte příkaz CREATE ASSEMBLY. Tento článek popisuje, jak zaregistrovat sestavení v databázi pomocí příkazu CREATE ASSEMBLY a jak určit nastavení zabezpečení pro sestavení.
Zabezpečení přístupu kódu se už nepodporuje.
CLR používá zabezpečení přístupu kódu (CAS) v rozhraní .NET Framework, které se už nepodporuje jako hranice zabezpečení. Sestavení CLR vytvořené s PERMISSION_SET = SAFE může mít přístup k externím systémovým prostředkům, volat nespravovaný kód a získat oprávnění správce systému. V SQL Serveru 2017 (14.x) a novějších verzích, možnost sp_configure, přísné zabezpečení CLR, vylepšuje zabezpečení sestavení CLR.
clr strict security je ve výchozím nastavení povolen a se sestaveními SAFE a EXTERNAL_ACCESS zachází, jako by byla označena UNSAFE. Možnost clr strict security může být zakázaná kvůli zpětné kompatibilitě, ale nedoporučuje se.
Doporučujeme podepsat všechna sestavení certifikátem nebo asymetrickým klíčem s odpovídajícím přihlašovacím jménem, kterému bylo uděleno oprávnění UNSAFE ASSEMBLY v databázi master. Správci SQL Serveru mohou také přidat sestavení do seznamu sestavení, kterým má databázový stroj důvěřovat. For more information, see sys.sp_add_trusted_assembly.
Příkaz CREATE ASSEMBLY
Příkaz CREATE ASSEMBLY slouží k vytvoření sestavení v databázi. Tady je příklad:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll';
Klauzule FROM určuje název cesty sestavení k vytvoření. Tato cesta může být buď cesta UNC (Universal Naming Convention), nebo fyzická cesta k souboru, která je místní pro počítač.
SQL Server neumožňuje registraci různých verzí sestavení se stejným názvem, jazykovou verzí a veřejným klíčem.
Je možné vytvořit sestavení, která odkazují na jiná sestavení. Při vytváření sestavení v SYSTÉMU SQL Server vytvoří SQL Server také sestavení odkazovaná sestavením na kořenové úrovni, pokud odkazovaná sestavení ještě nejsou vytvořena do databáze.
Uživatelům databáze nebo uživatelským rolím se přidělují oprávnění k vytváření, a proto vlastní sestavení v databázi. Aby bylo možné vytvářet sestavení, měl by mít uživatel nebo role databáze oprávnění CREATE ASSEMBLY.
Sestavení může být úspěšné pouze při odkazování na jiná sestavení, pokud:
- Sestavení, které je voláno nebo odkazováno, vlastní stejný uživatel nebo role.
- Sestavení, které je volána nebo odkazováno, bylo vytvořeno ve stejné databázi.
Určení zabezpečení při vytváření sestavení
Při vytváření sestavení do databáze SQL Serveru můžete zadat jednu ze tří různých úrovní zabezpečení, ve kterých může kód běžet: SAFE, EXTERNAL_ACCESSnebo UNSAFE. Při spuštění příkazu CREATE ASSEMBLY se na sestavení kódu provádějí určité kontroly, což může způsobit selhání registrace sestavení na serveru.
SAFE je výchozí sada oprávnění a ve většině scénářů funguje. Pokud chcete zadat danou úroveň zabezpečení, upravíte syntaxi příkazu CREATE ASSEMBLY následujícím způsobem:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = SAFE;
Je také možné vytvořit sestavení s oprávněním SAFE nastaveným vynecháním třetího řádku předchozího řádku.
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll';
Když se kód v sestavení spustí v sadě oprávnění SAFE, může provádět pouze výpočty a přístup k datům v rámci serveru prostřednictvím zprostředkovatele spravovaného v procesu.
Vytváření EXTERNAL_ACCESS a nebezpečných sestavení
EXTERNAL_ACCESS řeší scénáře, ve kterých kód potřebuje přístup k prostředkům mimo server, jako jsou soubory, síť, registr a proměnné prostředí. Pokaždé, když server přistupuje k externímu prostředku, zosobní kontext zabezpečení uživatele, který volá spravovaný kód.
UNSAFE oprávnění kódu je pro takové situace, kdy sestavení není ověřitelně bezpečné nebo vyžaduje další přístup k omezeným prostředkům, jako je rozhraní API Win32.
Chcete-li vytvořit EXTERNAL_ACCESS nebo UNSAFE sestavení v SQL Serveru, musí být splněna jedna z následujících dvou podmínek:
Sestavení je silným názvem podepsaným nebo podpisem authenticode pomocí certifikátu. Tento silný název (nebo certifikát) se vytvoří uvnitř SQL Serveru jako asymetrický klíč (nebo certifikát) a má odpovídající přihlášení s oprávněním
EXTERNAL ACCESS ASSEMBLY(pro sestavení externího přístupu) neboUNSAFE ASSEMBLYoprávnění (pro nebezpečná sestavení).Vlastník databáze (DBO) má oprávnění
EXTERNAL ACCESS ASSEMBLY(pro sestaveníEXTERNAL ACCESS) neboUNSAFE ASSEMBLY(pro sestaveníUNSAFE) a databáze má vlastnost databáze TRUSTWORTHY nastavena naON.
Tyto dvě podmínky uvedené dříve jsou také kontrolovány při načítání sestavení (včetně provádění). Aby bylo možné načíst sestavení, musí být splněna alespoň jedna z podmínek.
Doporučujeme, aby vlastnost databáze TRUSTWORTHY v databázi nebyla nastavená na ON pouze pro spuštění kódu CLR (Common Language Runtime) v procesu serveru. Místo toho doporučujeme vytvořit asymetrický klíč ze souboru sestavení v databázi master. Přihlašovací jméno namapované na tento asymetrický klíč se pak musí vytvořit a přihlášení musí být uděleno EXTERNAL ACCESS ASSEMBLY nebo UNSAFE ASSEMBLY oprávnění.
Následující příkazy Transact-SQL provádějí kroky potřebné k vytvoření asymetrického klíče, namapování přihlášení k tomuto klíči a udělení EXTERNAL_ACCESS oprávnění k přihlášení. Před spuštěním příkazu CREATE ASSEMBLY je nutné spustit následující příkazy Transact-SQL.
USE master;
GO
CREATE ASYMMETRIC KEY SQLCLRTestKey
FROM EXECUTABLE FILE = 'C:\MyDBApp\SQLCLRTest.dll';
CREATE LOGIN SQLCLRTestLogin
FROM ASYMMETRIC KEY SQLCLRTestKey;
GRANT EXTERNAL ACCESS ASSEMBLY TO SQLCLRTestLogin;
GO
Note
Musíte vytvořit nové přihlášení, které se přidruží k asymetrickému klíči. Toto přihlášení slouží pouze k udělení oprávnění. Není nutné ho přidružit k uživateli ani ho použít v rámci aplikace.
Aby bylo možné vytvořit EXTERNAL ACCESS sestavení, musí tvůrce při vytváření sestavení zadat oprávnění EXTERNAL ACCESS:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;
Následující příkazy Transact-SQL provádějí kroky potřebné k vytvoření asymetrického klíče, namapování přihlášení k tomuto klíči a udělení UNSAFE oprávnění k přihlášení. Před spuštěním příkazu CREATE ASSEMBLY je nutné spustit následující příkazy Transact-SQL.
USE master;
GO
CREATE ASYMMETRIC KEY SQLCLRTestKey
FROM EXECUTABLE FILE = 'C:\MyDBApp\SQLCLRTest.dll';
CREATE LOGIN SQLCLRTestLogin
FROM ASYMMETRIC KEY SQLCLRTestKey;
GRANT UNSAFE ASSEMBLY TO SQLCLRTestLogin;
GO
Chcete-li určit, že sestavení se načte s oprávněním UNSAFE, zadáte UNSAFE oprávnění nastavená při načítání sestavení na server:
CREATE ASSEMBLY SQLCLRTest
FROM 'C:\MyDBApp\SQLCLRTest.dll'
WITH PERMISSION_SET = UNSAFE;
Další informace o oprávněních pro každé nastavení naleznete v tématu zabezpečení integrace CLR.