ALTER ASSEMBLY (Transact-SQL)
S’applique à : SQL Server Azure SQL Managed Instance
Modifie un assembly en changeant les propriétés de catalogue SQL Server d’un assembly. ALTER ASSEMBLY
actualise cette dernière copie des modules .NET Framework qui contiennent son implémentation et ajoute ou supprime les fichiers associés à celui-ci. Les assemblys sont créés à l’aide de CREATE ASSEMBLY.
Conventions de la syntaxe Transact-SQL
Syntaxe
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
Nom de l’assembly que vous souhaitez modifier. assembly_name doit déjà exister dans la base de données.
FROM <client_assembly_specifier> | <assembly_bits>
Met à jour un assembly avec la dernière copie des modules .NET Framework qui contiennent sa mise en œuvre. Cette option ne peut être utilisée que s'il n'existe aucun fichier associé avec l'assembly spécifié.
<client_assembly_specifier>
spécifie l’emplacement réseau ou local où se trouve l’assembly actuellement réactualisé. L’emplacement réseau inclut le nom de l’ordinateur, le nom du partage et un chemin d’accès au sein de ce partage. manifest_file_name spécifie le nom du fichier qui contient le manifeste de l’assembly.
Important
Azure SQL Database ne prend pas en charge le référencement d’un fichier.
<assembly_bits>
est la valeur binaire de l’assembly.
Les instructions distinctes ALTER ASSEMBLY
doivent être émises pour tous les assemblys dépendants qui nécessitent également la mise à jour.
PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE }
Spécifie la propriété de l'ensemble d'autorisation du code d'accès .NET Framework de l'assembly. Pour plus d’informations sur cette propriété, consultez CREATE ASSEMBLY.
L’option PERMISSION_SET
est affectée par l’option de sécurité stricte clr. Quand clr strict security
est activé, tous les assemblys sont traités en tant que UNSAFE
.
Les EXTERNAL_ACCESS
options et UNSAFE
les options ne sont pas disponibles dans une base de données autonome.
VISIBILITY = { ON | OFF }
Indique si l'assembly est visible pour créer des fonctions, des procédures stockées, des déclencheurs, des types et des fonctions d'agrégation définis par l'utilisateur CLR (Common Language Runtime). Si la valeur est définie OFF
, l’assembly est destiné à être appelé uniquement par d’autres assemblys. S’il existe déjà des objets de base de données CLR créés sur l’assembly, la visibilité de l’assembly ne peut pas être modifiée. Tout assembly référencé par assembly_name est chargé par défaut comme n’étant pas visible.
UNCHECKED DATA
Par défaut, ALTER ASSEMBLY
elle échoue si elle doit vérifier la cohérence des lignes de table individuelles. Cette option permet de reporter les vérifications jusqu’à une date ultérieure à l’aide DBCC CHECKTABLE
de . Si spécifié, SQL Server exécute l’instruction ALTER ASSEMBLY
même s’il existe des tables dans la base de données qui contiennent les conditions suivantes :
des colonnes calculées persistantes qui référencent directement ou indirectement des méthodes dans l'assembly, par le biais de fonctions ou de méthodes Transact-SQL ;
CHECK
contraintes qui référencent directement ou indirectement des méthodes dans l’assembly.Colonnes d’un type CLR défini par l’utilisateur qui dépendent de l’assembly, et le type implémente un
UserDefined
format de sérialisation (non-Native
) .Colonnes d’un type CLR défini par l’utilisateur qui référencent les vues créées à l’aide
WITH SCHEMABINDING
de .
Si des CHECK
contraintes sont présentes, elles sont désactivées et marquées comme non approuvées. Les tables qui contiennent des colonnes dépendant de l'assembly sont signalées comme contenant des données non vérifiées jusqu'à ce que ces tables soient explicitement vérifiées.
Seuls les membres des rôles de base de données fixes db_owner et db_ddlowner peuvent spécifier cette option.
Nécessite l’autorisation ALTER ANY SCHEMA
de spécifier cette option.
Pour plus d’informations, consultez Implémentation d’assemblys.
DROP FILE { file_name [ ,... n ] | ALL }
Supprime le nom de fichier associé à l'assembly ou tous les fichiers associés à l'assembly, de la base de données. S’il est utilisé avec ADD FILE
ce qui suit, DROP FILE
s’exécute en premier. Cela vous permet de remplacer un fichier par le même nom de fichier.
Remarque
Cette option n’est pas disponible dans une base de données autonome ou Azure SQL Database.
ADD FILE FROM { client_file_specifier [ AS file_name ] | file_bits AS file_name }
Charge un fichier à associer à l’assembly, tel que le code source, les fichiers de débogage ou d’autres informations connexes, dans le serveur et rendu visible dans l’affichage sys.assembly_files
catalogue. client_file_specifier spécifie l’emplacement à partir duquel le fichier est chargé. file_bits peut être utilisé à la place pour spécifier la liste des valeurs binaires qui constituent le fichier. file_name spécifie le nom sous lequel le fichier doit être stocké dans l’instance de SQL Server. file_name doit être spécifié si file_bits est spécifié, et est facultatif si client_file_specifier est spécifié. Si file_name n’est pas spécifié, la partie file_name de client_file_specifier est utilisée comme file_name.
Remarque
Cette option n’est pas disponible dans une base de données autonome ou Azure SQL Database.
La sécurité d’accès du code n’est plus prise en charge
CLR utilise la sécurité d’accès du code (CAS) dans le .NET Framework, qui n’est plus pris en charge comme limite de sécurité. Un assembly CLR créé avec PERMISSION_SET = SAFE
pourrait être en mesure d’accéder à des ressources système externes, d’appeler du code non managé et d’acquérir des privilèges sysadmin. Dans SQL Server 2017 (14.x) et versions ultérieures, l’option sp_configure
,sécurité clr stricte, améliore la sécurité des assemblys CLR. clr strict security
est activée par défaut et traite les assemblys SAFE
et EXTERNAL_ACCESS
comme s’ils étaient marqués UNSAFE
. L’option clr strict security
peut être désactivée pour assurer une compatibilité descendante, mais cela n’est pas recommandé.
Nous recommandons que tous les assemblys soient signés par un certificat ou une clé asymétrique avec une connexion correspondante à laquelle a été accordée l’autorisation UNSAFE ASSEMBLY
dans la base de données master
. Les administrateurs SQL Server peuvent également ajouter des assemblys à une liste d’assemblys, que le moteur de base de données doit approuver. Pour plus d’informations, consultez sys.sp_add_trusted_assembly.
Notes
ALTER ASSEMBLY
n’interrompt pas les sessions en cours d’exécution qui exécutent du code dans l’assembly en cours de modification. Ces sessions se terminent en utilisant les bits non modifiés de l'assembly.
Si la FROM
clause est spécifiée, ALTER ASSEMBLY
met à jour l’assembly par rapport aux dernières copies des modules fournis. Étant donné qu’il peut y avoir des fonctions CLR, des procédures stockées, des déclencheurs, des types de données et des fonctions d’agrégation définies par l’utilisateur dans l’instance de SQL Server qui sont déjà définies par rapport à l’assembly, l’instruction ALTER ASSEMBLY
les relie à la dernière implémentation de l’assembly. Pour cela, les méthodes qui effectuent le mappage avec les fonctions, les procédures stockées et les déclencheurs CLR doivent toujours exister dans l'assembly modifié, avec les mêmes signatures. Les classes qui mettent en œuvre des types et des fonctions d'agrégation CLR définis par l'utilisateur doivent toutefois satisfaire aux exigences inhérentes aux types ou agrégations définis par l'utilisateur.
Attention
S’il WITH UNCHECKED DATA
n’est pas spécifié, SQL Server tente d’empêcher ALTER ASSEMBLY
l’exécution si la nouvelle version d’assembly affecte les données existantes dans les tables, les index ou d’autres sites persistants. Toutefois, SQL Server ne garantit pas que les colonnes calculées, les index, les vues indexées ou les expressions sont cohérents avec les routines et types sous-jacents lorsque l’assembly CLR est mis à jour. Soyez prudent lorsque vous exécutez ALTER ASSEMBLY
pour vous assurer qu’il n’existe pas d’incompatibilité entre le résultat d’une expression et une valeur basée sur cette expression stockée dans l’assembly.
ALTER ASSEMBLY
modifie la version de l’assembly. La culture et le jeton de clé publique de l'assembly restent inchangés.
L’instruction ALTER ASSEMBLY
ne peut pas être utilisée pour modifier les éléments suivants :
Les signatures des fonctions, fonctions d'agrégation, procédures stockées et déclencheurs CLR d'une instance de SQL Server qui font référence à l'assembly. ALTER ASSEMBLY échoue quand SQL Server ne peut pas rebiner les objets de base de données .NET Framework dans SQL Server avec la nouvelle version de l’assembly.
Les signatures des méthodes de l'assembly qui sont appelées depuis d'autres assemblys.
Liste des assemblys qui dépendent de l’assembly, comme indiqué dans la
DependentList
propriété de l’assembly.La capacité d'indexation d'une méthode, à moins qu'il n'existe pas d'index ni de colonnes calculées persistantes dépendant de cette méthode, que ce soit directement ou indirectement.
Attribut de
FillRow
nom de méthode pour les fonctions table CLR.Signature
Accumulate
de méthode pourTerminate
les agrégats définis par l’utilisateur.Assemblys système.
Appartenance de l'assembly. Utilisez à la place ALTER AUTHORIZATION .
En outre, pour les assemblys qui implémentent des types définis par l’utilisateur, ALTER ASSEMBLY
ne peuvent être utilisés que pour apporter les modifications suivantes :
Modification des méthodes publiques de la classe de type définie par l’utilisateur, tant que les signatures ou les attributs ne sont pas modifiés.
Ajout de nouvelles méthodes publiques.
Modification des méthodes privées de quelque manière que ce soit.
Les champs contenus dans un type défini par l’utilisateur sérialisé natif, y compris les membres de données ou les classes de base, ne peuvent pas être modifiés à l’aide ALTER ASSEMBLY
de . Aucune autre modification n'est prise en charge.
Si ADD FILE FROM
ce n’est pas spécifié, ALTER ASSEMBLY
supprime les fichiers associés à l’assembly.
Si ALTER ASSEMBLY
elle est exécutée sans clause UNCHECKED
de données, les vérifications sont effectuées pour vérifier que la nouvelle version d’assembly n’affecte pas les données existantes dans les tables. En fonction de la quantité de données à vérifier, cette étape peut affecter les performances.
autorisations
Nécessite ALTER
une autorisation sur l’assembly. Il y a d'autres exigences :
Pour modifier un assembly dont le jeu d’autorisations existant est
EXTERNAL_ACCESS
, nécessiteEXTERNAL ACCESS ASSEMBLY
une autorisation sur le serveur.Pour modifier un assembly dont le jeu d’autorisations existant nécessite
UNSAFE
UNSAFE ASSEMBLY
une autorisation sur le serveur.Pour modifier le jeu d’autorisations d’un assembly
EXTERNAL_ACCESS
, nécessiteEXTERNAL ACCESS ASSEMBLY
une autorisation sur le serveur.Pour modifier le jeu d’autorisations d’un assembly
UNSAFE
, nécessiteUNSAFE ASSEMBLY
une autorisation sur le serveur.La spécification nécessite
ALTER ANY SCHEMA
uneWITH UNCHECKED DATA
autorisation.
Autorisations avec sécurité CLR stricte
Les autorisations suivantes sont nécessaires pour modifier un assembly CLR quand clr strict security
est activée :
L’utilisateur doit avoir l’autorisation
ALTER ASSEMBLY
.Et une des conditions suivantes doit également être remplie :
L’assembly est signé avec un certificat ou une clé asymétrique qui a une connexion correspondante avec l’autorisation
UNSAFE ASSEMBLY
sur le serveur. Signer l’assembly est recommandé.La base de données a la propriété
TRUSTWORTHY
définie surON
, et elle est détenue par une connexion qui a l’autorisationUNSAFE ASSEMBLY
sur le serveur. Cette option n’est pas recommandée.
Pour plus d’informations sur les jeux d’autorisations d’assembly, consultez Conception d’assemblys.
Exemples
R. Actualiser un assembly
L'exemple suivant met à jour l'assembly ComplexNumber
avec la dernière copie des modules .NET Framework qui conservent son implémentation.
Remarque
L’assembly ComplexNumber
peut être créé en exécutant les exemples de UserDefinedDataType
scripts. Pour plus d’informations, consultez Type défini par l’utilisateur.
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 ne prend pas en charge le référencement d’un fichier.
B. Ajouter un fichier à associer à un assembly
L'exemple suivant télécharge le fichier du code source Class1.cs
à associer à l'assembly MyClass
. Cet exemple suppose que l'assembly MyClass
est déjà créé dans la base de données.
ALTER ASSEMBLY MyClass
ADD FILE FROM 'C:\MyClassProject\Class1.cs';
Important
Azure SQL Database ne prend pas en charge le référencement d’un fichier.
C. Modifier les autorisations d’un assembly
L'exemple suivant change l'ensemble d'autorisations de l'assembly ComplexNumber
pour passer de SAFE à EXTERNAL ACCESS
.
ALTER ASSEMBLY ComplexNumber WITH PERMISSION_SET = EXTERNAL_ACCESS;