ALTER ASSEMBLY (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL Managed Instance

Verandert een assembly door de eigenschappen van de SQL Server-catalogus van een assembly aan te passen. ALTER ASSEMBLYververst deze naar de nieuwste kopie van de .NET Framework-modules die de implementatie bevatten en voegt bestanden toe of verwijdert die eraan gekoppeld zijn. Assemblies worden gemaakt door gebruik te maken van CREATE ASSEMBLY.

Transact-SQL syntaxis-conventies

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

De naam van de assemblage die je wilt aanpassen. assembly_name moet al in de database bestaan.

VAN <client_assembly_specifier> | <assembly_bits>

Werkt een assembly bij naar de nieuwste kopie van de .NET Framework-modules die de implementatie bevatten. Deze optie kan alleen worden gebruikt als er geen gekoppelde bestanden zijn met de opgegeven assembly.

<client_assembly_specifier> specificeert het netwerk of de lokale locatie waar de te verversen assembly zich bevindt. De netwerklocatie omvat de naam van de computer, de naam van de share en een pad binnen die share. manifest_file_name specificeert de naam van het bestand dat het manifest van de assembly bevat.

Important

Azure SQL Database ondersteunt geen referentie naar een bestand.

<assembly_bits> is de binaire waarde voor de assemblage.

Voor afhankelijke assemblies die ook bijgewerkt moeten worden, moeten aparte ALTER ASSEMBLY statements worden uitgegeven.

PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | ONVEILIG }

Specificeert de .NET Framework-codetoegangstoegangs-eigenschap van de assembly. Voor meer informatie over dit pand, zie CREATE ASSEMBLY.

De PERMISSION_SET optie wordt beïnvloed door de CLR-optie voor strikte beveiliging . Wanneer clr strict security deze optie is ingeschakeld, worden alle assembly's behandeld als UNSAFE.

De EXTERNAL_ACCESS opties en UNSAFE opties zijn niet beschikbaar in een ingesloten database.

ZICHTBAARHEID = { OP | OFF }

Geeft aan of de assembly zichtbaar is voor het creëren van common language runtime (CLR) functies, opgeslagen procedures, triggers, door de gebruiker gedefinieerde types en door de gebruiker gedefinieerde aggregatefuncties ertegen. Als ingesteld op OFF, is de assembly bedoeld om alleen door andere assemblies te worden aangeroepen. Als er al bestaande CLR-databaseobjecten zijn aangemaakt tegen de assembly, kan de zichtbaarheid van de assembly niet worden aangepast. Alle assemblies waarnaar assembly_name verwezen , worden standaard als niet zichtbaar geüpload.

ONGECONTROLEERDE GEGEVENS

Standaard ALTER ASSEMBLY faalt als het de consistentie van individuele tabelrijen moet verifiëren. Deze optie maakt het mogelijk om de controles uit te stellen tot een later moment door gebruik te maken DBCC CHECKTABLEvan . Indien gespecificeerd, voert SQL Server de ALTER ASSEMBLY instructie uit, zelfs als er tabellen in de database zijn die de volgende voorwaarden bevatten:

  • Persisted columns berekenden die direct of indirect naar methoden in de assembly verwijzen, via Transact-SQL functies of methoden.

  • CHECK constraints die direct of indirect verwijzen naar methoden in de assemblage.

  • Kolommen van een door de gebruiker gedefinieerd clr-type die afhankelijk zijn van de assembly en het type implementeert een UserDefined (niet-Native) serialisatie-indeling.

  • Kolommen van een CLR-door de gebruiker gedefinieerd type die verwijzen naar weergaven die zijn gemaakt met .WITH SCHEMABINDING

Als er beperkingen CHECK zijn, worden ze uitgeschakeld en als onbetrouwbaar gemarkeerd. Tabellen met kolommen afhankelijk van de assembly worden gemarkeerd als ongecontroleerde data totdat die tabellen expliciet zijn gecontroleerd.

Alleen leden van de db_owner en db_ddlowner vaste databaserollen kunnen deze optie specificeren.

Vereist toestemming ALTER ANY SCHEMA om deze optie te specificeren.

Voor meer informatie, zie Implementatie van assemblies.

DROP FILE { file_name [ ,... n ] | ALLE }

Verwijdert de bestandsnaam die aan de assembly is gekoppeld, of alle bestanden die aan de assembly zijn gekoppeld, uit de database. Als het volgt ADD FILE wordt gebruikt, DROP FILE voert eerst uit. Hierdoor kun je een bestand vervangen door dezelfde bestandsnaam.

Note

Deze optie is niet beschikbaar in een besloten database of Azure SQL Database.

BESTAND TOEVOEGEN VAN { client_file_specifier [ ASfile_name ] | file_bits ZOALS file_name }

Uploadt een bestand dat aan de assembly wordt gekoppeld, zoals broncode, debugbestanden of andere gerelateerde informatie, in de server en zichtbaar maakt in de sys.assembly_files catalogusweergave. client_file_specifier specificeert de locatie vanwaar het bestand geüpload moet worden. file_bits kan in plaats daarvan worden gebruikt om de lijst van binaire waarden te specificeren waaruit het bestand bestaat. file_name specificeert de naam waaronder het bestand in de instantie van SQL Server moet worden opgeslagen. file_name moet worden gespecificeerd als file_bits is gespecificeerd, en is optioneel als client_file_specifier is gespecificeerd. Als file_name niet is gespecificeerd, wordt het file_name deel van client_file_specifier als file_name gebruikt.

Note

Deze optie is niet beschikbaar in een besloten database of Azure SQL Database.

Beveiliging van codetoegang wordt niet meer ondersteund

CLR maakt gebruik van CAS (Code Access Security) in .NET Framework, dat niet meer wordt ondersteund als een beveiligingsgrens. Een CLR-assembly die is gemaakt met PERMISSION_SET = SAFE kan mogelijk toegang krijgen tot externe systeembronnen, onbeheerde code aanroepen en sysadmin-bevoegdheden verkrijgen. In SQL Server 2017 (14.x) en latere versies verbetert de sp_configure optie, strikte beveiliging, de beveiliging van CLR-assembly's. clr strict security is standaard ingeschakeld en behandelt SAFE en EXTERNAL_ACCESS assembly's alsof ze zijn gemarkeerd als UNSAFE. De optie clr strict security kan worden uitgeschakeld voor achterwaartse compatibiliteit, maar wordt niet aanbevolen.

We raden aan alle assembly's te ondertekenen met een certificaat of asymmetrische sleutel, waarbij een bijbehorende login UNSAFE ASSEMBLY machtigingen heeft in de master-database. SQL Server-beheerders kunnen ook assembly's toevoegen aan een lijst met assembly's, die de Database Engine moet vertrouwen. Zie sys.sp_add_trusted_assemblyvoor meer informatie.

Remarks

ALTER ASSEMBLY verstoort geen lopende sessies die code draaien in de assembly die wordt aangepast. Huidige sessies voltooien de uitvoering door gebruik te maken van de ongewijzigde bits van de assembly.

Als de FROM clausule is gespecificeerd, ALTER ASSEMBLY werkt de assembly bij met betrekking tot de nieuwste kopieën van de geleverde modules. Omdat er CLR-functies, opgeslagen procedures, triggers, datatypes en door de gebruiker gedefinieerde aggregatefuncties kunnen zijn in de instantie van SQL Server die al zijn gedefinieerd tegen de assembly, bindt de ALTER ASSEMBLY instructie deze opnieuw aan de nieuwste implementatie van de assembly. Om deze rebinding te realiseren, moeten de methoden die naar CLR-functies, opgeslagen procedures en triggers worden toegewezen, nog steeds bestaan in de gewijzigde assembly met dezelfde handtekeningen. De klassen die CLR-gebruikersgedefinieerde types en door gebruikers gedefinieerde aggregatefuncties implementeren, moeten nog steeds voldoen aan de vereisten om een door de gebruiker gedefinieerd type of aggregate te zijn.

Caution

Als WITH UNCHECKED DATA niet is opgegeven, probeert SQL Server te voorkomen dat ALTER ASSEMBLY wordt uitgevoerd als de nieuwe assemblyversie van invloed is op bestaande gegevens in tabellen, indexen of andere permanente sites. SQL Server garandeert echter niet dat berekende kolommen, indexen, geïndexeerde weergaven of expressies consistent zullen zijn met de onderliggende routines en types wanneer de CLR-assembly wordt bijgewerkt. Wees voorzichtig bij het uitvoeren ALTER ASSEMBLY om zeker te zijn dat er geen mismatch is tussen het resultaat van een expressie en een waarde gebaseerd op die expressie die in de assembly is opgeslagen.

ALTER ASSEMBLY wijzigt de assemblyversie. De cultuur en het openbare-sleuteltoken van de assembly blijven hetzelfde.

De ALTER ASSEMBLY verklaring kan niet worden gebruikt om de volgende items te wijzigen:

  • De handtekeningen van CLR-functies, aggregatefuncties, opgeslagen procedures en triggers in een instantie van SQL Server die naar de assembly verwijzen. ALTER ASSEMBLYfaalt wanneer SQL Server de databaseobjecten van .NET Framework in SQL Server niet kan herbinden met de nieuwe versie van de assembly.

  • De handtekeningen van methoden in de assembly die vanuit andere assemblies worden aangeroepen.

  • De lijst van assemblies die afhankelijk zijn van de assembly, zoals vermeld in de DependentList eigenschap van de assembly.

  • De indexeerbaarheid van een methode, tenzij er geen indexen of persistente berekende kolommen zijn afhankelijk van die methode, direct of indirect.

  • Het FillRow methodenaam-attribuut voor CLR-tabelwaardige functies.

  • De Accumulate en Terminate methodehandtekening voor door de gebruiker gedefinieerde aggregaten.

  • Systeemassemblages.

  • Eigenaarschap van de vergadering. Gebruik in plaats daarvan ALTER AUTHORIZATION.

Daarnaast kunnen assemblies die door de gebruiker gedefinieerde types implementeren, ALTER ASSEMBLY worden gebruikt om alleen de volgende wijzigingen aan te brengen:

  • Het wijzigen van publieke methoden van de door de gebruiker gedefinieerde typeklasse, zolang handtekeningen of attributen niet worden gewijzigd.

  • Nieuwe openbare methoden worden toegevoegd.

  • Privémethoden op welke manier dan ook wijzigen.

Velden die zich bevatten binnen een native-geserialiseerd, door de gebruiker gedefinieerd type, inclusief dataleden of basisklassen, kunnen niet worden gewijzigd door gebruik te maken ALTER ASSEMBLYvan . Alle andere wijzigingen worden niet ondersteund.

Als ADD FILE FROM dat niet wordt gespecificeerd, ALTER ASSEMBLY worden alle bestanden die aan de assembly zijn gekoppeld verwijderd.

Als ALTER ASSEMBLY wordt uitgevoerd zonder de UNCHECKED dataclausule, worden controles uitgevoerd om te verifiëren dat de nieuwe assemblyversie bestaande data in tabellen niet beïnvloedt. Afhankelijk van de hoeveelheid data die gecontroleerd moet worden, kan deze stap invloed hebben op de prestaties.

Permissions

Vereist ALTER toestemming voor de bijeenkomst. Aanvullende vereisten zijn als volgt:

  • Om een assembly te wijzigen waarvan de bestaande permissieset is EXTERNAL_ACCESS, is toestemming op de server vereist EXTERNAL ACCESS ASSEMBLY .

  • Om een assembly te wijzigen waarvan de bestaande permissieset is UNSAFE , is toestemming op de server nodig UNSAFE ASSEMBLY .

  • Om de permissieset van een assembly naar te wijzigen, EXTERNAL_ACCESSis toestemming op de server vereist EXTERNAL ACCESS ASSEMBLY .

  • Om de permissieset van een assembly naar te wijzigen, UNSAFEis toestemming op de server vereist UNSAFE ASSEMBLY .

  • Specificeren WITH UNCHECKED DATA vereist ALTER ANY SCHEMA toestemming.

Machtigingen met clr strikte beveiliging

De volgende machtigingen zijn vereist om een CLR-assembly te wijzigen wanneer clr strict security ingeschakeld:

  • De gebruiker moet over de ALTER ASSEMBLY machtiging beschikken

  • En een van de volgende voorwaarden moet ook waar zijn:

    • De assembly wordt ondertekend met een certificaat of asymmetrische sleutel die een bijbehorende login heeft met de UNSAFE ASSEMBLY machtiging op de server. Het ondertekenen van de assemblage wordt aanbevolen.

    • De database heeft de TRUSTWORTHY eigenschap ingesteld op ON, en de database is het eigendom van een login met de UNSAFE ASSEMBLY machtiging op de server. Deze optie wordt niet aanbevolen.

Voor meer informatie over assemblage-permissies, zie Assemblages ontwerpen.

Examples

A. Ververs een assembly

Het volgende voorbeeld updatet assembly ComplexNumber naar de nieuwste kopie van de .NET Framework-modules die de implementatie bevatten.

Note

Assembly ComplexNumber kan worden gemaakt door de voorbeeldscripts uit te UserDefinedDataType voeren. Voor meer informatie, zie 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 ondersteunt geen referentie naar een bestand.

B. Voeg een bestand toe om aan een assembly te koppelen

Het volgende voorbeeld uploadt het broncodebestand Class1.cs om aan assembly MyClasste koppelen. Dit voorbeeld gaat ervan uit dat assembly MyClass al in de database is aangemaakt.

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

Important

Azure SQL Database ondersteunt geen referentie naar een bestand.

C. Verander de machtigingen van een vergadering

Het volgende voorbeeld verandert de machtigingsset van assembly ComplexNumber van SAFE naar EXTERNAL ACCESS.

ALTER ASSEMBLY ComplexNumber WITH PERMISSION_SET = EXTERNAL_ACCESS;