Partage via


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

Remarque

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 (12.x) et versions antérieures, consultez la Documentation sur les versions antérieures.

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 CHECKTABLEde . 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 SCHEMABINDINGde .

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 au 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 peut-être être en mesure d’accéder aux 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, clr sp_configure strict security, 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 la compatibilité descendante, mais n’est pas recommandée.

Nous vous recommandons de signer tous les assemblys par un certificat ou une clé asymétrique, avec une connexion correspondante qui UNSAFE ASSEMBLY a reçu l’autorisation dans la master base de données. 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 pour Terminate 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 ASSEMBLYde . 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écessite EXTERNAL 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écessite EXTERNAL ACCESS ASSEMBLY une autorisation sur le serveur.

  • Pour modifier le jeu d’autorisations d’un assembly UNSAFE, nécessite UNSAFE ASSEMBLY une autorisation sur le serveur.

  • La spécification nécessite ALTER ANY SCHEMA une WITH 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 sur ON, et elle est détenue par une connexion qui a l’autorisation UNSAFE 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;