Ajout de colonnes à une table répliquée

Comment ajouter des colonnes à une table répliquée dans SQL Server.

Lorsque vous vous ajoutez des tables dans la réplication transactionnelle et que vous voulez que La réplication synchronise les ajouts de colonnes sur des applications tierces, vous pouvez être confrontés à un problème de permission.

Par défaut, la réplication oblige l’utilisateur qui modifie la table et ajoute une colonne à être soit sysadmin, soit db_owner.

Vous pouvez avoir des applications qui n’ont pas ces permissions et qui doivent ajouter des colonnes à des tables répliquées.

Pour adresser ce problème, nous pouvons tricher avec le trigger DDL de base de données qui est déclenché lors d’un alter table, et ajouter à ce trigger l’option execute as self.

lorsque vous faites cette modification, vous devez être soit sysadmin, soit db_owner, et l’exécution as self va reprendre le même contexte d’exécution dans le trigger que vous avez lorsque vous le modifiez.

Microsoft, pour protéger la modification de ce trigger a créé un autre trigger, qu’il suffit de désactiver Avant la modification et de réactiver après la modification.

Utiliser le code suivant pour modifier le trigger DDL de base de données tr_MStran_altertable afin d’ajouter l’option execute as self :

USE [database_name]
GO

SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO

DISABLE trigger [tr_MStran_altertrigger] on database;
GO

ALTER trigger [tr_MStran_altertable] on database
WITH EXECUTE AS self
FOR ALTER_TABLE
as

    set ANSI_NULLS ON
    set ANSI_PADDING ON
    set ANSI_WARNINGS ON
    set ARITHABORT ON
    set CONCAT_NULL_YIELDS_NULL ON
    set NUMERIC_ROUNDABORT OFF
    set QUOTED_IDENTIFIER ON

    declare @EventData xml
    set @EventData=EventData()

    exec sys.sp_MStran_ddlrepl @EventData, 1
GO

ENABLE trigger [tr_MStran_altertrigger] on database;
GO

[Besoin de services avec SQL Server ? Contactez-moi]