Vytvoření sestavení
platí pro: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í.
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_ACCESS
nebo 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 ASSEMBLY
oprá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
Poznámka
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.
Související obsah
- Správa sestavení integrace CLR
- Změna sestavení
- přetažení sestavení
- zabezpečení přístupu kódu integrace CLR
- vlastnost databáze TRUSTWORTHY