<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://blog.gobio2.net/index.php/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Le blog de Laurent - mysql</title>
  <link>http://blog.gobio2.net/index.php/</link>
  <description>Beaucoup de vide dans un monde de néant...</description>
  <language>fr</language>
  <pubDate>Mon, 28 Jul 2008 04:02:02 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Lancer un script mysql sans donner ni l'utilisateur ni le mot de passe sur la ligne de commande</title>
    <link>http://blog.gobio2.net/index.php/post/2007/10/03/Lancer-un-script-mysql-sans-donner-ni-lutilisateur-ni-le-mot-de-passe-sur-la-ligne-de-commande</link>
    <guid isPermaLink="false">urn:md5:239878b7bb0c1b4154237edd353c6f43</guid>
    <pubDate>Wed, 03 Oct 2007 23:43:00 +0200</pubDate>
    <dc:creator>Laurent</dc:creator>
        <category>Trucs en vrac</category>
        <category>astuce</category><category>mysql</category><category>shell</category><category>unix</category>    
    <description>    &lt;p&gt;Voici mon problème du jour : Comment lancer un script (de maintenance par exemple) qui fait appel à mysql, sans stocker en dur le nom de l'utilisateur et le mot de passe (ce qui est mal, très très mal). Le but est que seul un utilisateur privilégié (je n'ai pas forcément dit root ! je pense plutôt à un compte système comme mysql par exemple) puisse lancer ce script.&lt;/p&gt;
&lt;br /&gt;C'est plutôt facile, et je fournis trois solutions pour la peine :&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Avoir un fichier de configuration pour le script accessible seulement par l'utilisateur privilégié&lt;br /&gt;&lt;p&gt;On définit dans le fichier de configuration des variables d'environnement, une pour le user, une autre pour le mot de passe. Dans le script il ne reste qu'à utiliser la commande &lt;code&gt;source&lt;/code&gt; pour récuperer ses variables (seul l'utilisateur privilégié pourra lire le fichier). Simple et efficace.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Avoir un fichier de configuration pour mysql accessible seulement par l'utilisateur privilégié&lt;br /&gt;&lt;p&gt;Variante de la précédente : on crée un fichier de configuration spécifique pour mysql (que l'on pourra mettre par exemple dans /etc/mysql mais il n'y a aucune obligation). Et on utilise l'option --defaults-file pour que mysql lise le contenu du fichier (il lit notamment les sections &lt;code&gt;[client]&lt;/code&gt; et &lt;code&gt;[mysql]&lt;/code&gt;). Exemple de fichier:
&lt;/p&gt;
&lt;pre&gt;[client]&lt;br /&gt;host     = localhost&lt;br /&gt;user     = votre_user&lt;br /&gt;password = votre_mot_de_passe&lt;br /&gt;socket   = /var/run/mysqld/mysqld.sock&lt;/pre&gt;
Bonus :  on peut spécifier d'autres options pour influer sur mysql (en vrac, le nom de serveur, le jeu de caractères...).
&lt;/li&gt;
&lt;li&gt;Pour ceux qui ont plusieurs scripts mais qui ont des options qui diffèrent légèrement&lt;br /&gt;&lt;p&gt;Vous avez des scripts quasiment identiques mais les options diffèrent légèrement (ou vous voulez centraliser tout en un seul fichier) : c'est possible. C'est une variante du cas précedent : on écrit un fichier de configuration mysql que l'on découpe en plusieurs sections. Ensuite, on fait appel au programme &lt;code&gt;&lt;a href=&quot;http://dev.mysql.com/doc/refman/5.0/en/my-print-defaults.html&quot; hreflang=&quot;en&quot;&gt;my_print_defaults&lt;/a&gt;&lt;/code&gt; ! my_print_defaults examine le fichier de configuration (option &lt;code&gt;-c&lt;/code&gt; pour spécifier le votre...) et donne en sortie les paramètres à passer à mysql sous forme d'argument. Exemple :
&lt;/p&gt;
&lt;pre&gt;$ my_print_defaults -c /etc/mysql/maconf.cnf client &lt;br /&gt;--host=localhost&lt;br /&gt;--user=votre_user&lt;br /&gt;--password=votre_mot_de_passe&lt;br /&gt;--socket=/var/run/mysqld/mysqld.sock&lt;/pre&gt;
Il ne reste plus qu'à passer cela à mysql en récuperant la sortie dans une variable (ou en utilisant cette petite merveille de &lt;a href=&quot;http://en.wikipedia.org/wiki/Xargs&quot; hreflang=&quot;en&quot;&gt;xargs&lt;/a&gt;).
&lt;/li&gt;
&lt;/ol&gt;
&lt;br /&gt;</description>
    
    
    
          <comments>http://blog.gobio2.net/index.php/post/2007/10/03/Lancer-un-script-mysql-sans-donner-ni-lutilisateur-ni-le-mot-de-passe-sur-la-ligne-de-commande#comment-form</comments>
      <wfw:comment>http://blog.gobio2.net/index.php/post/2007/10/03/Lancer-un-script-mysql-sans-donner-ni-lutilisateur-ni-le-mot-de-passe-sur-la-ligne-de-commande#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.gobio2.net/index.php/feed/rss2/comments/11</wfw:commentRss>
      </item>
    
</channel>
</rss>