<?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>David Barbarin &#187; sécurité</title>
	<atom:link href="https://blog.developpez.com/mikedavem/ptag/securite/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/mikedavem</link>
	<description>MVP DataPlatform - MCM SQL Server</description>
	<lastBuildDate>Thu, 09 Sep 2021 21:19:50 +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>SQL Server 2016 &#8211; groupes de disponibilités et gMSAs</title>
		<link>https://blog.developpez.com/mikedavem/p12979/sql-server-2016/sql-server-2016-groupes-de-disponibilites-et-gmsas</link>
		<comments>https://blog.developpez.com/mikedavem/p12979/sql-server-2016/sql-server-2016-groupes-de-disponibilites-et-gmsas#comments</comments>
		<pubDate>Tue, 05 Jan 2016 18:14:25 +0000</pubDate>
		<dc:creator><![CDATA[mikedavem]]></dc:creator>
				<category><![CDATA[SQL Server 2016]]></category>
		<category><![CDATA[AlwaysOn]]></category>
		<category><![CDATA[gMSA]]></category>
		<category><![CDATA[Groupes de disponibilités]]></category>
		<category><![CDATA[haute disponibilité]]></category>
		<category><![CDATA[high availability]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[service managé]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/mikedavem/?p=1145</guid>
		<description><![CDATA[Ce billet ne concernera probablement pas les clients qui soit n&#8217;ont pas de règles de changement de mot de passe pour les comptes de services ou qui n&#8217;utilisent pas l&#8217;authentification Kerberos. Mais je suis sûr que le nombre de ces &#8230; <a href="https://blog.developpez.com/mikedavem/p12979/sql-server-2016/sql-server-2016-groupes-de-disponibilites-et-gmsas">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Ce billet ne concernera probablement pas les clients qui soit n&rsquo;ont pas de règles de changement de mot de passe pour les comptes de services ou qui n&rsquo;utilisent pas l&rsquo;authentification Kerberos. Mais je suis sûr que le nombre de ces clients a diminué durant ces 10 dernières années. C&rsquo;est en tout cas ce que j&rsquo;ai pu remarquer chez différents clients.</p>
<p>Mais avant de commencer avec les groupes de services managés laissez moi introduire le concept de compte managé. Pourquoi les utiliser à la place des comptes de services traditionnels? Je pense que les administrateurs systèmes peuvent imaginer l&rsquo;importance de ce type de compte &#8230;</p>
<p>&gt; <a href="http://blog.dbi-services.com/sql-server-2016-availability-groups-and-gmsas/" target="_blank">Lire la suite</a> (en anglais)</p>
<p>David Barbarin<br />
MVP &amp; MCM SQL Server</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Server 2014 : sortie du livre &#171;&#160;Développer et administrer pour la performance&#160;&#187;</title>
		<link>https://blog.developpez.com/mikedavem/p12808/sql-server-2014/sql-server-2014-sortie-du-livre-developper-et-administrer-pour-la-performance</link>
		<comments>https://blog.developpez.com/mikedavem/p12808/sql-server-2014/sql-server-2014-sortie-du-livre-developper-et-administrer-pour-la-performance#comments</comments>
		<pubDate>Tue, 16 Dec 2014 18:34:53 +0000</pubDate>
		<dc:creator><![CDATA[mikedavem]]></dc:creator>
				<category><![CDATA[SQL Server 2014]]></category>
		<category><![CDATA[Administration]]></category>
		<category><![CDATA[AlwaysOn;failover;SQL Server;Haute disponibilité;HA]]></category>
		<category><![CDATA[audit]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[hekaton]]></category>
		<category><![CDATA[in-memory]]></category>
		<category><![CDATA[Livre]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[TSQL]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/mikedavem/?p=966</guid>
		<description><![CDATA[Un billet en cette fin d&#8217;année qui approche à grand pas pour vous annoncer la sortie prochaine (fin décembre 2014) du livre SQL Server 2014 : Développer et administrer pour la performance en français et auquel j&#8217;ai eu l&#8217;immense plaisir &#8230; <a href="https://blog.developpez.com/mikedavem/p12808/sql-server-2014/sql-server-2014-sortie-du-livre-developper-et-administrer-pour-la-performance">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://blog.developpez.com/mikedavem/files/2014/12/2e1ax_default_entry_sqlserver2014_livre.jpg"><img src="http://blog.developpez.com/mikedavem/files/2014/12/2e1ax_default_entry_sqlserver2014_livre.jpg" alt="2e1ax_default_entry_sqlserver2014_livre" width="260" height="314" class="alignnone size-full wp-image-969" /></a></p>
<p>Un billet en cette fin d&rsquo;année qui approche à grand pas pour vous annoncer la sortie prochaine (fin décembre 2014) du livre SQL Server 2014 : Développer et administrer pour la performance en français et auquel j&rsquo;ai eu l&rsquo;immense plaisir de participer avec <a href="fr.linkedin.com/pub/frederic-brouard-alias-sqlpro/0/761/914/fr" target="_blank">Frédéric Brouard</a> (alias SQLPro &#8211; MVP SQL Server), <a href="th.linkedin.com/in/nicolassouquet/fr" target="_blank">Nicolas Souquet</a> (alias Elsuket &#8211; MVP SQL Server) et Christian Soutou. </p>
<p>Ce livre est destiné aussi bien aux développeurs qu&rsquo;aux administrateurs débutants ou confirmés soucieux de la performance et couvre un ensemble complet de domaines (l&rsquo;administration, le développement, la sécurité ou encore la haute disponibilité).</p>
<p>Bonne lecture !</p>
<p>David BARBARIN (Mikedavem)<br />
MVP et MCM SQL Server</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Server 2014 : SELECT ALL USERS SECURABLES &amp; DB admins</title>
		<link>https://blog.developpez.com/mikedavem/p12507/sql-server-2014/sql-server-2014-select-all-users-securables-db-admins</link>
		<comments>https://blog.developpez.com/mikedavem/p12507/sql-server-2014/sql-server-2014-select-all-users-securables-db-admins#comments</comments>
		<pubDate>Wed, 26 Feb 2014 19:31:15 +0000</pubDate>
		<dc:creator><![CDATA[mikedavem]]></dc:creator>
				<category><![CDATA[SQL Server 2014]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[SELECT ALL USERS SECURABLES]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/mikedavem/?p=868</guid>
		<description><![CDATA[Microsoft a introduit 4 nouvelles permissions. L’un d’entre elles (SELECT ALL USERS SECURABLES) peut permettre à un administrateur de bases de données de pouvoir gérer une instance SQL Server sans forcément voir les données sensibles. Cependant cette phrase est à &#8230; <a href="https://blog.developpez.com/mikedavem/p12507/sql-server-2014/sql-server-2014-select-all-users-securables-db-admins">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Microsoft a introduit 4 nouvelles permissions. L’un d’entre elles (SELECT ALL USERS SECURABLES) peut permettre à un administrateur de bases de données de pouvoir gérer une instance SQL Server sans forcément voir les données sensibles. Cependant cette phrase est à prendre avec du recul pour éviter des erreurs d’interprétations. </p>
<p>Lire la <a href="http://www.dbi-services.com/index.php/blog/entry/sql-server-2014-select-all-users-securables-a-db-admins">suite</a> (en anglais)</p>
<p>Bonne lecture !</p>
<p>David BARBARIN (Mikedavem)    <br />MVP et MCM SQL Server</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A propos de l&#8217;erreur 33203 : SQL Server audit could not write to the security log</title>
		<link>https://blog.developpez.com/mikedavem/p11918/sql-server-2012/a-propos-de-lerreur-33203-sql-server-audit-could-not-write-to-the-security-log</link>
		<comments>https://blog.developpez.com/mikedavem/p11918/sql-server-2012/a-propos-de-lerreur-33203-sql-server-audit-could-not-write-to-the-security-log#comments</comments>
		<pubDate>Mon, 15 Apr 2013 12:15:12 +0000</pubDate>
		<dc:creator><![CDATA[mikedavem]]></dc:creator>
				<category><![CDATA[SQL Server 2012]]></category>
		<category><![CDATA[audit SQL Server]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[Windows 2012]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/mikedavem/?p=447</guid>
		<description><![CDATA[Lors de la mise en place des audits de sécurité je me suis heurté à cette fameuse erreur 33203 sur une instance nommée qui indique explicitement que SQL Server ne peut pas écrire dan le journal de sécurité Windows.&#160; Ma &#8230; <a href="https://blog.developpez.com/mikedavem/p11918/sql-server-2012/a-propos-de-lerreur-33203-sql-server-audit-could-not-write-to-the-security-log">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Lors de la mise en place des audits de sécurité je me suis heurté à cette fameuse erreur 33203 sur une instance nommée qui indique explicitement que SQL Server ne peut pas écrire dan le journal de sécurité Windows.&#160; Ma configuration est la suivante : SQL Server 2012 SP1&#160; et Windows 2012 Server. </p>
<p>Je précise avant de commencer que les <a href="http://msdn.microsoft.com/en-us/library/cc645889.aspx" target="_blank">prérequis</a> de fonctionnement des audits avec le journal de sécurité Windows sont respectés. La conséquence directe de l&rsquo;erreur 33203 est qu&rsquo;au évènement n&rsquo;est enregistré dans le journal de sécurité Windows, ce qui est plutôt gênant pour des audits. De plus les journaux des erreurs Windows et SQL Server ne sont pas spécialement bavards quant à la cause de cette erreur. </p>
<p>&#160;</p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/04/image10.png"><img title="image" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="image" src="http://blog.developpez.com/mikedavem/files/2013/04/image_thumb10.png" width="579" height="51" /></a></p>
<p>&#160;</p>
<p>Dans ce cas comment savoir ce qui empêche SQL Server d&rsquo;écrire dans le journal ? Je dois dire que les outils sysinternals sont bien utiles dans ces moments et en particulier <a href="http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx" target="_blank">procmon</a>.</p>
<p>Une capture procmon me donne ceci lorsque j&rsquo;active un objet d&rsquo;audit depuis SQL Server :</p>
<p>&#160;</p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/04/image4.png"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="http://blog.developpez.com/mikedavem/files/2013/04/image_thumb4.png" width="1061" height="102" /></a></p>
<p>On peut remarquer ici que SQL Server tente un accès à la clé de registre <em>HKLM\System\CurrentControlSet\Services\EventLog\Security</em> et que cet accès lui est visiblement refusé. Un message est également inscrit dans le journal des erreurs SQL. Pas de souci, nous allons configurer les permissions adéquates sur cette clé de registre. </p>
<p>&#160;</p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/04/image5.png"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="http://blog.developpez.com/mikedavem/files/2013/04/image_thumb5.png" width="317" height="382" /></a></p>
<p>&#160;</p>
<p>Le paramétrage des permissions a visiblement permis à l&rsquo;instance SQL Server de créer une nouvelle clé de registre dans <em>HKLM\System\CurrentControlSet\Services\EventLog\Security</em> :</p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/04/image6.png"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="http://blog.developpez.com/mikedavem/files/2013/04/image_thumb6.png" width="298" height="236" /></a></p>
<p>&#160;</p>
<p>&#8230;</p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/04/image7.png"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="http://blog.developpez.com/mikedavem/files/2013/04/image_thumb7.png" width="924" height="108" /></a></p>
<p>&#160;</p>
<p>Me croyant sauvé, j&rsquo;active mes audits mais je me heurte à une nouvelle erreur. Une nouvelle trace procmon me révèle le problème suivant :</p>
<p>&#160;</p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/04/image8.png"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="http://blog.developpez.com/mikedavem/files/2013/04/image_thumb8.png" width="1102" height="32" /></a></p>
<p>&#160;</p>
<p>SQL Server tente de lire le fichier <em>C:\Windows\System32\LogFiles\Sum\Api.log</em> mais encore un fois ce dernier se voit refuser l&rsquo;accès. Le paramétrage en lecture seule du fichier Api.log me permet enfin d&rsquo;activer mes audits et de valider que les évènements soient bien enregistrés dans le journal de sécurité Windows. Ce deuxième <a href="http://connect.microsoft.com/SQLServer/feedback/details/781317/error-occurred-while-opening-logfile-c-windows-system32-logfiles-sum-api-log">problème</a> visiblement a été remonté chez Microsoft et est toujours d&rsquo;actualité. A noter que je n&rsquo;ai eu ce souci que pour mon instance nommé dans mon cas. </p>
<p>&#160;</p>
<p><u>Quelques remarques supplémentaires :</u></p>
<ul>
<li>Le fait d&rsquo;enlever le compte de service SQL des permissions de la clé de registre <em>HKLM\System\CurrentControlSet\Services\EventLog\Security</em> ne semble plus être gênant à partir du moment où la nouvelle clé a été créé. </li>
<li>Il n&rsquo;est pas possible cependant d&rsquo;enlever les permissions sur le fichier <em>C:\Windows\System32\LogFiles\Sum\Api.log</em> sous peine d&rsquo;avoir dans le journal des évènements Windows le type d&rsquo;erreur suivant et plus d&rsquo;évènement d&rsquo;audit enregistré. A voir si le problème sera résolu plus tard par Microsoft (dans un CU4 peut être ?) avec Windows Server 2012. L&rsquo;ensemble des problèmes répertoriés concerneraient Windows Server 2012.</li>
<li>Je ne pense pas que le problème soit lié à la version de SQL Server. Si j&rsquo;ai le temps je testerai sur une version SQL Server 2008 R2 et mettrait à jour mon blog. </li>
</ul>
<p>&#160;</p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/04/image9.png"><img title="image" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="image" src="http://blog.developpez.com/mikedavem/files/2013/04/image_thumb9.png" width="787" height="190" /></a></p>
<p>&#160;</p>
<p>Bonne activation d&rsquo;audit !! <img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none;border-left-style: none;border-bottom-style: none;border-right-style: none" alt="Sourire" src="http://blog.developpez.com/mikedavem/files/2013/04/wlEmoticon-smile.png" /></p>
<p>&#160;</p>
<p>David BARBARIN (Mikedavem)    <br />MVP SQL Server</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Probl&#232;me d&#8217;utilisation de l&#8217;option WITH EXECUTE AS dans une proc&#233;dure stock&#233;e avec les serveurs li&#233;s</title>
		<link>https://blog.developpez.com/mikedavem/p11898/sql-server-2005/problme-dutilisation-de-loption-with-execute-as-dans-une-procdure-stocke-avec-les-serveurs-lis</link>
		<comments>https://blog.developpez.com/mikedavem/p11898/sql-server-2005/problme-dutilisation-de-loption-with-execute-as-dans-une-procdure-stocke-avec-les-serveurs-lis#comments</comments>
		<pubDate>Mon, 08 Apr 2013 13:19:03 +0000</pubDate>
		<dc:creator><![CDATA[mikedavem]]></dc:creator>
				<category><![CDATA[SQL Server 2005]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[SQL Server 2008 R2]]></category>
		<category><![CDATA[SQL Server 2012]]></category>
		<category><![CDATA[emprunt d'identité]]></category>
		<category><![CDATA[impersonate]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[WITH EXECUTE AS]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/mikedavem/?p=428</guid>
		<description><![CDATA[L&#8217;emprunt d&#8217;identité peut s&#8217;avérer nécessaire lorsque l&#8217;on commence à vouloir faire de la sécurité à un niveau granulaire relativement bas. Par exemple la politique de sécurité en vigueur peut nous contraindre à restreindre l&#8217;accès aux données via des procédures stockées. &#8230; <a href="https://blog.developpez.com/mikedavem/p11898/sql-server-2005/problme-dutilisation-de-loption-with-execute-as-dans-une-procdure-stocke-avec-les-serveurs-lis">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>L&rsquo;emprunt d&rsquo;identité peut s&rsquo;avérer nécessaire lorsque l&rsquo;on commence à vouloir faire de la sécurité à un niveau granulaire relativement bas. Par exemple la politique de sécurité en vigueur peut nous contraindre à restreindre l&rsquo;accès aux données via des procédures stockées. Cependant si ces données sont distantes et implique l&rsquo;implémentation d&rsquo;un serveur lié pour y avoir accès, cela peut donner matière à plus de réflexion. En effet, dans ce cas il va falloir donner les droits adéquates aux utilisateurs concernés sur le serveur distant pour accéder aux données, ce qui risque pour le coup d&rsquo;augmenter la surface d&rsquo;exposition. Un utilisateur A devra pouvoir exécuter une procédure stockée et sélectionner les données sur le serveur distant. L&rsquo;utilisateur A peut par conséquent passer outre la procédure stockée et se connecter directement au serveur distant pour accéder aux données. Pour éviter cela on peut tout à fait utiliser le mécanisme d&rsquo;emprunt d&rsquo;identité dans une procédure stockée à l&rsquo;aide de WITH EXECUTE AS et associer l&rsquo;utilisateur dédié à cette tâche à un utilisateur sur le serveur distant. On bénéficie ainsi d&rsquo;un contrôle d&rsquo;accès beaucoup fort et maitrisé. </p>
<p>&#160;</p>
<p>Le schéma ci-dessous illustre bien notre problématique :</p>
<p>&#160;</p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/04/icon_arrow2.gif"><img title="icon_arrow" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="icon_arrow" src="http://blog.developpez.com/mikedavem/files/2013/04/icon_arrow_thumb2.gif" width="15" height="15" /></a> Dans le 1er cas un mapping est nécessaire pour chaque utilisateur qui va vouloir accéder aux données du serveur distant <em>Instance 2</em>, ce qui signifie qu&rsquo;il devra exister les mêmes logins sur le serveur distant Instance 2. Comme je l&rsquo;ai évoqué au début cela implique également que les utilisateurs concernés pourront directement accéder aux données du serveur distant avec leurs informations de connexion.</p>
<p>&#160;</p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/04/image.png"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="http://blog.developpez.com/mikedavem/files/2013/04/image_thumb.png" width="673" height="236" /></a></p>
<p>&#160;</p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/04/icon_arrow3.gif"><img title="icon_arrow" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="icon_arrow" src="http://blog.developpez.com/mikedavem/files/2013/04/icon_arrow_thumb3.gif" width="15" height="15" /></a> Dans le 2ème cas nous mettons en place un mécanisme d&rsquo;emprunt d&rsquo;identité via l&rsquo;option WITH EXECUTE AS USER dans la procédure stockée. L&rsquo;idée ici est de n&rsquo;autoriser que cet utilisateur à avoir accès aux données distantes. </p>
<p>&#160;</p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/04/image1.png"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="http://blog.developpez.com/mikedavem/files/2013/04/image_thumb1.png" width="671" height="240" /></a></p>
<p>&#160;</p>
<p>La mise en place d&rsquo;un tel mécanisme dans le contexte des serveurs liés nécessitent un certain paramétrage :</p>
<ul>
<li>L&rsquo;activation obligatoire de l&rsquo;option de bases de données trustworthy. Malheureusement seule cette option est viable lorsqu&rsquo;il s&rsquo;agit d&rsquo;accès inter instances. L&rsquo;utilisation des certificats dans ce cas ne fonctionne pas. </li>
<li>Différer l&rsquo;exécution de la procédure stockée concernée. Je n&rsquo;ai pas trouvé d&rsquo;article Microsoft sur le sujet mais simplement un item <a href="http://connect.microsoft.com/SQLServer/feedback/details/411248/execute-as-clause-does-not-apply-to-linked-server-queries" target="_blank">connect</a>. C&rsquo;est ce point que je vais détailler ici. </li>
</ul>
<p>&#160;</p>
<p>Si l&rsquo;on utilise directement l&rsquo;option WITH EXECUTE AS dans une procédure stockée de la manière suivante :</p>
<p>&#160;</p>
<p><div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">PROCEDURE</span> dbo<span style="color: #66cc66;">.</span>GetRemoteData <br />
<span style="color: #993333; font-weight: bold;">WITH</span> <span style="color: #993333; font-weight: bold;">EXECUTE</span> <span style="color: #993333; font-weight: bold;">AS</span> <span style="color: #ff0000;">'USER1'</span><br />
<span style="color: #993333; font-weight: bold;">AS</span><br />
<br />
<span style="color: #993333; font-weight: bold;">SELECT</span> col1<span style="color: #66cc66;">,</span> col2<br />
<span style="color: #993333; font-weight: bold;">FROM</span> <span style="color: #66cc66;">&#91;</span>linked_server<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">.</span><span style="color: #66cc66;">&#91;</span><span style="color: #993333; font-weight: bold;">DATABASE</span><span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">.</span><span style="color: #66cc66;">&#91;</span>schema<span style="color: #66cc66;">&#93;</span><span style="color: #66cc66;">.</span><span style="color: #66cc66;">&#91;</span><span style="color: #993333; font-weight: bold;">TABLE</span><span style="color: #66cc66;">&#93;</span><br />
<span style="color: #993333; font-weight: bold;">GO</span></div></div>
</p>
<p>&#160;</p>
<p>&#8230; avec l&rsquo;appel suivant &#8230;</p>
<p>&#160;</p>
<p><div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">EXEC</span> dbo<span style="color: #66cc66;">.</span>GetRemoteData</div></div>
</p>
<p>&#160;</p>
<p>&#8230; il y a de grandes chances que cela ne fonctionne pas surtout si l&rsquo;on a définit le contexte d&rsquo;authentification de serveur lié suivant :</p>
<p>&#160;</p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/04/image2.png"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="http://blog.developpez.com/mikedavem/files/2013/04/image_thumb2.png" width="593" height="526" /></a></p>
<p>&#160;</p>
<p>Dans ce cas seul le mapping défini pour l&rsquo;utilisateur USER1 fonctionnera et aucun autre login ou aucun autre type d&rsquo;authentification ne fonctionnera. </p>
<p>&#160;</p>
<p>Si maintenant j&rsquo;exécute ou je crée la procédure stockée <em>dbo.GetRemoteData</em> dans le contexte d&rsquo;un utilisateur différent de l&rsquo;utilisateur USER1 ayant les droits de création et d&rsquo;exécution je peux me retrouver avec le message suivant : </p>
<p>&#160;</p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/04/image3.png"><img title="image" style="border-left-width: 0px;border-right-width: 0px;border-bottom-width: 0px;padding-top: 0px;padding-left: 0px;padding-right: 0px;border-top-width: 0px" border="0" alt="image" src="http://blog.developpez.com/mikedavem/files/2013/04/image_thumb3.png" width="678" height="85" /></a></p>
<p>&#160;</p>
<p>Pourtant me direz-vous que nous avons bien défini l&rsquo;emprunt d&rsquo;identité dans la procédure stockée et qu&rsquo;ici visiblement SQL Server n&rsquo;est pas capable de trouver le mapping défini dans les options de sécurité du serveur lié. En réalité il faut bien comprendre ce qui se passe lorsqu&rsquo;une procédure stockée est compilée et lorsque celle-ci est exécutée (run-time context). SQL Server compile une procédure stockée avec les credentials de l&rsquo;appelant de la procédure et non ceux de l&rsquo;utilisateur associée à l&rsquo;emprunt d&rsquo;identité. C&rsquo;est pendant l&rsquo;exécution de la procédure que le mécanisme d&rsquo;emprunt d&rsquo;identité jouera tout son rôle. Lorsqu&rsquo;on accède aux données aux travers d&rsquo;un serveur lié la compilation va générer l&rsquo;erreur 7416 si l&rsquo;appelant de la procédure n&rsquo;a pas un mapping inter-instances configuré (SQL Server va vérifier lors de la compilation l&rsquo;accès aux différents objets du serveur distant). </p>
<p>Pour contourner ce problème on peut user de 2 mécanismes qui permettent de différer l&rsquo;exécution de la procédure stockée et de laisser le mécanisme d&rsquo;emprunt d&rsquo;identité opérer en premier lieu :</p>
<ul>
<li>Créer une nouvelle procédure stockée qui va scinder l&rsquo;exécution de notre procédure stockée initiale en 2 étapes </li>
<li>Encapsuler le code à exécuter de la procédure stockée avec EXEC(&nbsp;&raquo;), ce qui permettra au final de faire la même que dans la 1ère solution. </li>
</ul>
<p>&#160;</p>
<p>Par exemple :</p>
<p><div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">PROCEDURE</span> dbo<span style="color: #66cc66;">.</span>GetRemoteDataWithImpersonate <br />
<span style="color: #993333; font-weight: bold;">WITH</span> <span style="color: #993333; font-weight: bold;">EXECUTE</span> <span style="color: #993333; font-weight: bold;">AS</span> <span style="color: #ff0000;">'USER1'</span> &nbsp;<br />
<span style="color: #993333; font-weight: bold;">AS</span><br />
<br />
<span style="color: #993333; font-weight: bold;">EXEC</span> dbo<span style="color: #66cc66;">.</span>GetRemoteData <br />
<span style="color: #993333; font-weight: bold;">GO</span></div></div>
</p>
<p></p>
<p>ou encore :</p>
<p><div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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;">PROCEDURE</span> dbo<span style="color: #66cc66;">.</span>GetRemoteData &nbsp; &nbsp;<br />
<span style="color: #993333; font-weight: bold;">WITH</span> <span style="color: #993333; font-weight: bold;">EXECUTE</span> <span style="color: #993333; font-weight: bold;">AS</span> <span style="color: #ff0000;">'USER1'</span> &nbsp; &nbsp; <br />
<span style="color: #993333; font-weight: bold;">AS</span><br />
<br />
<span style="color: #993333; font-weight: bold;">EXEC</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'SELECT col1, col2 FROM [linked_server].[database].[schema].[table]'</span><span style="color: #66cc66;">&#41;</span> &nbsp; &nbsp; <br />
<span style="color: #993333; font-weight: bold;">GO</span></div></div>
</p>
<p>&#160;</p>
<p>Le choix de la méthode dépendra bien du contexte.</p>
<p>&#160;</p>
<p>Bonne programmation !</p>
<p>David BARBARIN (Mikedavem)    <br />MVP SQL Server</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utiliser le m&#234;me certificat pour chiffrer les connexions SQL Server en SSL et pour TDE ?</title>
		<link>https://blog.developpez.com/mikedavem/p11713/sql-server-2005/utiliser-le-mme-certificat-pour-chiffrer-les-connexions-sql-server-en-ssl-et-pour-tde</link>
		<comments>https://blog.developpez.com/mikedavem/p11713/sql-server-2005/utiliser-le-mme-certificat-pour-chiffrer-les-connexions-sql-server-en-ssl-et-pour-tde#comments</comments>
		<pubDate>Sun, 13 Jan 2013 11:42:32 +0000</pubDate>
		<dc:creator><![CDATA[mikedavem]]></dc:creator>
				<category><![CDATA[SQL Server 2005]]></category>
		<category><![CDATA[SQL Server 2008]]></category>
		<category><![CDATA[SQL Server 2008 R2]]></category>
		<category><![CDATA[SQL Server 2012]]></category>
		<category><![CDATA[certificat]]></category>
		<category><![CDATA[sécurité]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[tde]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/mikedavem/?p=348</guid>
		<description><![CDATA[Lors d&#8217;une de mes dernières interventions nous avions implémenté chez un client le chiffrage des connexions SQL Server via SSL avec la mise en place d&#8217;un certificat. Ce même client m&#8217; a demandé s&#8217;il était possible d&#8217;utiliser ce même certificat &#8230; <a href="https://blog.developpez.com/mikedavem/p11713/sql-server-2005/utiliser-le-mme-certificat-pour-chiffrer-les-connexions-sql-server-en-ssl-et-pour-tde">Lire la suite <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Lors d&rsquo;une de mes dernières interventions nous avions implémenté chez un client le chiffrage des connexions SQL Server via SSL avec la mise en place d&rsquo;un certificat. Ce même client m&rsquo; a demandé s&rsquo;il était possible d&rsquo;utiliser ce même certificat pour chiffrer une de leurs bases de données via TDE au lieu d&rsquo;utiliser un certificat auto-signé. Vu de loin on pourrait penser que oui et que l&rsquo;implémentation du certificat dans SQL Server est une chose aisée mais il n&rsquo;en est rien. La raison est la suivante : l&rsquo;export du certificat avec la clé privée au travers du magasin de certificat Windows génère un fichier avec l&rsquo;extension .pfx qui n&rsquo;est pas exploitable directement par SQL Server. Il faut donc trouver un moyen d&rsquo;extraire de ce fichier le certificat et la clé privée dans 2 fichiers .cer et .pvk. Pour cela nous allons utiliser openssl. </p>
<p>&#160;</p>
<p>Pour commencer et après avoir exporté le certificat du magasin certificat, on se retrouve avec un fichier ayant l&rsquo;extension .pfx. Ce fichier stocke notre certificat, la clé publique et la clé privée. </p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/01/image4.png"><img title="image" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="image" src="http://blog.developpez.com/mikedavem/files/2013/01/image_thumb4.png" width="590" height="182" /></a></p>
<p> &#8230;
<p><a href="http://blog.developpez.com/mikedavem/files/2013/01/image5.png"><img title="image" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="image" src="http://blog.developpez.com/mikedavem/files/2013/01/image_thumb5.png" width="597" height="32" /></a></p>
<p>&#160;</p>
<p>Ensuite j&rsquo;ai utilisé la version light de SSL (Win32_OpenSSL_v1.0.1c_light) et j&rsquo;ai installé au préalable les composants redistribuables C++ 2008 (prérequis à l&rsquo;installation de openSSL).</p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/01/image6.png"><img title="image" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;margin: 0px;border-left: 0px;padding-right: 0px" border="0" alt="image" src="http://blog.developpez.com/mikedavem/files/2013/01/image_thumb6.png" width="588" height="206" /></a></p>
<p>&#160;</p>
<p>Une fois installée il suffit de lancer les commandes suivantes pour :</p>
<ul>
<li>Extraire dans un fichier PEM la clé privée et le convertir dans un format compréhensible pour SQL Server (fichier pvk)</li>
</ul>
<p><div class="codecolorer-container dos default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="dos codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">openssl.exe pkcs12 –<a href="http://www.ss64.com/nt/in.html"><span style="color: #00b100; font-weight: bold;">in</span></a> cert_ssl.pfx –nocerts –nodes –out cert_ssl_pvk.pem<br />
openssl.exe rsa –<a href="http://www.ss64.com/nt/in.html"><span style="color: #00b100; font-weight: bold;">in</span></a> cert_ssl_pvk.pem –outform PVK –pvk-strong –out cert_ssl.pvk</div></div>
</p>
<p>&#160;</p>
<ul>
<li>Extraire dans un fichier PEM&#160; le certificat et le convertir dans un format compréhensible pour SQL Server (fichier cer)</li>
</ul>
<p><div class="codecolorer-container dos default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><div class="dos codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">openssl.exe pkcs12 –<a href="http://www.ss64.com/nt/in.html"><span style="color: #00b100; font-weight: bold;">in</span></a> cert_ssl.pfx –nokeys –out cert_ssl_cer.pem<br />
openssl.exe x509 –outform DER –<a href="http://www.ss64.com/nt/in.html"><span style="color: #00b100; font-weight: bold;">in</span></a> cert_ssl_cer.pem –out cert_ssl.cer</div></div>
</p>
<p>&#160;</p>
<p>Ce qui nous donne les fichiers suivants :</p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/01/image7.png"><img title="image" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="image" src="http://blog.developpez.com/mikedavem/files/2013/01/image_thumb7.png" width="575" height="113" /></a></p>
<p>&#160;</p>
<p>Il suffit ensuite de créer le certificat correspondant dans SQL Server dans le contexte de la base master avec le certificat et la clé publique (.cer) et la clé privée correspondante (.pvk) :</p>
<p>,</p>
<p><div class="codecolorer-container sql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:650px;"><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> CERTIFICATE TDE_CERT_2<br />
<span style="color: #993333; font-weight: bold;">FROM</span> FILE <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'C:<span style="color: #000099; font-weight: bold;">\P</span>rogram Files<span style="color: #000099; font-weight: bold;">\M</span>icrosoft SQL Server<span style="color: #000099; font-weight: bold;">\M</span>SSQL10_50.MSSQLSERVER<span style="color: #000099; font-weight: bold;">\M</span>SSQL<span style="color: #000099; font-weight: bold;">\B</span>ackup<span style="color: #000099; font-weight: bold;">\c</span>ert_ssl.cer'</span><br />
<span style="color: #993333; font-weight: bold;">WITH</span> PRIVATE <span style="color: #993333; font-weight: bold;">KEY</span><br />
<span style="color: #66cc66;">&#40;</span><br />
&nbsp;FILE <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'C:<span style="color: #000099; font-weight: bold;">\P</span>rogram Files<span style="color: #000099; font-weight: bold;">\M</span>icrosoft SQL Server<span style="color: #000099; font-weight: bold;">\M</span>SSQL10_50.MSSQLSERVER<span style="color: #000099; font-weight: bold;">\M</span>SSQL<span style="color: #000099; font-weight: bold;">\B</span>ackup<span style="color: #000099; font-weight: bold;">\c</span>ert_ssl.pvk'</span><span style="color: #66cc66;">,</span><br />
&nbsp;DECRYPTION <span style="color: #993333; font-weight: bold;">BY</span> PASSWORD <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">'P@$$w0rd'</span><br />
<span style="color: #66cc66;">&#41;</span>;</div></div>
</p>
<p>&#160;</p>
<p>Vérification de la création correcte de notre certificat à l&rsquo;aide de la vue système<em><strong> sys.certificates</strong></em> :</p>
<p>&#160;</p>
<p><a href="http://blog.developpez.com/mikedavem/files/2013/01/image8.png"><img title="image" style="border-top: 0px;border-right: 0px;border-bottom: 0px;padding-top: 0px;padding-left: 0px;border-left: 0px;padding-right: 0px" border="0" alt="image" src="http://blog.developpez.com/mikedavem/files/2013/01/image_thumb8.png" width="983" height="185" /></a></p>
<p>&#160;</p>
<p>Bien entendu j&rsquo;avais déjà créé la clé de service master (SERVICE MASTER KEY) sur le serveur SQL. C&rsquo;est donc en toute logique que la clé privée du certificat que je viens de créer soit chiffrée par la clé master ici.&#160; Il ne reste ici plus qu&rsquo;à créer la clé de chiffrement de la base de données qui sera elle même chiffrée par notre certificat.</p>
<p>Bon chiffrement !</p>
<p>David BARBARIN (Mikedavem)    <br />MVP SQL Server</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
