Ajout de colonnes à une table répliquée
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