<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le blog de SQLpro &#187; pistage</title>
	<atom:link href="https://blog.developpez.com/sqlpro/ptag/pistage/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/sqlpro</link>
	<description>Le SQL pour SQL Server, PostGreSQL et tous les autres SGBDR</description>
	<lastBuildDate>Thu, 15 Oct 2020 12:59:17 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Audit trail générique</title>
		<link>https://blog.developpez.com/sqlpro/p13128/ms-sql-server/sql-server-2005/audit-trail-generique</link>
		<comments>https://blog.developpez.com/sqlpro/p13128/ms-sql-server/sql-server-2005/audit-trail-generique#comments</comments>
		<pubDate>Fri, 13 Jan 2017 14:53:54 +0000</pubDate>
		<dc:creator><![CDATA[SQLpro]]></dc:creator>
				<category><![CDATA[SQL Server 2005]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[SQL Server 2012]]></category>
		<category><![CDATA[SQL Server 2014]]></category>
		<category><![CDATA[SQL Server 2016]]></category>
		<category><![CDATA[audit]]></category>
		<category><![CDATA[audit trail]]></category>
		<category><![CDATA[pistage]]></category>
		<category><![CDATA[SQL server]]></category>
		<category><![CDATA[traçabilité]]></category>
		<category><![CDATA[trace]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/sqlpro/?p=741</guid>
		<description><![CDATA[L&#8217; &#171;&#160;audit trail&#160;&#187;, littéralement &#171;&#160;piste d&#8217;audit&#160;&#187; est un audit destiné à pister les événements qui se passe dans un système. Dans une base de données, il est, la plupart du temps, destiné à vérifier ce qui s&#8217;est passé, notamment sur le plan des valeurs avant ou après la modification. Il peut à la fois servir [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>L&rsquo; &laquo;&nbsp;audit trail&nbsp;&raquo;, littéralement &laquo;&nbsp;piste d&rsquo;audit&nbsp;&raquo; est un audit destiné à pister les événements qui se passe dans un système. Dans une base de données, il est, la plupart du temps, destiné à vérifier ce qui s&rsquo;est passé, notamment sur le plan des valeurs avant ou après la modification. Il peut à la fois servir pour la sécurité (qui à fait quoi ?), comme sur le plan fonctionnel (pourquoi cette valeur ?, À quelle date un tel changement ?&#8230;).<br />
En dehors des outils lourds comme CDC (Change Data Capture) et Change Tracking (tous deux destiné à savoir <strong>quoi</strong>, donc fonctionnel) ou Database Audit (destiné à savoir <strong>qui</strong>, donc sécurité), voici une méthode basée sur un déclencheur et une seule et unique table, facile et rapide à mettre en œuvre et qui permet de tracer qui et quoi&#8230;<br />
<span id="more-741"></span><br />
la principe est simple : chaque table reçoit un unique déclencheur lancé sur tous les événements de mise à jour (INSERT, UPDATE, DELETE) et concatène les images <em>avant </em>et <em>après </em>des données (tables inserted et deleted) puis les transforme en un unique document XML, quelque soit le nombre de lignes. Il est alors facile de stocker cette information das une ligne d&rsquo;une table, accompagnée de métadonnées, notamment, date et heure de survenance, application cliente, compte de connexion, utilisateur SQL, machine hôte, login windows, etc&#8230; </p>
<p>Il ne reste plus qu&rsquo;à lire la table de trace pour savoir qui à fait quoi et quand ! Comme les données sont sous forme XML, il est possible des les interroger par des requêtes SQL mêlant XQuery et XPath. Une astuce consistant à publier certaines vues pour les demandes de contrôle les plus fréquentes  (en général quelques tables).</p>
<p>Les objets sont créé dans un schéma SQL de nom S_ADT et la table à scruter est la table S_ADT.T_MAJ.</p>
<p>Voici l&rsquo;ensemble du code pour se faire&#8230;</p>
<p><strong>1 &#8211; LA TABLE</strong></p>
<p>Pour recueillir les données tracées</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">CREATE</span> SCHEMA S_ADT<br />
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> T_MAJ<br />
<span style="color: #66cc66;">&#40;</span>MAJ_ID &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">BIGINT</span> <span style="color: #993333; font-weight: bold;">IDENTITY</span> <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span><span style="color: #66cc66;">,</span><br />
&nbsp;MAJ_DHU &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DATETIME2 <span style="color: #993333; font-weight: bold;">DEFAULT</span> SYSUTCDATETIME<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span><br />
&nbsp;MAJ_DHL &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DATETIME2 <span style="color: #993333; font-weight: bold;">DEFAULT</span> SYSDATETIME<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span><span style="color: #66cc66;">,</span><br />
&nbsp;MAJ_CNX &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sysname <span style="color: #993333; font-weight: bold;">DEFAULT</span> &nbsp; SYSTEM_USER<span style="color: #66cc66;">,</span><br />
&nbsp;MAJ_USR &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;sysname <span style="color: #993333; font-weight: bold;">DEFAULT</span> <span style="color: #993333; font-weight: bold;">USER</span><span style="color: #66cc66;">,</span><br />
&nbsp;MAJ_APPLICATION &nbsp; &nbsp;NVARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">128</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp;MAJ_HOST &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NVARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">128</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp;MAJ_WINLOGIN &nbsp; &nbsp; &nbsp; NVARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">128</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp;MAJ_WINDOMAIN &nbsp; &nbsp; &nbsp;NVARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">128</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp;MAJ_SCHEMA &nbsp; &nbsp; &nbsp; &nbsp; NVARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">128</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp;MAJ_OBJECT &nbsp; &nbsp; &nbsp; &nbsp; NVARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">128</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp;MAJ_TYPE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">CHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp;MAJ_DATA &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; XML<span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">GO</span></div></div>
<p><strong>2 &#8211; LE TRIGGER</strong></p>
<p>Exemple de création de trigger sur une table pour tracer tous les événements</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TRIGGER</span> E_auditTrail_???<br />
<span style="color: #993333; font-weight: bold;">ON</span> ???<br />
<span style="color: #993333; font-weight: bold;">FOR</span> <span style="color: #993333; font-weight: bold;">INSERT</span><span style="color: #66cc66;">,</span> <span style="color: #993333; font-weight: bold;">UPDATE</span><span style="color: #66cc66;">,</span> <span style="color: #993333; font-weight: bold;">DELETE</span><br />
<span style="color: #993333; font-weight: bold;">AS</span><br />
<span style="color: #993333; font-weight: bold;">SET</span> NOCOUNT <span style="color: #993333; font-weight: bold;">ON</span>;<br />
<br />
<span style="color: #993333; font-weight: bold;">DECLARE</span> @S sysname<span style="color: #66cc66;">,</span> @O sysname<span style="color: #66cc66;">,</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; @A NVARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">128</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> @H NVARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">128</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> @L NVARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">128</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> @D NVARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">128</span><span style="color: #66cc66;">&#41;</span>;<br />
<br />
<span style="color: #993333; font-weight: bold;">SELECT</span> @S <span style="color: #66cc66;">=</span> s<span style="color: #66cc66;">.</span>name<span style="color: #66cc66;">,</span> @O <span style="color: #66cc66;">=</span> o<span style="color: #66cc66;">.</span>name<br />
<span style="color: #993333; font-weight: bold;">FROM</span> &nbsp; sys<span style="color: #66cc66;">.</span>objects <span style="color: #993333; font-weight: bold;">AS</span> o<br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">JOIN</span> sys<span style="color: #66cc66;">.</span>schemas <span style="color: #993333; font-weight: bold;">AS</span> s<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">ON</span> o<span style="color: #66cc66;">.</span>schema_id <span style="color: #66cc66;">=</span> s<span style="color: #66cc66;">.</span>schema_id<br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">JOIN</span> sys<span style="color: #66cc66;">.</span>objects <span style="color: #993333; font-weight: bold;">AS</span> t<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">ON</span> t<span style="color: #66cc66;">.</span>parent_object_id <span style="color: #66cc66;">=</span> o<span style="color: #66cc66;">.</span>object_id<br />
<span style="color: #993333; font-weight: bold;">WHERE</span> &nbsp;t<span style="color: #66cc66;">.</span>object_id <span style="color: #66cc66;">=</span> @@PROCID;<br />
<br />
<span style="color: #993333; font-weight: bold;">SELECT</span> @A program_name<span style="color: #66cc66;">,</span> @H host_name<span style="color: #66cc66;">,</span> @L login_name<span style="color: #66cc66;">,</span> @D domain_name <br />
<span style="color: #993333; font-weight: bold;">FROM</span> &nbsp; sys<span style="color: #66cc66;">.</span>dm_exec_sessions<br />
<span style="color: #993333; font-weight: bold;">WHERE</span> &nbsp;session_id <span style="color: #66cc66;">=</span> @@SPID;<br />
<br />
<span style="color: #808080; font-style: italic;">-- cas d'insertion</span><br />
<span style="color: #993333; font-weight: bold;">IF</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">EXISTS</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> deleted<span style="color: #66cc66;">&#41;</span> <br />
<span style="color: #993333; font-weight: bold;">BEGIN</span><br />
&nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> S_ADT<span style="color: #66cc66;">.</span>T_MAJ <span style="color: #66cc66;">&#40;</span>MAJ_SCHEMA<span style="color: #66cc66;">,</span> MAJ_OBJECT<span style="color: #66cc66;">,</span> MAJ_TYPE<span style="color: #66cc66;">,</span> MAJ_DATA<span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MAJ_APPLICATION<span style="color: #66cc66;">,</span> MAJ_HOST<span style="color: #66cc66;">,</span> MAJ_WINLOGIN<span style="color: #66cc66;">,</span> MAJ_WINDOMAIN<span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">SELECT</span> @S<span style="color: #66cc66;">,</span> @O<span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'I'</span><span style="color: #66cc66;">,</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">CAST</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> inserted <span style="color: #993333; font-weight: bold;">FOR</span> XML AUTO<span style="color: #66cc66;">,</span> ELEMENTS<span style="color: #66cc66;">,</span> ROOT<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'insert'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #993333; font-weight: bold;">BINARY</span> BASE64<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> XML<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @A<span style="color: #66cc66;">,</span> @H<span style="color: #66cc66;">,</span> @L<span style="color: #66cc66;">,</span> @D;<br />
&nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">RETURN</span>;<br />
<span style="color: #993333; font-weight: bold;">END</span>;<br />
<br />
<span style="color: #808080; font-style: italic;">-- cas de la suppression</span><br />
<span style="color: #993333; font-weight: bold;">BEGIN</span><br />
<span style="color: #993333; font-weight: bold;">IF</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">EXISTS</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> inserted<span style="color: #66cc66;">&#41;</span> <br />
&nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> S_ADT<span style="color: #66cc66;">.</span>T_MAJ <span style="color: #66cc66;">&#40;</span>MAJ_SCHEMA<span style="color: #66cc66;">,</span> MAJ_OBJECT<span style="color: #66cc66;">,</span> MAJ_TYPE<span style="color: #66cc66;">,</span> MAJ_DATA<span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MAJ_APPLICATION<span style="color: #66cc66;">,</span> MAJ_HOST<span style="color: #66cc66;">,</span> MAJ_WINLOGIN<span style="color: #66cc66;">,</span> MAJ_WINDOMAIN<span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">SELECT</span> @S<span style="color: #66cc66;">,</span> @O<span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'D'</span><span style="color: #66cc66;">,</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">CAST</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> deleted <span style="color: #993333; font-weight: bold;">FOR</span> XML AUTO<span style="color: #66cc66;">,</span> ELEMENTS<span style="color: #66cc66;">,</span> ROOT<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'delete'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #993333; font-weight: bold;">BINARY</span> BASE64<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> XML<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @A<span style="color: #66cc66;">,</span> @H<span style="color: #66cc66;">,</span> @L<span style="color: #66cc66;">,</span> @D;<br />
&nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">RETURN</span>;<br />
<span style="color: #993333; font-weight: bold;">END</span>;<br />
<br />
<span style="color: #808080; font-style: italic;">-- cas de la modification</span><br />
&nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> S_ADT<span style="color: #66cc66;">.</span>T_MAJ <span style="color: #66cc66;">&#40;</span>MAJ_SCHEMA<span style="color: #66cc66;">,</span> MAJ_OBJECT<span style="color: #66cc66;">,</span> MAJ_TYPE<span style="color: #66cc66;">,</span> MAJ_DATA<span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MAJ_APPLICATION<span style="color: #66cc66;">,</span> MAJ_HOST<span style="color: #66cc66;">,</span> MAJ_WINLOGIN<span style="color: #66cc66;">,</span> MAJ_WINDOMAIN<span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">SELECT</span> @S<span style="color: #66cc66;">,</span> @O<span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'I'</span><span style="color: #66cc66;">,</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">CAST</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">FROM</span> &nbsp; <span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #ff0000;">'OLD'</span> <span style="color: #993333; font-weight: bold;">AS</span> _old_<span style="color: #66cc66;">,</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> deleted <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">UNION</span> <span style="color: #993333; font-weight: bold;">ALL</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #ff0000;">'NEW'</span> <span style="color: #993333; font-weight: bold;">AS</span> _new_<span style="color: #66cc66;">,</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> inserted<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> _auditTrail_<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">FOR</span> XML AUTO<span style="color: #66cc66;">,</span> ELEMENTS<span style="color: #66cc66;">,</span> ROOT<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'update'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #993333; font-weight: bold;">BINARY</span> BASE64<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> XML<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @A<span style="color: #66cc66;">,</span> @H<span style="color: #66cc66;">,</span> @L<span style="color: #66cc66;">,</span> @D;<br />
<span style="color: #993333; font-weight: bold;">GO</span></div></div>
<p>Pour vous faciliter la tâche, quelques scripts complémentaires&#8230;</p>
<p><strong>3 &#8211; Un batch de création des triggers sur toutes les tables&#8230;</strong></p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">DECLARE</span> @<span style="color: #993333; font-weight: bold;">SQL</span> NVARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">MAX</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">=</span> <br />
<span style="color: #ff0000;">'CREATE TRIGGER E_auditTrail_~1<br />
ON ~2<br />
FOR INSERT, UPDATE, DELETE<br />
AS<br />
SET NOCOUNT ON;<br />
<br />
DECLARE @S sysname, @O sysname, <br />
&nbsp; &nbsp; &nbsp; &nbsp; @A NVARCHAR(128), @H NVARCHAR(128), @L NVARCHAR(128), @D NVARCHAR(128);<br />
<br />
SELECT @S = s.name, @O = o.name<br />
FROM &nbsp; sys.objects AS o<br />
&nbsp; &nbsp; &nbsp; &nbsp;JOIN sys.schemas AS s<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ON o.schema_id = s.schema_id<br />
&nbsp; &nbsp; &nbsp; &nbsp;JOIN sys.objects AS t<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ON t.parent_object_id = o.object_id<br />
WHERE &nbsp;t.object_id = @@PROCID;<br />
<br />
SELECT @A program_name, @H host_name, @L login_name, @D domain_name <br />
FROM &nbsp; sys.dm_exec_sessions<br />
WHERE &nbsp;session_id = @@SPID;<br />
<br />
IF NOT EXISTS(SELECT * FROM deleted) --&gt; cas d'</span><span style="color: #ff0000;">'insertion<br />
BEGIN<br />
&nbsp; &nbsp;INSERT INTO S_ADT.T_MAJ (MAJ_SCHEMA, MAJ_OBJECT, MAJ_TYPE, MAJ_DATA,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MAJ_APPLICATION, MAJ_HOST, MAJ_WINLOGIN, MAJ_WINDOMAIN)<br />
&nbsp; &nbsp;SELECT @S, @O, '</span><span style="color: #ff0000;">'I'</span><span style="color: #ff0000;">', <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CAST((SELECT * FROM inserted FOR XML AUTO, ELEMENTS, ROOT('</span><span style="color: #ff0000;">'insert'</span><span style="color: #ff0000;">'), BINARY BASE64) AS XML),<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @A, @H, @L, @D;<br />
&nbsp; &nbsp;RETURN;<br />
END;<br />
<br />
BEGIN<br />
IF NOT EXISTS(SELECT * FROM inserted) --&gt; cas de la suppression<br />
&nbsp; &nbsp;INSERT INTO S_ADT.T_MAJ (MAJ_SCHEMA, MAJ_OBJECT, MAJ_TYPE, MAJ_DATA,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MAJ_APPLICATION, MAJ_HOST, MAJ_WINLOGIN, MAJ_WINDOMAIN)<br />
&nbsp; &nbsp;SELECT @S, @O, '</span><span style="color: #ff0000;">'D'</span><span style="color: #ff0000;">', <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CAST((SELECT * FROM deleted FOR XML AUTO, ELEMENTS, ROOT('</span><span style="color: #ff0000;">'delete'</span><span style="color: #ff0000;">'), BINARY BASE64) AS XML),<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @A, @H, @L, @D;<br />
&nbsp; &nbsp;RETURN;<br />
END;<br />
<br />
-- cas de la modif<br />
&nbsp; &nbsp;INSERT INTO S_ADT.T_MAJ (MAJ_SCHEMA, MAJ_OBJECT, MAJ_TYPE, MAJ_DATA,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MAJ_APPLICATION, MAJ_HOST, MAJ_WINLOGIN, MAJ_WINDOMAIN)<br />
&nbsp; &nbsp;SELECT @S, @O, '</span><span style="color: #ff0000;">'I'</span><span style="color: #ff0000;">', <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; CAST((SELECT * <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FROM &nbsp; (SELECT '</span><span style="color: #ff0000;">'OLD'</span><span style="color: #ff0000;">' AS _old_, * FROM deleted <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; UNION ALL<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SELECT '</span><span style="color: #ff0000;">'NEW'</span><span style="color: #ff0000;">' AS _new_, * FROM inserted) AS _auditTrail_<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FOR XML AUTO, ELEMENTS, ROOT('</span><span style="color: #ff0000;">'update'</span><span style="color: #ff0000;">'), BINARY BASE64) AS XML),<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; @A, @H, @L, @D;'</span><br />
<span style="color: #993333; font-weight: bold;">DECLARE</span> @T NVARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">261</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> @N <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">38</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> @CMD NVARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">MAX</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">DECLARE</span> C CURSOR <br />
<span style="color: #993333; font-weight: bold;">LOCAL</span> FORWARD_ONLY STATIC READ_ONLY<br />
<span style="color: #993333; font-weight: bold;">FOR</span><br />
&nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #ff0000;">'['</span> <span style="color: #66cc66;">+</span> TABLE_SCHEMA <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">'].['</span> <span style="color: #66cc66;">+</span> <span style="color: #993333; font-weight: bold;">TABLE_NAME</span> <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">']'</span> <span style="color: #993333; font-weight: bold;">AS</span> T<span style="color: #66cc66;">,</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">REPLACE</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">REPLACE</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">CAST</span><span style="color: #66cc66;">&#40;</span>NEWID<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> <span style="color: #993333; font-weight: bold;">VARCHAR</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">38</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'-'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'_'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'-'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'_'</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">AS</span> N<br />
&nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">FROM</span> &nbsp; INFORMATION_SCHEMA<span style="color: #66cc66;">.</span><span style="color: #993333; font-weight: bold;">TABLES</span> <span style="color: #993333; font-weight: bold;">AS</span> T<br />
&nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">WHERE</span> &nbsp;TABLE_TYPE <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'BASE TABLE'</span><br />
&nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">AND</span> &nbsp; &nbsp;TABLE_SCHEMA &nbsp;<span style="color: #ff0000;">'S_ADT'</span><br />
&nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">AND</span> &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">EXISTS</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">FROM</span> &nbsp; INFORMATION_SCHEMA<span style="color: #66cc66;">.</span><span style="color: #993333; font-weight: bold;">COLUMNS</span> <span style="color: #993333; font-weight: bold;">AS</span> C<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">WHERE</span> &nbsp;T<span style="color: #66cc66;">.</span>TABLE_SCHEMA <span style="color: #66cc66;">=</span> C<span style="color: #66cc66;">.</span>TABLE_SCHEMA<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">AND</span> &nbsp;T<span style="color: #66cc66;">.</span><span style="color: #993333; font-weight: bold;">TABLE_NAME</span> <span style="color: #66cc66;">=</span> C<span style="color: #66cc66;">.</span><span style="color: #993333; font-weight: bold;">TABLE_NAME</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">AND</span> &nbsp;C<span style="color: #66cc66;">.</span>DATA_TYPE <span style="color: #993333; font-weight: bold;">IN</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'text'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'ntext'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'image'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'xml'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'geometry'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'geography'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">OPEN</span> C;<br />
FETCH C <span style="color: #993333; font-weight: bold;">INTO</span> @T<span style="color: #66cc66;">,</span> @N;<br />
WHILE @@FETCH_STATUS <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">0</span><br />
<span style="color: #993333; font-weight: bold;">BEGIN</span><br />
&nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">SET</span> @CMD <span style="color: #66cc66;">=</span> <span style="color: #993333; font-weight: bold;">REPLACE</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">REPLACE</span><span style="color: #66cc66;">&#40;</span>@<span style="color: #993333; font-weight: bold;">SQL</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'~1'</span><span style="color: #66cc66;">,</span> @N<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'~2'</span><span style="color: #66cc66;">,</span> @T<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">EXEC</span> <span style="color: #66cc66;">&#40;</span>@CMD<span style="color: #66cc66;">&#41;</span>;<br />
&nbsp; &nbsp;FETCH C <span style="color: #993333; font-weight: bold;">INTO</span> @T<span style="color: #66cc66;">,</span> @N;<br />
<span style="color: #993333; font-weight: bold;">END</span>;<br />
CLOSE C;<br />
DEALLOCATE C;<br />
<span style="color: #993333; font-weight: bold;">GO</span></div></div>
<p><strong>4 &#8211; Un batch de suppression de tous les triggers de tracabilité mis en place</strong></p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">DECLARE</span> @<span style="color: #993333; font-weight: bold;">SQL</span> NVARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">MAX</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">=</span> N<span style="color: #ff0000;">''</span><br />
<span style="color: #993333; font-weight: bold;">SELECT</span> @<span style="color: #993333; font-weight: bold;">SQL</span> <span style="color: #66cc66;">=</span> @<span style="color: #993333; font-weight: bold;">SQL</span> <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">'DROP TRIGGER ['</span> <span style="color: #66cc66;">+</span> s<span style="color: #66cc66;">.</span>name <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">'].'</span> <span style="color: #66cc66;">+</span> d<span style="color: #66cc66;">.</span>name <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">';'</span><br />
<span style="color: #993333; font-weight: bold;">FROM</span> &nbsp; sys<span style="color: #66cc66;">.</span>triggers <span style="color: #993333; font-weight: bold;">AS</span> d<br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">JOIN</span> sys<span style="color: #66cc66;">.</span>objects <span style="color: #993333; font-weight: bold;">AS</span> o<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">ON</span> d<span style="color: #66cc66;">.</span>object_id <span style="color: #66cc66;">=</span> o<span style="color: #66cc66;">.</span>object_id<br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">JOIN</span> sys<span style="color: #66cc66;">.</span>schemas <span style="color: #993333; font-weight: bold;">AS</span> s<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">ON</span> o<span style="color: #66cc66;">.</span>schema_id <span style="color: #66cc66;">=</span> s<span style="color: #66cc66;">.</span>schema_id<br />
<span style="color: #993333; font-weight: bold;">WHERE</span> &nbsp;d<span style="color: #66cc66;">.</span>name <span style="color: #993333; font-weight: bold;">LIKE</span> <span style="color: #ff0000;">'E?_auditTrail?_%'</span> ESCAPE <span style="color: #ff0000;">'?'</span><br />
&nbsp; <span style="color: #993333; font-weight: bold;">AND</span> &nbsp;LEN<span style="color: #66cc66;">&#40;</span>d<span style="color: #66cc66;">.</span>name<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">49</span><br />
&nbsp; <span style="color: #993333; font-weight: bold;">AND</span> &nbsp;<span style="color: #993333; font-weight: bold;">REPLACE</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">RIGHT</span><span style="color: #66cc66;">&#40;</span>d<span style="color: #66cc66;">.</span>name<span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">36</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'_'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">''</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">LIKE</span> REPLICATE<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'[0-9A-F]'</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">32</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">EXEC</span> <span style="color: #66cc66;">&#40;</span>@<span style="color: #993333; font-weight: bold;">SQL</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">GO</span></div></div>
<p><strong>5 &#8211; Un batch de désactivation des déclencheurs de traçabilité</strong></p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">DECLARE</span> @<span style="color: #993333; font-weight: bold;">SQL</span> NVARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">MAX</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">=</span> N<span style="color: #ff0000;">''</span><br />
<span style="color: #993333; font-weight: bold;">SELECT</span> @<span style="color: #993333; font-weight: bold;">SQL</span> <span style="color: #66cc66;">=</span> @<span style="color: #993333; font-weight: bold;">SQL</span> <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">'DISABLE TRIGGER ['</span> <span style="color: #66cc66;">+</span> s<span style="color: #66cc66;">.</span>name <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">'].'</span> <span style="color: #66cc66;">+</span> d<span style="color: #66cc66;">.</span>name <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">' ON ['</span> <span style="color: #66cc66;">+</span> s<span style="color: #66cc66;">.</span>name <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">'].['</span> <span style="color: #66cc66;">+</span> t<span style="color: #66cc66;">.</span>name &nbsp;<span style="color: #66cc66;">+</span> <span style="color: #ff0000;">'];'</span><br />
<span style="color: #993333; font-weight: bold;">FROM</span> &nbsp; sys<span style="color: #66cc66;">.</span>triggers <span style="color: #993333; font-weight: bold;">AS</span> d<br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">JOIN</span> sys<span style="color: #66cc66;">.</span>objects <span style="color: #993333; font-weight: bold;">AS</span> o<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">ON</span> d<span style="color: #66cc66;">.</span>object_id <span style="color: #66cc66;">=</span> o<span style="color: #66cc66;">.</span>object_id<br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">JOIN</span> sys<span style="color: #66cc66;">.</span>schemas <span style="color: #993333; font-weight: bold;">AS</span> s<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">ON</span> o<span style="color: #66cc66;">.</span>schema_id <span style="color: #66cc66;">=</span> s<span style="color: #66cc66;">.</span>schema_id<br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">JOIN</span> sys<span style="color: #66cc66;">.</span>objects <span style="color: #993333; font-weight: bold;">AS</span> t<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">ON</span> d<span style="color: #66cc66;">.</span>parent_id <span style="color: #66cc66;">=</span> t<span style="color: #66cc66;">.</span>object_id<br />
<span style="color: #993333; font-weight: bold;">WHERE</span> &nbsp;d<span style="color: #66cc66;">.</span>name <span style="color: #993333; font-weight: bold;">LIKE</span> <span style="color: #ff0000;">'E?_auditTrail?_%'</span> ESCAPE <span style="color: #ff0000;">'?'</span><br />
&nbsp; <span style="color: #993333; font-weight: bold;">AND</span> &nbsp;LEN<span style="color: #66cc66;">&#40;</span>d<span style="color: #66cc66;">.</span>name<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">49</span><br />
&nbsp; <span style="color: #993333; font-weight: bold;">AND</span> &nbsp;<span style="color: #993333; font-weight: bold;">REPLACE</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">RIGHT</span><span style="color: #66cc66;">&#40;</span>d<span style="color: #66cc66;">.</span>name<span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">36</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'_'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">''</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">LIKE</span> REPLICATE<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'[0-9A-F]'</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">32</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">EXEC</span> <span style="color: #66cc66;">&#40;</span>@<span style="color: #993333; font-weight: bold;">SQL</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">GO</span></div></div>
<p><strong>6 &#8211; Un batch de réactivation des déclencheurs de tracabilité</strong></p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">DECLARE</span> @<span style="color: #993333; font-weight: bold;">SQL</span> NVARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">MAX</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">=</span> N<span style="color: #ff0000;">''</span><br />
<span style="color: #993333; font-weight: bold;">SELECT</span> @<span style="color: #993333; font-weight: bold;">SQL</span> <span style="color: #66cc66;">=</span> @<span style="color: #993333; font-weight: bold;">SQL</span> <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">'ENABLE TRIGGER ['</span> <span style="color: #66cc66;">+</span> s<span style="color: #66cc66;">.</span>name <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">'].'</span> <span style="color: #66cc66;">+</span> d<span style="color: #66cc66;">.</span>name <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">' ON ['</span> <span style="color: #66cc66;">+</span> s<span style="color: #66cc66;">.</span>name <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">'].['</span> <span style="color: #66cc66;">+</span> t<span style="color: #66cc66;">.</span>name &nbsp;<span style="color: #66cc66;">+</span> <span style="color: #ff0000;">'];'</span><br />
<span style="color: #993333; font-weight: bold;">FROM</span> &nbsp; sys<span style="color: #66cc66;">.</span>triggers <span style="color: #993333; font-weight: bold;">AS</span> d<br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">JOIN</span> sys<span style="color: #66cc66;">.</span>objects <span style="color: #993333; font-weight: bold;">AS</span> o<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">ON</span> d<span style="color: #66cc66;">.</span>object_id <span style="color: #66cc66;">=</span> o<span style="color: #66cc66;">.</span>object_id<br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">JOIN</span> sys<span style="color: #66cc66;">.</span>schemas <span style="color: #993333; font-weight: bold;">AS</span> s<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">ON</span> o<span style="color: #66cc66;">.</span>schema_id <span style="color: #66cc66;">=</span> s<span style="color: #66cc66;">.</span>schema_id<br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">JOIN</span> sys<span style="color: #66cc66;">.</span>objects <span style="color: #993333; font-weight: bold;">AS</span> t<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #993333; font-weight: bold;">ON</span> d<span style="color: #66cc66;">.</span>parent_id <span style="color: #66cc66;">=</span> t<span style="color: #66cc66;">.</span>object_id<br />
<span style="color: #993333; font-weight: bold;">WHERE</span> &nbsp;d<span style="color: #66cc66;">.</span>name <span style="color: #993333; font-weight: bold;">LIKE</span> <span style="color: #ff0000;">'E?_auditTrail?_%'</span> ESCAPE <span style="color: #ff0000;">'?'</span><br />
&nbsp; <span style="color: #993333; font-weight: bold;">AND</span> &nbsp;LEN<span style="color: #66cc66;">&#40;</span>d<span style="color: #66cc66;">.</span>name<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">=</span> <span style="color: #cc66cc;">49</span><br />
&nbsp; <span style="color: #993333; font-weight: bold;">AND</span> &nbsp;<span style="color: #993333; font-weight: bold;">REPLACE</span><span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">RIGHT</span><span style="color: #66cc66;">&#40;</span>d<span style="color: #66cc66;">.</span>name<span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">36</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'_'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">''</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">LIKE</span> REPLICATE<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'[0-9A-F]'</span><span style="color: #66cc66;">,</span> <span style="color: #cc66cc;">32</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">EXEC</span> <span style="color: #66cc66;">&#40;</span>@<span style="color: #993333; font-weight: bold;">SQL</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">GO</span></div></div>
<p><strong>NOTA :</strong></p>
<p>Conseil important : si vous avez attribué des privilèges très fermés, il faut autoriser les utilisateurs à voir les DMV d&rsquo;état du serveur pour recueillir les données système, sinon les déclencheurs vont planter.pour cela vous devez attribuer le privilège &laquo;&nbsp;VIEW SERVER STATE&nbsp;&raquo; à tous les utilisateurs de la base à travers leur compte de connexion.<br />
Vous pouvez faire ceci à l&rsquo;aide du script SQL suivant :</p>
<div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="sql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #993333; font-weight: bold;">DECLARE</span> @<span style="color: #993333; font-weight: bold;">SQL</span> NVARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #993333; font-weight: bold;">MAX</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">=</span> N<span style="color: #ff0000;">'USE master;'</span><br />
<span style="color: #993333; font-weight: bold;">SELECT</span> @<span style="color: #993333; font-weight: bold;">SQL</span> <span style="color: #66cc66;">=</span> @<span style="color: #993333; font-weight: bold;">SQL</span> <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">'GRANT VIEW SERVER STATE TO ['</span> <span style="color: #66cc66;">+</span> L<span style="color: #66cc66;">.</span>name <span style="color: #66cc66;">+</span> <span style="color: #ff0000;">'];'</span><br />
<span style="color: #993333; font-weight: bold;">FROM</span> &nbsp; sys<span style="color: #66cc66;">.</span>database_principals <span style="color: #993333; font-weight: bold;">AS</span> U<br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">INNER</span> <span style="color: #993333; font-weight: bold;">JOIN</span> sys<span style="color: #66cc66;">.</span>server_principals <span style="color: #993333; font-weight: bold;">AS</span> L<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #993333; font-weight: bold;">ON</span> L<span style="color: #66cc66;">.</span>sid <span style="color: #66cc66;">=</span> U<span style="color: #66cc66;">.</span>sid<br />
<span style="color: #993333; font-weight: bold;">WHERE</span> &nbsp;L<span style="color: #66cc66;">.</span>name &nbsp;<span style="color: #ff0000;">'sa'</span><br />
<span style="color: #993333; font-weight: bold;">AND</span> &nbsp; &nbsp;U<span style="color: #66cc66;">.</span>name <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">IN</span> <span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'dbo'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'INFORMATION_SCHEMA'</span><span style="color: #66cc66;">,</span> <span style="color: #ff0000;">'sys'</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">EXEC</span> &nbsp;<span style="color: #66cc66;">&#40;</span>@<span style="color: #993333; font-weight: bold;">SQL</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #993333; font-weight: bold;">GO</span></div></div>
<p><strong>LE CODE * LE CODE * LE CODE * LE CODE * LE CODE * LE CODE * LE CODE * LE CODE * LE CODE</strong><br />
<a href="http://sqlpro.developpez.com/_fichierSQL/AuditTrail.txt" title="Fichier du code" target="_blank">Le code !</a></p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Frédéric Brouard, alias SQLpro, ARCHITECTE DE DONNÉES<br />
Expert &nbsp;S.G.B.D &nbsp;relationnelles &nbsp; et &nbsp; langage &nbsp;S.Q.L<br />
Moste &nbsp;Valuable &nbsp;Professionnal &nbsp;Microsoft &nbsp;SQL Server<br />
Société SQLspot &nbsp;: &nbsp;modélisation, conseil, formation,<br />
optimisation, &nbsp;audit, &nbsp;tuning, &nbsp;administration &nbsp;SGBDR<br />
Enseignant: CNAM PACA, ISEN Toulon, CESI Aix en Prov.</div></div>
<p>L&rsquo;entreprise <a href="http://www.sqlspot.com">SQL Spot</a><br />
<strong>Le site web sur le </strong><a href="http://sqlpro.developpez.com/">SQL et les SGBDR</a></p>
<p><img src="http://blog.developpez.com/media/Microsoft_MVP_logo_vertical Brouard 400.jpg" width="400" height="135" alt="MVP Microsoft SQL
Server" /></p>
<div id="attachment_590" style="width: 548px" class="wp-caption alignnone"><a href="http://blog.developpez.com/sqlpro/files/2015/09/Couverture-livre-SQL-server-Eyrolles.jpg"><img src="http://blog.developpez.com/sqlpro/files/2015/09/Couverture-livre-SQL-server-Eyrolles.jpg" alt="Développez et administrez pour la performance avec SQL Server 2014" width="538" height="652" class="size-full wp-image-590" /></a><p class="wp-caption-text">Développez et administrez pour la performance avec SQL Server 2014</p></div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
