PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 05/09/2011 17:56:45

Darkroll
Membre

Problème de migration Mysql vers PostgreSQL avec la fonction PASSWORD

Bonjour,
J'ai repris le travail d'un développeur qui a quitté la société depuis de nombreuses années.

Je migre la base mysql vers Postgres mais je me heurte à un problème : "Il a chiffré tous les mots de passe avec la fonction mysql PASSWORD".

Existe-il une fonction au sein de Postgresql pour crypter le mot de passe de la même façon que la fonction PASSWORD de Mysql ?

Sinon avez-vous d'autres solutions ?

Merci d'avance !

Hors ligne

#2 05/09/2011 21:42:38

gleu
Administrateur

Re : Problème de migration Mysql vers PostgreSQL avec la fonction PASSWORD

Je ne sais pas exactement ce que fait la fonction password mais je suppose que ça chiffre un mot de passe. Pour chiffrer, vous avez la fonction md5. Vous avez accès à d'autres fonctions de chiffrement avec le module pgcrypto.


Guillaume.

Hors ligne

#3 06/09/2011 00:00:30

dverite
Membre

Re : Problème de migration Mysql vers PostgreSQL avec la fonction PASSWORD

L'équivalent de la fonction password() de mysql est:

'*' || upper(encode(digest(digest('LE MOT DE PASSE EN CLAIR','sha1'), 'sha1'), 'hex'))

La fonction digest() fait partie du module crypto (dans contrib)

Hors ligne

#4 06/09/2011 10:03:35

Darkroll
Membre

Re : Problème de migration Mysql vers PostgreSQL avec la fonction PASSWORD

Merci pour vos 2 réponses.
Mais malheureusement dverite, le mot de passe géré avec votre fonction ne renvoi pas le même résultat que la fonction password

Sur Mysql

select PASSWORD('test')

retourne : 
378b243e220ca493

Sur Postgresql

select upper(encode(digest(digest('test','sha1'), 'sha1'), 'hex'))

retourne : 
94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29

Si vous avez d'autre piste je suis preneur wink.

Merci !

Hors ligne

#5 06/09/2011 11:09:41

dverite
Membre

Re : Problème de migration Mysql vers PostgreSQL avec la fonction PASSWORD

Chez moi avec mysql 5.1.41 (ubuntu) ça donne ça:

mysql> select password('test');
+-------------------------------------------+
| password('test')                          |
+-------------------------------------------+
| *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29 |
+-------------------------------------------+
1 row in set (0.00 sec)

En fait la fonction password() a été changée à partir de mysql 4.1, donc apparemment tu utilises une version plus ancienne.

L'ancien comportement est disponible via old_password.
Voilà ce que donne old_password('test') sur mysql5:

mysql> select old_password('test');
+----------------------+
| old_password('test') |
+----------------------+
| 378b243e220ca493     |
+----------------------+
1 row in set (0.00 sec)

C'est bien ton résultat. Donc en fait c'est old_password() que tu veux.

L'algorithme de la fonction old_password() est spécifique à mysql, mais il est assez simple à réimplémenter, il y a un code php équivalent ici:
http://stackoverflow.com/questions/2602 … ementation
Ca parait tout à fait jouable en plpgsql.

Hors ligne

#6 06/09/2011 11:55:51

Darkroll
Membre

Re : Problème de migration Mysql vers PostgreSQL avec la fonction PASSWORD

Super ! Tu m'as donné la solution que je cherchais.
Merci encore !

Hors ligne

Pied de page des forums