<?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>Un bout de DBA &#187; mysql_upgrade</title>
	<atom:link href="http://www.noidea.ca/tag/mysql_upgrade/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.noidea.ca</link>
	<description>MySQL, En long et en large</description>
	<lastBuildDate>Tue, 09 Feb 2010 13:54:47 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Tout ce qu&#8217;il faut savoir sur les routines</title>
		<link>http://www.noidea.ca/2008/11/10/tout-sur-les-routines-mysql/</link>
		<comments>http://www.noidea.ca/2008/11/10/tout-sur-les-routines-mysql/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 02:02:19 +0000</pubDate>
		<dc:creator>PaT</dc:creator>
				<category><![CDATA[Astuces]]></category>
		<category><![CDATA[Routine]]></category>
		<category><![CDATA[mysql_upgrade]]></category>
		<category><![CDATA[procédure stockée]]></category>

		<guid isPermaLink="false">http://www.noidea.ca/?p=45</guid>
		<description><![CDATA[La syntaxe SQL pour créer une procédure stockée ou une fonction est simple. Cependant, il y a plusieurs choses à savoir pour créer et utiliser une routine. Tout d&#8217;abord, il faut connaitre les trois nouveaux privilèges liés aux routines:

Create routine pour créer des routines (procédure stockée ou fonction)
Alter routine pour modifier ou supprimer une routine. [...]]]></description>
			<content:encoded><![CDATA[<p>La syntaxe SQL pour créer une procédure stockée ou une fonction est simple. Cependant, il y a plusieurs choses à savoir pour créer et utiliser une routine. Tout d&#8217;abord, il faut connaitre les trois nouveaux privilèges liés aux routines:</p>
<ul>
<li><strong>Create routine</strong> pour créer des routines (procédure stockée ou fonction)</li>
<li><strong>Alter routine</strong> pour modifier ou supprimer une routine. Ce privilège est automatiquement donné au créateur de la routine.</li>
<li><strong>Execute</strong> pour les exécuter. Ce privilège est également donné automatiquement au créateur.</li>
</ul>
<p>Si l&#8217;option <em>automatic_sp_privilèges</em> est à 0, Alter routine et Execute ne seront pas automatiquement attribués au créateur. Il faut aussi savoir que ces 3 privilèges ne sont pas les seuls éléments de sécurité. Avec les procédures stockées, la caractéristique <em>SQL SECURITY</em> peut être utilisée pour définir si c&#8217;est les privilèges du créateur ou de celui qui l&#8217;exécute qui doivent être utilisés. La valeur par défaut est definer.</p>
<p>Le privilège SUPER doit être donné aux utilisateurs qui crée et exécute des routines sur des serveurs ayant le binary log activé, en plus des privilèges Create routine et alter routine. Vous conviendrez que donner un tel privilège n&#8217;est pas toujours souhaitable, donc MySQL s&#8217;est doté de l&#8217;option <em>log_bin_trust_routine_creators</em> (désactivée par défaut) pour pallier ce “problème”.</p>
<p>On pourrait se demander pourquoi cette option est désactivée par défaut. La réponse est simple: par souci de sécurité. Lorsque le binlog est activé, la création de routine doit absolument avoir <em>DETERMINISTIC</em>, <em>NO SQL </em>ou <em>READ SQL DATA</em> dans sa déclaration.</p>
<ul>
<li>Les caractéristiques <em>DETERMINISTIC </em>et <em>NOT DETERMINISTIC</em> indiquent si la routine produit toujours le même résultat pour la même entrée. Pour la déclarer <em>DETERMINISTIC</em>, vous devez le spécifier explicitement. Le défaut est <em>NOT DETERMINISTIC</em> ce qui signifie que la routine peut retourner des résultats différents pour la même entrée.</li>
<li>Les caractéristiques <em>CONTAINS SQL</em>, <em>NO SQL</em>, <em>READS SQL DATA</em> et <em>MODIFIES SQL DATA</em> indiquent si la routine sélectionne ou modifie des données. Le défaut est <em>CONTAINS SQL</em> si aucune caractéristique n&#8217;est spécifiée.</li>
</ul>
<p>L&#8217;option <em>log_bin_trust_routine_creators</em> permet d&#8217;outre passer cette sécurité. Si elle est activée, le créateur d&#8217;une fonction peut déclarer qu&#8217;elle est not deterministic. C&#8217;est pourquoi il est conseillé d&#8217;activer cette option seulement si vous avez une confiance entière aux usagers qui peuvent créer des routines. Une telle routine peut causer d&#8217;importants problèmes:</p>
<ul>
<li>Rendre les Slaves différents du master, puisqu&#8217;il n&#8217;y a aucune garantie que le résultat sera le même</li>
<li>Les données restaurées peuvent être différentes des données originales</li>
</ul>
<p>Comme vous devez vous douter, les routines sont stockées directement dans le serveur. Pour se faire, MySQL utilise 3 nouvelles tables: information_schema.routine, mysql.proc et mysql.proc_priv. Si vous upgradez un serveur à partir d&#8217;une version inférieure à MySQL 5, il faut s&#8217;assurer que ces tables sont présentes. Vous pouvez utiliser le script <a title="mysql_upgrade" href="http://dev.mysql.com/doc/refman/5.0/en/mysql-upgrade.html" target="_blank">mysql_upgrade</a> pour les ajouter.</p>
<p>Pour conclure, vous devez aussi savoir que le code qui constitue une routine est stocké différemment du code utilisé pour la créer. Les commentaires sont supprimés, c&#8217;est pourquoi il est conseillé de toujours conserver une copie du code de votre routine dans un fichier texte à l&#8217;extérieur du serveur.</p>
<p>Bien sur, il y a beaucoup d&#8217;autres choses à savoir, mais je crois que ça fait le tour de ce qui est essentiel!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.noidea.ca/2008/11/10/tout-sur-les-routines-mysql/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
