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
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 CHECKTABLE
von . 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 SCHEMABINDING
von .
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
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 derTerminate
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 ASSEMBLY
von 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
UNSAFE
die 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 DATA
ist 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 aufON
festgelegt, 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;