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
Azure SQL Managed Instance
Vytvoří modul spravované aplikace, který obsahuje metadata třídy a spravovaný kód jako objekt v instanci SQL Serveru. Odkazem na tento modul lze v databázi vytvořit funkce modulu CLR (Common Language Runtime), uložené procedury, triggery, agregace definované uživatelem a uživatelem definované typy.
Syntax
CREATE ASSEMBLY assembly_name
[ AUTHORIZATION owner_name ]
FROM { <client_assembly_specifier> | <assembly_bits> [ , ...n ] }
[ WITH PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE } ]
[ ; ]
<client_assembly_specifier> ::=
'[ \\computer_name\ ] share_name\ [ path\ ] manifest_file_name'
| '[ local_path\ ] manifest_file_name'
<assembly_bits> ::=
{ varbinary_literal | varbinary_expression }
Arguments
assembly_name
Název sestavení. The name must be unique within the database and a valid identifier.
AUTHORIZATION owner_name
Určuje jméno uživatele nebo role jako vlastníka sestavení.
owner_name must either be the name of a role of which the current user is a member, or the current user must have IMPERSONATE permission on owner_name. Pokud není zadáno, je vlastnictví uděleno aktuálnímu uživateli.
<client_assembly_specifier>
Určuje místní cestu nebo síťové umístění, kde se nachází nahrané sestavení, a také název souboru manifestu, který odpovídá sestavení.
<client_assembly_specifier> lze vyjádřit jako pevný řetězec nebo výraz, který se vyhodnocuje s pevným řetězcem s proměnnými.
CREATE ASSEMBLY nepodporuje načítání vícemodulových sestavení. SQL Server také vyhledá všechna závislá sestavení tohoto sestavení ve stejném umístění a také je nahraje se stejným vlastníkem jako sestavení kořenové úrovně. Pokud tato závislá sestavení nejsou nalezena a nejsou již načtena v aktuální databázi, CREATE ASSEMBLY selže. Pokud jsou závislá sestavení již načtena v aktuální databázi, vlastník těchto sestavení musí být stejný jako vlastník nově vytvořeného sestavení.
Important
Azure SQL Database a Azure SQL Managed Instance nepodporují vytváření sestavení ze souboru.
<client_assembly_specifier> nelze zadat, pokud se přihlášený uživatel zosobní.
<assembly_bits>
Seznam binárních hodnot, které tvoří sestavení a jeho závislá sestavení. První hodnota v seznamu je považována za sestavení na kořenové úrovni. Hodnoty odpovídající závislým sestavením lze zadat v libovolném pořadí. Všechny hodnoty, které neodpovídají závislostem kořenového sestavení, se ignorují.
Note
Tato možnost není dostupná v databázi s omezením.
varbinary_literal
A varbinary literal.
varbinary_expression
An expression of type varbinary.
PERMISSION_SET { SAFE | EXTERNAL_ACCESS | NEBEZPEČNÉ }
Určuje sadu přístupových oprávnění kódu, která jsou udělena sestavení při přístupu k SQL Serveru. Pokud není zadáno, SAFE použije se jako výchozí.
Tato PERMISSION_SET možnost má vliv na konfiguraci serveru: clr strict security option. Pokud clr strict security je povoleno, jsou všechna sestavení považována za UNSAFE.
Doporučujeme používat SAFE.
SAFE je nejvíce omezující sada oprávnění. 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.
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ě, proměnné prostředí a registr.
UNSAFE umožňuje sestavením neomezený přístup k prostředkům, a to jak uvnitř, tak mimo instanci SQL Serveru. Kód spuštěný z sestavení UNSAFE může volat nespravovaný kód.
SAFE je doporučené nastavení oprávnění pro sestavení, která provádějí úlohy výpočtu a správy dat bez přístupu k prostředkům mimo instanci SQL Serveru.
Note
V EXTERNAL_ACCESS databázi s omezením nejsou dostupné možnosti a UNSAFE možnosti.
Doporučujeme použít EXTERNAL_ACCESS pro sestavení, která přistupují k prostředkům mimo instanci SQL Serveru.
EXTERNAL_ACCESS sestavení zahrnují ochranu SAFE spolehlivosti a škálovatelnosti sestavení, ale z hlediska zabezpečení jsou podobná UNSAFE sestavením. Kód v EXTERNAL_ACCESS sestaveních běží ve výchozím nastavení pod účtem služby SQL Serveru a přistupuje k externím prostředkům v rámci tohoto účtu, pokud kód explicitně nezosobňuje volajícího. Oprávnění k vytváření EXTERNAL_ACCESS sestavení by proto mělo být uděleno pouze pro přihlášení, která jsou důvěryhodná ke spuštění kódu v rámci účtu služby SQL Server. Další informace o zosobnění najdete v tématu Zabezpečení integrace CLR.
Určení UNSAFE umožňuje kódu v sestavení úplnou svobodu provádět operace v prostoru procesu SQL Serveru, který může potenciálně ohrozit odolnost SQL Serveru.
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. Only members of the sysadmin fixed server role can create and alter UNSAFE assemblies.
For more information about assembly permission sets, see Design assemblies.
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.
Remarks
CREATE ASSEMBLY nahraje sestavení, které bylo dříve zkompilováno jako soubor .dll ze spravovaného kódu pro použití v instanci SQL Serveru.
Pokud je tato možnost povolená, PERMISSION_SET možnost v CREATE ASSEMBLY příkazech a ALTER ASSEMBLY příkazech se ignoruje za běhu, ale PERMISSION_SET možnosti se zachovají v metadatech. Ignorování této možnosti minimalizuje přerušení existujících příkazů kódu.
SQL Server neumožňuje registraci různých verzí sestavení se stejným názvem, jazykovou verzí a veřejným klíčem.
Při pokusu o přístup k sestavení zadanému v <client_assembly_specifier>aplikaci SQL Server zosobní kontext zabezpečení aktuálního přihlášení systému Windows. Pokud <client_assembly_specifier> určuje síťové umístění (cesta UNC), zosobnění aktuálního přihlášení se nepřenese do síťového umístění kvůli omezením delegování. V tomto případě se přístup provádí pomocí kontextu zabezpečení účtu služby SQL Serveru. Další informace najdete v tématu
Besides the root assembly specified by assembly_name, SQL Server tries to upload any assemblies that are referenced by the root assembly being uploaded. Pokud je odkazované sestavení již odesláno do databáze z důvodu dřívějšího CREATE ASSEMBLY příkazu, toto sestavení není odesláno, ale je k dispozici kořenovému sestavení. Pokud závislé sestavení nebylo dříve odesláno, ale SQL Server nemůže najít soubor manifestu ve zdrojovém adresáři, CREATE ASSEMBLY vrátí chybu.
Pokud některá závislá sestavení odkazovaná kořenovým sestavením ještě nejsou v databázi a implicitně načtena společně s kořenovým sestavením, mají stejná oprávnění nastavená jako sestavení kořenové úrovně. Pokud závislá sestavení musí být vytvořena pomocí jiné sady oprávnění než sestavení kořenové úrovně, musí být odeslána explicitně před sestavením kořenové úrovně s příslušnou sadou oprávnění.
Assembly Validation
SQL Server prohledá binární soubory sestavení nahrané příkazem CREATE ASSEMBLY , aby se zajistily následující kontroly:
Binární soubor sestavení je dobře vytvořený s platnými metadaty a segmenty kódu a segmenty kódu mají platné pokyny jazyka MSIL (Microsoft Intermediate Language).
Sada systémových sestavení, která odkazuje, je jedním z následujících podporovaných sestavení v SYSTÉMU SQL Server:
Microsoft.VisualBasic.dll,mscorlib.dll,System.Data.dll,System.dll, ,System.Xml.dll, ,System.Security.dllSystem.Web.Services.dllCustomMarshallers.dllSystem.Data.SqlXml.dllMicrosoft.VisualC.dllSystem.Core.dll, a .System.Xml.Linq.dllNa jiná systémová sestavení lze odkazovat, ale musí být explicitně zaregistrována v databázi.Pro sestavení vytvořená pomocí
SAFEsady oprávnění neboEXTERNAL ACCESSsady oprávnění:Kód sestavení by měl být bezpečný pro typ. Bezpečnost typů je stanovena spuštěním ověřovatele modulu CLR (Common Language Runtime) pro sestavení.
Sestavení by nemělo obsahovat žádné statické datové členy ve svých třídách, pokud nejsou označené jako jen pro čtení.
Třídy v sestavení nemohou obsahovat finalizační metody.
Třídy nebo metody sestavení by měly být opatřeny poznámkami pouze s povolenými atributy kódu. Další informace naleznete v tématu Integrace CLR: vlastní atributy pro rutiny CLR.
Kromě předchozích kontrol, které se provádějí při CREATE ASSEMBLY spuštění, existují další kontroly, které se provádějí v době provádění kódu v sestavení:
Volání určitých rozhraní API rozhraní .NET Framework, která vyžadují konkrétní oprávnění pro přístup ke kódu, může selhat, pokud sada oprávnění sestavení neobsahuje toto oprávnění.
U
SAFEsestavení aEXTERNAL_ACCESSsestavení se nezdaří všechny pokusy o volání rozhraní API rozhraní .NET Framework, která jsou opatřena poznámkami s určitými objekty HostProtectionAttributes.
For more information, see Design assemblies.
Permissions
Vyžaduje oprávnění CREATE ASSEMBLY.
Pokud PERMISSION_SET = EXTERNAL_ACCESS je zadáno, vyžaduje EXTERNAL ACCESS ASSEMBLY oprávnění na serveru. Pokud PERMISSION_SET = UNSAFE je zadáno, vyžaduje UNSAFE ASSEMBLY oprávnění na serveru.
Uživatel musí být vlastníkem všech sestavení odkazovaných sestavením, která mají být odeslána, pokud sestavení již v databázi existují. To upload an assembly by using a file path, the current user must be a Windows authenticated login or a member of the sysadmin fixed server role. Přihlašovací jméno uživatele, který se spustí CREATE ASSEMBLY , musí mít oprávnění ke čtení sdílené složky a soubory, které se načítají v příkazu.
Oprávnění s přísným zabezpečením CLR
Následující oprávnění požadovaná k vytvoření sestavení CLR, pokud CLR strict security je povoleno:
- Uživatel musí mít
CREATE ASSEMBLYoprávnění. - A jedna z následujících podmínek musí být také pravdivá:
- Sestavení je podepsáno certifikátem nebo asymetrickým klíčem, který má odpovídající přihlášení s oprávněním
UNSAFE ASSEMBLYna serveru. Doporučuje se podepsání sestavení. - Databáze má vlastnost
TRUSTWORTHYnastavenou naONa databáze je vlastněna přihlášením, které má oprávněníUNSAFE ASSEMBLYna serveru. Tato možnost se nedoporučuje.
- Sestavení je podepsáno certifikátem nebo asymetrickým klíčem, který má odpovídající přihlášení s oprávněním
For more information about assembly permission sets, see Design assemblies.
Examples
A. Vytvoření sestavení z knihovny DLL
Následující příklad předpokládá, že ukázky databázového stroje SQL Serveru jsou nainstalovány ve výchozím umístění místního počítače a HelloWorld.csproj ukázková aplikace je zkompilována. Další informace najdete v tématu Hello World Sample.
CREATE ASSEMBLY HelloWorld
FROM '<system_drive>:\Program Files\Microsoft SQL Server\100\Samples\HelloWorld\CS\HelloWorld\bin\debug\HelloWorld.dll'
WITH PERMISSION_SET = SAFE;
Important
Azure SQL Database nepodporuje vytvoření sestavení ze souboru.
B. Vytvoření sestavení z bitů sestavení
Nahraďte ukázkové bity (které nejsou úplné nebo platné) bity sestavení.
CREATE ASSEMBLY HelloWorld
FROM 0x4D5A900000000000
WITH PERMISSION_SET = SAFE;
Related content
- ALTER ASSEMBLY (Transact-SQL)
- DROP ASSEMBLY (Transact-SQL)
- VYTVOŘIT FUNKCI (Transact-SQL)
- CREATE PROCEDURE (Transact-SQL)
- VYTVOŘIT SPOUŠŤ (Transact-SQL)
- VYTVOŘIT TYP (Transact-SQL)
-
CREATE AGGREGATE (Transact-SQL) - EVENTDATA (Transact-SQL)
- scénáře použití a příklady integrace modulu CLR (Common Language Runtime)