ALTER ASSEMBLY (Transact-SQL)
Si applica a: SQL Server Istanza gestita di SQL di Azure
Modifica un assembly cambiando le proprietà di catalogo di SQL Server di un assembly. ALTER ASSEMBLY
lo aggiorna alla copia più recente dei moduli .NET Framework che contengono l'implementazione e aggiunge o rimuove i file associati. Gli assembly vengono creati tramite l'istruzione CREATE ASSEMBLY.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
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
Argomenti
assembly_name
Nome dell'assembly da modificare. assembly_name non deve essere già esistente nel database.
FROM <client_assembly_specifier> | <assembly_bits>
Aggiorna un assembly in base alla copia più recente dei moduli .NET Framework contenenti la relativa implementazione. È possibile usare questa opzione solo se non esistono file associati all'assembly specificato.
<client_assembly_specifier>
specifica il percorso di rete o il percorso locale in cui si trova l'assembly in fase di aggiornamento. Il percorso di rete include il nome del computer, il nome della condivisione e un percorso all'interno di tale condivisione. manifest_file_name specifica il nome del file contenente il manifesto dell'assembly.
Importante
database SQL di Azure non supporta il riferimento a un file.
<assembly_bits>
rappresenta il valore binario dell'assembly.
Le istruzioni separate ALTER ASSEMBLY
devono essere rilasciate per tutti gli assembly dipendenti che richiedono anche l'aggiornamento.
PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE }
Specifica la proprietà del set di autorizzazioni per l'accesso al codice NET Framework dell'assembly. Per altre informazioni su questa proprietà, vedere CREATE ASSEMBLY.
L'opzione PERMISSION_SET
è interessata dall'opzione di sicurezza clr strict. Quando l'opzione clr strict security
è abilitata, tutti gli assembly vengono considerati come UNSAFE
.
Le EXTERNAL_ACCESS
opzioni e UNSAFE
non sono disponibili in un database indipendente.
VISIBILITY = { ON | OFF }
Specifica se l'assembly risulta visibile per la creazione in base a esso di funzioni CLR (Common Language Runtime), stored procedure, trigger, tipi definiti dall'utente e funzioni di aggregazione definite dall'utente. Se impostato su OFF
, l'assembly deve essere chiamato solo da altri assembly. Se nell'assembly sono già stati creati oggetti di database CLR esistenti, la visibilità dell'assembly non può essere modificata. Per impostazione predefinita, gli eventuali assembly a cui assembly_name fa riferimento vengono caricati come non visibili.
UNCHECKED DATA
Per impostazione predefinita, ALTER ASSEMBLY
ha esito negativo se deve verificare la coerenza delle singole righe della tabella. Questa opzione consente di posticipare i controlli fino a un secondo momento usando DBCC CHECKTABLE
. Se specificato, SQL Server esegue l'istruzione ALTER ASSEMBLY
anche se nel database sono presenti tabelle che contengono le condizioni seguenti:
Colonne calcolate persistenti che fanno riferimento direttamente o indirettamente ai metodi dell'assembly tramite funzioni o metodi Transact-SQL.
CHECK
vincoli che fanno riferimento direttamente o indirettamente ai metodi nell'assembly.Colonne di un tipo CLR definito dall'utente che dipendono dall'assembly e il tipo implementa un
UserDefined
formato di serializzazione (non).Native
Colonne di un tipo CLR definito dall'utente che fanno riferimento alle viste create tramite
WITH SCHEMABINDING
.
CHECK
Se sono presenti vincoli, vengono disabilitati e contrassegnati come non attendibili. Le tabelle contenenti colonne che dipendono dall'assembly vengono contrassegnate come contenenti dati non controllati finché tali tabelle non vengono verificate in modo esplicito.
Solo i membri dei ruoli predefiniti del database db_owner e db_ddlowner possono specificare questa opzione.
Richiede l'autorizzazione ALTER ANY SCHEMA
per specificare questa opzione.
Per altre informazioni, vedere Implementazione di assembly.
DROP FILE { file_name [ ,... n ] | ALL }
Rimuove il nome file associato all'assembly oppure tutti i file associati all'assembly dal database. Se usato con ADD FILE
il codice seguente, DROP FILE
viene eseguito per primo. In questo modo è possibile sostituire un file con lo stesso nome di file.
Nota
Questa opzione non è disponibile in un database indipendente o database SQL di Azure.
ADD FILE FROM { client_file_specifier [ AS file_name ] | file_bits AS file_name }
Carica un file da associare all'assembly, ad esempio codice sorgente, file di debug o altre informazioni correlate, nel server e reso visibile nella vista del sys.assembly_files
catalogo. client_file_specifier specifica il percorso dal quale caricare il file. In alternativa è possibile usare file_bits per specificare l'elenco di valori binari che compongono il file. file_name specifica il nome in base al quale il file deve essere archiviato nell'istanza di SQL Server. Specificare file_name se file_bits è specificato. È invece facoltativo se è specificato client_file_specifier. Se file_name non viene specificato, la parte file_name di client_file_specifier viene usata come file_name.
Nota
Questa opzione non è disponibile in un database indipendente o database SQL di Azure.
La sicurezza dall’accesso di codice non è più supportata
CLR usa la Sicurezza dall'accesso di codice (CAS, Code Access Security) in .NET Framework, non più supportata come limite di sicurezza. Un assembly CLR creato con PERMISSION_SET = SAFE
potrebbe essere in grado di accedere alle risorse di sistema esterne, chiamare codice non gestito e acquisire privilegi sysadmin. In SQL Server 2017 (14.x) e versioni successive, l'opzione sp_configure
clr strict security migliora la sicurezza degli assembly CLR. clr strict security
è abilitata per impostazione predefinita e considera gli assembly CLR SAFE
e UNSAFE
come se fossero contrassegnati EXTERNAL_ACCESS
. È possibile disabilitare l'opzione clr strict security
per la compatibilità con le versioni precedenti, ma questa operazione è sconsigliata.
Si consiglia di firmare tutti gli assembly con un certificato o una chiave asimmetrica tramite un account di accesso corrispondente che disponga dell'autorizzazione UNSAFE ASSEMBLY
nel database master
. Gli amministratori di SQL Server possono anche aggiungere assembly a un elenco di assembly, considerato attendibile dal motore di database. Per altre, vedere sys.sp_add_trusted_assembly.
Osservazioni:
ALTER ASSEMBLY
non interrompe le sessioni attualmente in esecuzione che eseguono codice nell'assembly da modificare. Le sessioni correnti completano l'esecuzione tramite l'utilizzo dei bit non modificati dell'assembly.
Se la FROM
clausola viene specificata, ALTER ASSEMBLY
aggiorna l'assembly in relazione alle copie più recenti dei moduli forniti. Poiché potrebbero essere presenti funzioni CLR, stored procedure, trigger, tipi di dati e funzioni di aggregazione definite dall'utente nell'istanza di SQL Server già definite per l'assembly, l'istruzione ALTER ASSEMBLY
li riassocia all'implementazione più recente dell'assembly. Per eseguire questa riassociazione, è necessario che i metodi che eseguono il mapping alle funzioni CLR, alle stored procedure e ai trigger esistano nell'assembly modificati con le stesse firme. Le classi che implementano i tipi CLR definiti dall'utente e le funzioni di aggregazione definite dall'utente devono continuare a soddisfare i requisiti richiesti per i tipi e le funzioni di aggregazione definiti dall'utente.
Attenzione
Se WITH UNCHECKED DATA
non è specificato, SQL Server tenta di impedire ALTER ASSEMBLY
l'esecuzione se la nuova versione dell'assembly influisce sui dati esistenti in tabelle, indici o altri siti persistenti. SQL Server, tuttavia, non garantisce che le colonne calcolate, gli indici, le viste indicizzate o le espressioni siano coerenti con le routine e i tipi sottostanti quando viene aggiornato l'assembly CLR. Prestare attenzione quando si esegue ALTER ASSEMBLY
per assicurarsi che non vi sia una mancata corrispondenza tra il risultato di un'espressione e un valore basato su tale espressione archiviata nell'assembly.
ALTER ASSEMBLY
modifica la versione dell'assembly. La lingua e il token di chiave pubblica dell'assembly restano invariati.
L'istruzione ALTER ASSEMBLY
non può essere usata per modificare gli elementi seguenti:
Le firme di funzioni CLR, le funzioni di aggregazione, le stored procedure e i trigger in un'istanza di SQL Server che fanno riferimento all'assembly. L'istruzione ALTER ASSEMBLY ha esito negativo quando SQL Server non riesce a riassociare oggetti di database .NET Framework in SQL Server con la nuova versione dell'assembly.
Le firme dei metodi nell'assembly chiamati da altri assembly.
Elenco di assembly che dipendono dall'assembly, come indicato nella
DependentList
proprietà dell'assembly.L'indicizzabilità di un metodo a meno che non esista alcun indice o colonna calcolata persistente che dipende da tale metodo, direttamente o indirettamente.
Attributo
FillRow
del nome del metodo per le funzioni CLR con valori di tabella.Firma del
Accumulate
metodo eTerminate
per le aggregazioni definite dall'utente.Gli assembly di sistema.
La proprietà degli assembly. In alternativa, usare ALTER AUTHORIZATION .
Inoltre, per gli assembly che implementano tipi definiti dall'utente, ALTER ASSEMBLY
è possibile usare solo le modifiche seguenti:
Modifica dei metodi pubblici della classe del tipo definito dall'utente, purché le firme o gli attributi non siano modificati.
Aggiunta di nuovi metodi pubblici.
Modifica di metodi privati.
I campi contenuti in un tipo definito dall'utente serializzato nativo, inclusi i membri dati o le classi di base, non possono essere modificati tramite ALTER ASSEMBLY
. Tutte le altre modifiche non sono supportate.
Se ADD FILE FROM
non viene specificato, ALTER ASSEMBLY
elimina tutti i file associati all'assembly.
Se ALTER ASSEMBLY
viene eseguito senza la UNCHECKED
clausola dati, vengono eseguiti controlli per verificare che la nuova versione dell'assembly non influisca sui dati esistenti nelle tabelle. A seconda della quantità di dati da controllare, questo passaggio potrebbe influire sulle prestazioni.
Autorizzazioni
È necessaria ALTER
l'autorizzazione per l'assembly. È inoltre necessario disporre dei requisiti seguenti:
Per modificare un assembly il cui set di autorizzazioni esistente è
EXTERNAL_ACCESS
, è necessariaEXTERNAL ACCESS ASSEMBLY
l'autorizzazione per il server.Per modificare un assembly il cui set di autorizzazioni esistente è
UNSAFE
necessariaUNSAFE ASSEMBLY
l'autorizzazione per il server.Per modificare il set di autorizzazioni di un assembly in
EXTERNAL_ACCESS
, è necessariaEXTERNAL ACCESS ASSEMBLY
l'autorizzazione per il server.Per modificare il set di autorizzazioni di un assembly in
UNSAFE
, è necessariaUNSAFE ASSEMBLY
l'autorizzazione per il server.Per specificare
WITH UNCHECKED DATA
è necessariaALTER ANY SCHEMA
l'autorizzazione.
Autorizzazioni con CLR strict security
Sono necessarie le autorizzazioni seguenti per modificare un assembly CLR con clr strict security
abilitata:
L'utente deve disporre dell'autorizzazione
ALTER ASSEMBLY
Inoltre, una delle condizioni seguenti deve essere rispettata:
L'assembly è firmato con un certificato o una chiave asimmetrica con un account di accesso corrispondente con l'autorizzazione
UNSAFE ASSEMBLY
nel server. È consigliabile firmare l'assembly.La proprietà
TRUSTWORTHY
del database è impostata suON
e il database è di proprietà di un accesso che dispone dell'autorizzazioneUNSAFE ASSEMBLY
nel server. Questa opzione non è consigliata.
Per altre informazioni sui set di autorizzazioni di assembly, vedere Progettazione di assembly.
Esempi
R. Aggiornare un assembly
Nell'esempio seguente l'assembly ComplexNumber
viene aggiornato in base alla copia più recente dei moduli di .NET Framework contenenti la relativa implementazione.
Nota
L'assembly ComplexNumber
può essere creato eseguendo gli UserDefinedDataType
script di esempio. Per altre informazioni, vedere Tipo definito dall'utente.
ALTER ASSEMBLY ComplexNumber
FROM 'C:\Program Files\Microsoft SQL Server\130\Tools\Samples\1033\Engine\Programmability\CLR\UserDefinedDataType\CS\ComplexNumber\obj\Debug\ComplexNumber.dll'
Importante
database SQL di Azure non supporta il riferimento a un file.
B. Aggiungere un file da associare a un assembly
Nell'esempio seguente viene caricato il file del codice sorgente Class1.cs
da associare all'assembly MyClass
. In questo esempio si presuppone che l'assembly MyClass
sia già stato creato nel database.
ALTER ASSEMBLY MyClass
ADD FILE FROM 'C:\MyClassProject\Class1.cs';
Importante
database SQL di Azure non supporta il riferimento a un file.
C. Modificare le autorizzazioni di un assembly
Nell'esempio seguente il set di autorizzazioni dell'assembly ComplexNumber
viene modificato da SAFE a EXTERNAL ACCESS
.
ALTER ASSEMBLY ComplexNumber WITH PERMISSION_SET = EXTERNAL_ACCESS;