Note to self
Je n’oublierais plus d’installer mysql-dev avant d’essayer d’installer le binding ruby-mysql
Il faut que je me marque ça sur un marbre, accroché en pendentif !
Ca doit faire au moins 3 fois que je me fais avoir. Bon ce soir, j’ai juste mis 10 minutes avant de m’en rendre compte. Donc histoire de ne plus oublier, je note ici la procédure. Elle se déroule sur macosX mais elle s’adapte à tout à peut de chose prêt.
Pour l’installation de mysql:
pouype@pomme:pouype$ fink install mysql
pour la futur installation de ruby-mysql
pouype@pomme:pouype$ fink install mysql-dev
Et après on peut sereinement executé:
pouype@pomme:pouype$ gem install mysql
RubyGem c’est bien, c’est pratique. Il faudrait que j’en parle…
Dernière minutes
Bon en fait j’avais pas vu, mais ça n’as pas marché, un problème pour trouver les librairies mysql on dirait. Bref, Gem c’est bien, mais on bonne installation de librairies à l’ancienne, avec un setup.rb, install.rb ça marche mieux ;-)
Reflexion : les bases de données
Les bases de données et leurs gestionnaires (SGBD). Dans l’informatique de “gestion” c’est le commun des développeurs et autre administrateur. Une application sans base de donnée c’est rare, (disons que je n’en ai jamais vu). MySQL, PostgreSQL pour les bases les plus connu du monde libre, Oracle, Sybase et DB2 pour les commercials les plus connu.
Pour les applications de “gestion” je comprend l’interêt des base de données. Mais pourquoi doit-on utiliser une base de donnée pour un site web ? Après tout on fait du texte, on génère du HTML/XHTML. Et même en application de gestion, on map bien souvent les tables de la base de donnée avec des objets dit “metier”. Alors à quoi ça sert une base ? C’est ridicule non.
On pourrais imaginer que les interfaces d’administrations des blogs génère directement une page, et qu’en cas de bessoin on puisse la modifier. Une étape de moins, page en static donc un poil plus rapide à obtenir. Bref, que des avantages, enfin une petite limitation pour la mise à jour, c’est surement un peu plus long de reparser une page que d’accéder à quelque données dans une base.
Pour des applications autres, ou des données autres, on pourrais même imaginer des sérialisation d’objet, plutôt que de les mettre dans une base de donné. Pour peut qu’on sérialisze en XML, l’objet sérializé dans ce format serais accéssible en lecture beaucoup plus rapidement, et surtout par n’importe quelle technologie.
En bref, je me pose la question: Pourquoi mettre en base de données derrière toute les données ?
Je reconnais quelque avantage tout de même. On stock une donnée brut et non ça forme (quoique, avec les chaset on peut avoir des surprises, mais passons outre en suppossant que tout est en UTF-8 par exemple :) ). On peut croiser les données plus facilement, plus rapidement (merci SQL). Peut-être un jour XQL permettras de stocker des données en XML plutôt qu’en base de donnée, il y a déjà XPath qui fait très bien l’affaire je pense… A tester.
Mais a coté de ça, les données sont physiquement stocké en format propriétaire (enfin on sait que Mysql, quand on utilise le moteur MyIsam,stock les données en text clair). C’est donc un frein à l’intéropérabilité: on ne peut pas utilisé les Base de données contruite avec un Système de Gestion de Base de Donnée dans un autre. Genre on cré une base de donnée oracle et on s’y connecte avec PostgreSQL (Ou alors il faut m’expliqué, peut-être que j’ai raté une information quelque part).
Bref, pour le moment je continue à faire comme tout le monde, utiliser des bases de données pour stocker mes données, mais j’avoue que la question est pour moi en suspend depuis bientôt 2 ans…
C’est une question qui me dérange beaucoup. Mon problème c’est que j’ai l’impression que peut de gens se la pose. Aurais-je tord ? C’est possible. Mais je vais continué à creuser… Pourquoi toute les techno XML (base de donnée XML , XSL) ne sont pas plus utilisé, pourquoi une base de donnée tel que Xindice de la fondation Apache ne perce pas ? A voir…
Mysql user privileges
Désolé pour l’apparition du précédent billet, c’étais une erreur de manipulation :-p
Petite note pour l’ajout d’utilisateur avec Mysql.
Se connecter en root à Mysql
mysql -u root -p
Le -p c’est pour signaler qu’on vas saisir le mot de passe. J’espère que vous en avez mis un bon, root est un utilisateur ayant tout les droits sur toute vos bases Mysql…
Plusieur possibilités ensuite. La gestion des accès et des utilisateurs (ainsi que bien d’autres chose) sont faite par le biais d’une base système dans Mysql (dans oracle on a un petit peu ça aussi, je me demande si tout les moteur de base de donnée ne le font pas…). Donc soit on fait de la requête SQL basique sur les tables qui vont bien (dans notre cas mysql.user où mysql est le nom de la base accéssible par root uniquement et user la table de gestion des utilisateur mysql). Soit on utilise quelque raccourci (on vas faire les deux :p).
Pour ajouter un utilisateur “toto” pouvant se connecter à partir de la machine hebergant la base:
USE mysql; CREATE USER toto@localhost;
N’oublié pas le ; pour finir vos commande :). USE permet de spécifier sur quelle base on souhaite travailler. Le localhost précise que cet utilisateur ne pourra se connecté qu’à partir de “localhost”. Voilà un petit contrôle maintenant:
SELECT * FROM user;
Doit nous retourner la liste des utilisateurs, “toto” doit apparaitre avec toute les valeurs par défaut qui vont bien, mais sans mot de passe… La boulette ! Corrigeons ça:
UPDATE user SET password=PASSWORD("motdepasse")
WHERE user="toto";
La fonction PASSWORD permet de crypter le mot de passe dans la base de donnée.
Un autre petit select devrais nous confirmer que le mot de passe à bien été ajouté (bon normalement il est illisible :p).
Les accès maintenant. Ben oui, notre utilisateur toto n’accède à aucune base par défaut. Ajoutons lui l’accès (toujours avec l’utilisateur root):
GRANT ALL ON test.* TO 'toto'@'localhost';
Voilà, c’est basique, pas forcement très fin, mais ça donne un accès complet à l’utilisateur toto sur la base “test”.
Il faut ensuite valider toute ces modifications (surtout les privileges, la création d’utilisateur n’en à pas bessoin.
FLUSH PRIVILEGES;
Et voilà, on peut sortir et se connecté avec toto :). Il existe beaucoup d’option pour réglé les droits d’accès très finement. Si vous souhaité justement mettre en place une meilleur gestion d’utilisateur, je vous envoie vers la doc officielle qui est très bien faites : http://dev.mysql.com/doc/
Depuis longtemps je souhaite utiliser PostgreSQL en lieu et place de Mysql, mais voilà, le manque de temps tout ça… Bon okay, j’ai aucune excuse, promis je le ferais dès que j’ai le temps. En attendant, l’avantage affiché clairement de mysql c’est la simplicité, et il faut avouer que ça marche bien.
edit:
Petite ajout de dernière minutes. On peut (et je dirais même que ça semble mieux) ajouter les privilèges comme ceci:
grant all privileges on database_name.* to toto@host identified by "monpasswordenclair";