Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
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.
CHECKEinschrä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 mit PERMISSION_SET = SAFE erstellt wurde, kann womöglich auf externe Systemressourcen zugreifen, nicht verwalteten Code aufrufen und sysadmin-Privilegien 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 Option clr strict security kann für die Abwärtskompatibilität deaktiviert werden, es wird jedoch nicht empfohlen.
Wir empfehlen, dass Sie alle Assemblys durch ein Zertifikat oder einen asymmetrischen Schlüssel mit einem entsprechenden Anmeldenamen signieren, dem UNSAFE ASSEMBLY-Berechtigung für die master-Datenbank erteilt 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
DependentListEigenschaft 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
FillRowMethodennamen-Attribut für CLR-Tabellenwertfunktionen.Die
AccumulateSignatur derTerminateMethode 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 erforderlichEXTERNAL ACCESS ASSEMBLY.Um eine Assembly zu ändern, deren vorhandene Berechtigungssatz
UNSAFEdie Berechtigung auf dem Server erfordertUNSAFE ASSEMBLY.Um den Berechtigungssatz einer Assembly zu
EXTERNAL_ACCESSändern, ist die Berechtigung auf dem Server erforderlichEXTERNAL ACCESS ASSEMBLY.Um den Berechtigungssatz einer Assembly zu
UNSAFEändern, ist die Berechtigung auf dem Server erforderlichUNSAFE ASSEMBLY.Für die Angabe
WITH UNCHECKED DATAist eine Berechtigung erforderlichALTER 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 aufONfestgelegt, und der Besitzer der Datenbank ist ein Anmeldename, der überUNSAFE 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;