ALTER ASSEMBLY (Transact-SQL)

Platí na:SQL ServerAzureSQL Managed Instance

Mění assembler úpravou vlastností katalogu SQL Server assembleru. ALTER ASSEMBLYobnoví ji na nejnovější kopii modulů .NET Frameworku, které obsahují jeho implementaci, a přidává nebo odebírá soubory s ním spojené. Sestavy se vytvářejí pomocí .CREATE ASSEMBLY

Transact-SQL konvence syntaxe

Syntax

ALTER ASSEMBLY assembly_name
    [ FROM <client_assembly_specifier> | <assembly_bits> ]
    [ WITH <assembly_option> [ , ...n ] ]
    [ DROP FILE { file_name [ , ...n ] | ALL } ]
    [ ADD FILE FROM
    {
        client_file_specifier [ AS file_name ]
      | file_bits AS file_name
    } [ , ...n ]
    ] [ ; ]
<client_assembly_specifier> ::=
    '\\computer_name\share-name\ [ path\ ] manifest_file_name '
  | '[ local_path\ ] manifest_file_name'

<assembly_bits> ::=
    { varbinary_literal | varbinary_expression }

<assembly_option> ::=
    PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE }
  | VISIBILITY = { ON | OFF }
  | UNCHECKED DATA

Arguments

assembly_name

Název sestavy, kterou chcete upravit. assembly_name už musí v databázi existovat.

Z <client_assembly_specifier> | <assembly_bits>

Aktualizuje assembler na nejnovější kopii modulů .NET Frameworku, které obsahují jeho implementaci. Tuto možnost lze použít pouze tehdy, pokud nejsou k dané sestavě přiřazeny žádné soubory.

<client_assembly_specifier> specifikuje síť nebo lokální místo, kde se sestava obnovující nachází. Umístění v síti zahrnuje název počítače, název sdíleného díla a cestu uvnitř tohoto sdíleného díla. manifest_file_name specifikuje název souboru, který obsahuje manifest assembleru.

Important

Azure SQL Database nepodporuje odkazování na soubor.

<assembly_bits> je binární hodnota pro sestavu.

Pro jakékoli závislé shromáždění, která také vyžadují aktualizaci, musí být vydána samostatná ALTER ASSEMBLY prohlášení.

PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | NEBEZPEČNÉ }

Specifikuje vlastnost přístupu k kódu .NET Framework pro assembler. Pro více informací o této vlastnosti viz CREATE ASSEMBLY.

Možnost PERMISSION_SET je ovlivněna clr přísnou bezpečnostní možností. Když clr strict security je povolena, všechny assemble jsou považovány za .UNSAFE

Možnosti EXTERNAL_ACCESS a UNSAFE nejsou dostupné v uzavřené databázi.

VIDITELNOST = { ON | VYPNUTO }

Označuje, zda je assembler viditelný pro vytváření běžných funkcí v běžném jazyce (CLR), uložených procedur, spouštěčů, uživatelsky definovaných typů a uživatelsky definovaných agregovaných funkcí proti němu. Pokud je nastaveno na OFF, je sestava určena k volání pouze jinými sestavami. Pokud jsou již existující objekty databáze CLR vytvořeny proti assembleru, viditelnost assembleru nelze změnit. Jakékoliv sestavy, na které assembly_name odkazuje, jsou ve výchozím nastavení nahrány jako neviditelné.

NEKONTROLOVANÁ DATA

Ve výchozím nastavení selhává, ALTER ASSEMBLY pokud musí ověřit konzistenci jednotlivých řádků tabulky. Tato možnost umožňuje odložit kontroly na pozdější dobu pomocí .DBCC CHECKTABLE Pokud je to specifikováno, SQL Server vykoná ALTER ASSEMBLY příkaz i v případě, že v databázi jsou tabulky obsahující následující podmínky:

  • Persistované vypočítané sloupce, které buď přímo, nebo nepřímo odkazují na metody v assembleru, prostřednictvím Transact-SQL funkcí nebo metod.

  • CHECK omezení, která přímo či nepřímo odkazují na metody v assembleru.

  • Sloupce uživatelem definovaného typu CLR, které závisí na sestavení, a typ implementuje formát serializace UserDefined (bezNative).

  • Sloupce uživatelsky definovaného typu CLR, které odkazují na pohledy vytvořené pomocí .WITH SCHEMABINDING

Pokud jsou přítomna nějaká CHECK omezení, jsou deaktivována a označena jako nedůvěryhodná. Tabulky obsahující sloupce v závislosti na sestavě jsou označeny jako obsahující nekontrolovaná data, dokud nejsou tyto tabulky explicitně kontrolovány.

Tuto možnost mohou specifikovat pouze členové rolí db_owner a db_ddlowner pevné databáze.

Vyžaduje oprávnění ALTER ANY SCHEMA k zadaní této možnosti.

Pro více informací viz Implementace assemblies.

DROP FILE { file_name [ ,... n ] | VŠICHNI }

Odstraní název souboru spojený s assemblerem, nebo všechny soubory spojené s assemblerem, z databáze. Pokud se použije s ADD FILE , který následuje, DROP FILE vykoná se jako první. To vám umožní nahradit soubor stejným jménem.

Note

Tato možnost není dostupná v uzavřené databázi ani v Azure SQL Database.

PŘIDEJ SOUBOR Z { client_file_specifier [ JAKOfile_name ] | file_bits JAK file_name }

Nahraje soubor, který má být přiřazen k sestavě, například zdrojový kód, ladicí soubory nebo jiné související informace, na server a zpřístupní ho v sys.assembly_files katalogovém zobrazení. client_file_specifier specifikuje místo, odkud se soubor nahrá. file_bits lze místo toho použít k určení seznamu binárních hodnot, které soubor tvoří. file_name specifikuje název, pod kterým by měl být soubor uložen v instanci SQL Server. file_name musí být specifikován, pokud je file_bits specifikováno, a je volitelné, pokud je client_file_specifier specifikováno. Pokud file_name není specifikováno, file_name část client_file_specifier se používá jako file_name.

Note

Tato možnost není dostupná v uzavřené databázi ani v Azure SQL Database.

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. Další informace naleznete v tématu sys.sp_add_trusted_assembly.

Remarks

ALTER ASSEMBLY Nenarušuje aktuálně běžící relace, které běží kód v sestave, která se upravuje. Aktuální relace dokončují provádění pomocí nezměněných bitů assembleru.

Pokud je klauzule FROM specifikována, aktualizuje ALTER ASSEMBLY assembler vzhledem k nejaktuálnějším kopiím poskytnutých modulů. Protože v instanci SQL Server mohou být CLR funkce, uložené procedury, spouštěče, datové typy a uživatelsky definované agregované funkce, které jsou již definovány proti assembleru, příkaz ALTER ASSEMBLY je znovu připojí k nejnovější implementaci assembleru. Pro toto převázání musí metody, které mapují na CLR funkce, uložené procedury a spouštěče, stále existovat v upravené sestavě se stejnými podpisy. Třídy, které implementují uživatelsky definované typy CLR a uživatelem definované agregátorové funkce, musí stále splňovat požadavky pro to, aby byly uživatelsky definovaným typem nebo agregátem.

Caution

Pokud není zadaný WITH UNCHECKED DATA, SQL Server se pokusí zabránit spuštění ALTER ASSEMBLY, pokud nová verze sestavení ovlivní existující data v tabulkách, indexech nebo jiných trvalých lokalitách. SQL Server však nezaručuje, že vypočtené sloupce, indexy, indexované pohledy nebo výrazy budou konzistentní se základními rutinami a typy při aktualizaci CLR assembleru. Při provádění ALTER ASSEMBLY buďte opatrní, abyste se ujistili, že mezi výsledkem výrazu a hodnotou založenou na tomto výrazu uloženém v assembleru nedochází k nesouladu.

ALTER ASSEMBLY změní verzi sestavení. Token jazykové verze a veřejného klíče sestavení zůstávají stejné.

Příkaz ALTER ASSEMBLY nelze použít ke změně následujících položek:

  • Podpisy CLR funkcí, agregovaných funkcí, uložených procedur a spouštěčů v instanci SQL Server, které odkazují na assembler. ALTER ASSEMBLYselže, když SQL Server nedokáže převázat .NET Framework databázové objekty v SQL Server s novou verzí assembleru.

  • Podpisy metod v assembleru, které jsou volány z jiných assemblerů.

  • Seznam sestav, které závisí na sestavení, jak je uvedeno ve DependentList vlastnosti shromáždění.

  • Indexovatelnost metody, pokud nejsou žádné indexy nebo trvalé vypočtené sloupce závislé na dané metodě, ať už přímo nebo nepřímo.

  • Atribut FillRow metody pro tabulkové funkce CLR.

  • Podpis Accumulate a Terminate metody pro uživatelem definované agregáty.

  • Systémové sestavy.

  • Vlastnictví shromáždění. Místo toho použijte ALTER AUTHORIZATION.

Navíc pro assemblery, které implementují uživatelsky definované typy, ALTER ASSEMBLY lze použít pouze pro následující změny:

  • Úprava veřejných metod uživatelem definované typové třídy, pokud nejsou změněny podpisy nebo atributy.

  • Přidávání nových veřejných metod.

  • Jakýmkoli způsobem upravovat soukromé metody.

Pole obsažená v nativně serializovaném uživatelsky definovaném typu, včetně datových členů nebo základních tříd, nelze měnit pomocí ALTER ASSEMBLY. Všechny ostatní změny nejsou podporovány.

Pokud ADD FILE FROM není specifikováno, zrušte ALTER ASSEMBLY všechny soubory spojené s sestavou.

Pokud ALTER ASSEMBLY je provedena bez datové klauzule UNCHECKED , provádějí se kontroly, zda nová verze assembleru neovlivňuje existující data v tabulkách. V závislosti na množství dat, která je třeba zkontrolovat, může tento krok ovlivnit výkon.

Permissions

Vyžaduje ALTER povolení k montáži. Další požadavky jsou následující:

  • Pro změnu assembleru, jehož stávající množina oprávnění je , EXTERNAL_ACCESSje EXTERNAL ACCESS ASSEMBLY potřeba povolení na serveru.

  • Pro změnu assembleru, jehož stávající oprávnění je UNSAFE potřeba, UNSAFE ASSEMBLY je potřeba povolení na serveru.

  • Pro změnu souboru oprávnění assembleru EXTERNAL_ACCESSna , EXTERNAL ACCESS ASSEMBLY je potřeba povolení na serveru.

  • Pro změnu souboru oprávnění assembleru UNSAFEna , UNSAFE ASSEMBLY je potřeba povolení na serveru.

  • Specifikace WITH UNCHECKED DATA vyžaduje ALTER ANY SCHEMA povolení.

Oprávnění s CLR přísnou bezpečností

Následující oprávnění jsou vyžadována ke změně sestavení CLR při clr strict security jeho povolení:

  • Uživatel musí mít ALTER ASSEMBLY oprávnění.

  • A musí být také splněna jedna z následujících podmínek:

    • 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 ASSEMBLY na serveru. Doporučuje se podepsání sestavení.

    • Databáze má vlastnost TRUSTWORTHY nastavenou na ONa databáze je vlastněna přihlášením, které má oprávnění UNSAFE ASSEMBLY na serveru. Tato možnost se nedoporučuje.

Pro více informací o souborech oprávnění assemblerů viz Návrh assemblies.

Examples

A. Obnovte sestavu

Následující příklad aktualizuje assembler ComplexNumber na nejnovější kopii modulů .NET Frameworku, které obsahují jeho implementaci.

Note

Assembler ComplexNumber lze vytvořit spuštěním ukázkových skriptů UserDefinedDataType . Pro více informací viz User Defined Type.

 ALTER ASSEMBLY ComplexNumber
 FROM 'C:\Program Files\Microsoft SQL Server\130\Tools\Samples\1033\Engine\Programmability\CLR\UserDefinedDataType\CS\ComplexNumber\obj\Debug\ComplexNumber.dll'

Important

Azure SQL Database nepodporuje odkazování na soubor.

B. Přidejte soubor pro přiřazení k assembleru

Následující příklad nahraje soubor Class1.cs zdrojového kódu, který má být přiřazen k assembleru MyClass. Tento příklad předpokládá, že assembler MyClass je již vytvořen v databázi.

ALTER ASSEMBLY MyClass
ADD FILE FROM 'C:\MyClassProject\Class1.cs';

Important

Azure SQL Database nepodporuje odkazování na soubor.

C. Změna oprávnění shromáždění

Následující příklad mění množinu oprávnění assembleru ComplexNumber z SAFE na EXTERNAL ACCESS.

ALTER ASSEMBLY ComplexNumber WITH PERMISSION_SET = EXTERNAL_ACCESS;