ALTER ASSEMBLY (Transact-SQL)

Gilt für: SQL Server Azure SQL Managed Instance

Ändert eine Assembly durch Ändern der SQL Server-Katalogeigenschaften der Assembly. ALTER ASSEMBLY aktualisiert sie auf die neueste Kopie der .NET Framework-Module, die ihre Implementierung enthalten, und fügt dateien hinzu oder entfernt sie. Assemblys werden mithilfe von CREATE ASSEMBLY erstellt.

Transact-SQL-Syntaxkonventionen

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

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

assembly_name

Der Name der Assembly, die Sie ändern möchten. assembly_name muss bereits in der Datenbank vorhanden sein.

FROM <client_assembly_specifier> | <assembly_bits>

Aktualisiert eine Assembly auf die letzte Kopie der .NET Framework-Module, die die Implementierung der Assembly enthalten. Diese Option kann nur verwendet werden, wenn der angegebenen Assembly keine Dateien zugeordnet sind.

<client_assembly_specifier> gibt den Netzwerk- oder lokalen Speicherort der zu aktualisierenden Assembly an. Der Netzwerkspeicherort enthält den Computernamen, den Freigabenamen und einen Pfad innerhalb dieser Freigabe. manifest_file_name gibt den Namen der Datei an, die das Manifest der Assembly enthält.

Wichtig

Azure SQL-Datenbank wird das Verweisen auf eine Datei nicht unterstützt.

<assembly_bits> ist der Binärwert für die Assembly.

Für abhängige Assemblys, die ebenfalls eine Aktualisierung erfordern, müssen separate ALTER ASSEMBLY Anweisungen ausgestellt werden.

PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE }

Gibt die Eigenschaft des Berechtigungssatzes für den .NET Framework-Codezugriff der Assembly an. Weitere Informationen zu dieser Eigenschaft finden Sie unter CREATE ASSEMBLY.

Die PERMISSION_SET Option ist von der clr strict-Sicherheitsoption betroffen. Wenn clr strict security aktiviert ist, werden alle Assemblys als UNSAFE behandelt.

Die EXTERNAL_ACCESS Optionen sind UNSAFE in einer enthaltenen Datenbank nicht verfügbar.

VISIBILITY = { ON | OFF }

Gibt an, ob die Assembly zum Erstellen von CLR-Funktionen (Common Language Runtime), gespeicherten Prozeduren, Triggern, benutzerdefinierten Typen und benutzerdefinierten Aggregatfunktionen für die Assembly sichtbar ist. Bei Festlegung auf OFF, soll die Assembly nur von anderen Assemblys aufgerufen werden. Wenn bereits CLR-Datenbankobjekte für die Assembly erstellt wurden, kann die Sichtbarkeit der Assembly nicht geändert werden. Alle Assemblys, auf die durch assembly_name verwiesen wird, werden standardmäßig als nicht sichtbar hochgeladen.

UNCHECKED DATA

Schlägt standardmäßig fehl, ALTER ASSEMBLY wenn die Konsistenz einzelner Tabellenzeilen überprüft werden muss. Diese Option ermöglicht das Verschieben der Prüfungen bis zu einem späteren Zeitpunkt mithilfe DBCC CHECKTABLEvon . Wenn angegeben, führt SQL Server die ALTER ASSEMBLY Anweisung aus, auch wenn in der Datenbank Tabellen vorhanden sind, die die folgenden Bedingungen enthalten:

  • Persistente berechnete Spalten, die entweder direkt oder indirekt über Transact-SQL-Funktionen oder -Methoden auf Methoden in der Assembly verweisen.

  • CHECK Einschränkungen, die direkt oder indirekt auf Methoden in der Assembly verweisen.

  • Spalten eines benutzerdefinierten CLR-Typs, die von der Assembly abhängen, und der Typ implementiert ein UserDefined (nicht-Native) Serialisierungsformat.

  • Spalten eines benutzerdefinierten CLR-Typs, die mithilfe WITH SCHEMABINDINGvon .

Wenn Einschränkungen CHECK vorhanden sind, sind sie deaktiviert und als nicht vertrauenswürdig gekennzeichnet. Alle Tabellen, die von der Assembly abhängige Spalten enthalten, werden so gekennzeichnet, dass sie nicht überprüfte Daten enthalten. Dies wird erst nach einer expliziten Überprüfung dieser Tabellen geändert.

Nur Mitglieder der festen Datenbankrolle db_owner und db_ddlowner können diese Option angeben.

Erfordert die ALTER ANY SCHEMA Berechtigung zum Angeben dieser Option.

Weitere Informationen finden Sie unter Implementieren von Assemblys.

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

Entfernt den dieser Assembly zugeordneten Dateinamen oder alle dieser Assembly zugeordneten Dateien aus der Datenbank. Wenn sie mit ADD FILE diesem Folgenden verwendet wird, DROP FILE wird zuerst ausgeführt. Auf diese Weise können Sie eine Datei durch denselben Dateinamen ersetzen.

Hinweis

Diese Option ist in einer enthaltenen Datenbank oder Azure SQL-Datenbank nicht verfügbar.

ADD FILE FROM { client_file_specifier [ AS file_name ] | file_bits AS file_name }

Lädt eine Datei hoch, die der Assembly zugeordnet werden soll, z. B. Quellcode, Debugdateien oder andere verwandte Informationen, auf den Server und in der sys.assembly_files Katalogansicht sichtbar gemacht. client_file_specifier gibt den Speicherort an, von dem die Datei hochgeladen werden soll. file_bits kann stattdessen verwendet werden, um die Liste der Binärwerte anzugeben, aus denen die Datei besteht. file_name gibt den Namen an, unter dem die Datei in der Instanz von SQL Server gespeichert werden soll. file_name muss angegeben werden, wenn file_bits angegeben ist. Die Angabe ist optional, wenn client_file_specifier angegeben ist. Wenn file_name nicht angegeben ist, wird der file_name Teil der client_file_specifier als file_name verwendet.

Hinweis

Diese Option ist in einer enthaltenen Datenbank oder Azure SQL-Datenbank nicht verfügbar.

Codezugriffssicherheit wird nicht mehr unterstützt

CLR verwendet die Codezugriffssicherheit (Code Access Security, CAS) im .NET Framework, die nicht länger als Sicherheitsbegrenzung unterstützt wird. Eine CLR-Assembly, die erstellt wurde, PERMISSION_SET = SAFE kann möglicherweise auf externe Systemressourcen zugreifen, nicht verwalteten Code aufrufen und sysadmin-Berechtigungen erwerben. In SQL Server 2017 (14.x) und höheren Versionen verbessert die sp_configure Option clr strict security die Sicherheit von CLR-Assemblys. clr strict security ist standardmäßig aktiviert und behandelt SAFE- und EXTERNAL_ACCESS-Assemblys so, als wären Sie als UNSAFE gekennzeichnet. Die clr strict security Option kann aus Gründen der Abwärtskompatibilität deaktiviert werden, wird jedoch nicht empfohlen.

Es wird empfohlen, alle Assemblys anhand eines Zertifikats oder asymmetrischen Schlüssels mit einer entsprechenden Anmeldung zu signieren, die in der master Datenbank berechtigungen erteilt UNSAFE ASSEMBLY wurde. SQL Server-Administratoren können auch Assemblys einer Liste von Assemblys hinzufügen, der die Datenbank-Engine vertrauen sollte. Weitere Informationen finden Sie unter sys.sp_add_trusted_assembly.

Hinweise

ALTER ASSEMBLY stört derzeit ausgeführte Sitzungen, die Code in der Assembly ausführen, die geändert werden. Die Ausführung wird von den aktuellen Sitzungen abgeschlossen, indem die nicht geänderten Bits der Assembly verwendet werden.

Wenn die FROM Klausel angegeben ist, ALTER ASSEMBLY aktualisiert sie die Assembly in Bezug auf die neuesten Kopien der bereitgestellten Module. Da es möglicherweise CLR-Funktionen, gespeicherte Prozeduren, Trigger, Datentypen und benutzerdefinierte Aggregatfunktionen in der Instanz von SQL Server gibt, die bereits für die Assembly definiert sind, wird die ALTER ASSEMBLY Anweisung an die neueste Implementierung der Assembly neu gebunden. Für diese Neubindung müssen die Methoden, die den CLR-Funktionen, gespeicherten Prozeduren und Triggern zugeordnet sind, in der geänderten Assembly mit denselben Signaturen vorhanden sein. Die Klassen, die CLR-benutzerdefinierte Typen und benutzerdefinierte Aggregatfunktionen implementieren, müssen weiterhin die Anforderungen für den benutzerdefinierten Typ oder das benutzerdefinierte Aggregat erfüllen.

Achtung

Wenn WITH UNCHECKED DATA nicht angegeben, versucht SQL Server, die Ausführung zu verhindern ALTER ASSEMBLY , wenn sich die neue Assemblyversion auf vorhandene Daten in Tabellen, Indizes oder anderen persistenten Websites auswirkt. SQL Server garantiert jedoch nicht, dass berechnete Spalten, Indizes, indizierte Ansichten oder Ausdrücke mit den zugrunde liegenden Routinen und Typen konsistent sind, wenn die CLR-Assembly aktualisiert wird. Achten Sie bei der Ausführung ALTER ASSEMBLY darauf, dass kein Konflikt zwischen dem Ergebnis eines Ausdrucks und einem Wert besteht, der auf dem in der Assembly gespeicherten Ausdruck basiert.

ALTER ASSEMBLY ändert die Assemblyversion. Das Token für Sprachraum und öffentlichen Schlüssel der Assembly wird nicht geändert.

Die ALTER ASSEMBLY Anweisung kann nicht verwendet werden, um die folgenden Elemente zu ändern:

  • Die Signaturen von CLR-Funktionen, Aggregatfunktionen, gespeicherten Prozeduren und Triggern in einer Instanz von SQL Server, die auf die Assembly verweisen. ALTER ASSEMBLY schlägt fehl, wenn SQL Server .NET Framework-Datenbankobjekte nicht mit der neuen Version der Assembly in SQL Server neu binden kann.

  • Die Signaturen von Methoden in der Assembly, die von anderen Assemblys aufgerufen werden.

  • Die Liste der Assemblys, die von der Assembly abhängig sind, wie in der DependentList Eigenschaft der Assembly verwiesen wird.

  • Die Indizierbarkeit einer Methode, es sei denn, es hängen keine Indizes oder persistenten berechneten Spalten direkt oder indirekt von dieser Methode ab.

  • Das FillRow Methodennamen-Attribut für CLR-Tabellenwertfunktionen.

  • Die Accumulate Signatur der Terminate Methode für benutzerdefinierte Aggregate.

  • Die Systemassemblys.

  • Der Assemblybesitz. Verwenden Sie stattdessen ALTER AUTHORIZATION .

Darüber hinaus können Assemblys, die benutzerdefinierte Typen implementieren, ALTER ASSEMBLY nur für folgende Änderungen verwendet werden:

  • Ändern öffentlicher Methoden der benutzerdefinierten Typklasse, solange Signaturen oder Attribute nicht geändert werden.

  • Hinzufügen von neuen öffentlichen Methoden.

  • Ändern von privaten Methoden auf beliebige Weise.

Felder, die in einem systemeigenen serialisierten benutzerdefinierten Typ enthalten sind, einschließlich Datenmember oder Basisklassen, können nicht mithilfe ALTER ASSEMBLYvon Alle anderen Änderungen werden nicht unterstützt.

Falls ADD FILE FROM nicht angegeben, fallen alle Dateien ab, ALTER ASSEMBLY die der Assembly zugeordnet sind.

Wenn ALTER ASSEMBLY ohne die UNCHECKED Datenklausel ausgeführt wird, werden Überprüfungen durchgeführt, um zu überprüfen, ob die neue Assemblyversion keine Auswirkungen auf vorhandene Daten in Tabellen hat. Abhängig von der Datenmenge, die überprüft werden muss, wirkt sich dieser Schritt möglicherweise auf die Leistung aus.

Berechtigungen

Erfordert ALTER berechtigungen für die Assembly. Es gelten folgende zusätzliche Anforderungen:

  • Zum Ändern einer Assembly, deren vorhandener Berechtigungssatz lautet EXTERNAL_ACCESS, ist die Berechtigung auf dem Server erforderlich EXTERNAL ACCESS ASSEMBLY .

  • Um eine Assembly zu ändern, deren vorhandene Berechtigungssatz UNSAFE die Berechtigung auf dem Server erfordert UNSAFE ASSEMBLY .

  • Um den Berechtigungssatz einer Assembly zu EXTERNAL_ACCESSändern, ist die Berechtigung auf dem Server erforderlich EXTERNAL ACCESS ASSEMBLY .

  • Um den Berechtigungssatz einer Assembly zu UNSAFEändern, ist die Berechtigung auf dem Server erforderlich UNSAFE ASSEMBLY .

  • Für die Angabe WITH UNCHECKED DATA ist eine Berechtigung erforderlich ALTER ANY SCHEMA .

Berechtigungen mit CLR Strict Security

Die folgenden Berechtigungen werden zum Ändern einer CLR-Assembly benötigt, wenn clr strict security aktiviert ist:

  • Der Benutzer muss über die ALTER ASSEMBLY-Berechtigung verfügen.

  • Eine der folgenden Bedingungen muss ebenfalls erfüllt sein:

    • Die Assembly ist mit einem Zertifikat oder asymmetrischen Schlüssel signiert, der über einen entsprechenden Anmeldenamen mit der UNSAFE ASSEMBLY-Berechtigung auf dem Server verfügt. Es wird empfohlen, die Assembly zu signieren.

    • Die TRUSTWORTHY-Eigenschaft der Datenbank ist auf ON festgelegt, und der Besitzer der Datenbank ist ein Anmeldename, der über UNSAFE ASSEMBLY-Berechtigungen auf dem Server verfügt. Von der Verwendung dieser Option wird abgeraten.

Weitere Informationen zu Assemblyberechtigungssätzen finden Sie unter Entwerfen von Assemblys.

Beispiele

A. Aktualisieren einer Assembly

Das folgende Beispiel aktualisiert die Assembly ComplexNumber auf die letzte Kopie der .NET Framework-Module, die die Implementierung der Assembly enthalten.

Hinweis

Assembly ComplexNumber kann durch Ausführen der UserDefinedDataType Beispielskripts erstellt werden. Weitere Informationen finden Sie unter Benutzerdefinierter Typ.

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

Wichtig

Azure SQL-Datenbank wird das Verweisen auf eine Datei nicht unterstützt.

B. Hinzufügen einer Datei, die einer Assembly zugeordnet werden soll

Im folgenden Beispiel wird die Quellcodedatei Class1.cs hochgeladen, die der MyClass-Assembly zugeordnet werden soll. In diesem Beispiel wird davon ausgegangen, dass die MyClass-Assembly bereits in der Datenbank vorhanden ist.

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

Wichtig

Azure SQL-Datenbank wird das Verweisen auf eine Datei nicht unterstützt.

C. Ändern der Berechtigungen einer Assembly

Im folgenden Beispiel wird der Berechtigungssatz der ComplexNumber-Assembly von SAFE in EXTERNAL ACCESS geändert.

ALTER ASSEMBLY ComplexNumber WITH PERMISSION_SET = EXTERNAL_ACCESS;