Ce module implante le type de données chkpass
, conçu pour
stocker des mots de passe chiffrés. Chaque mot de passe est automatiquement
converti dans sa forme chiffrée et est stocké ainsi. Pour comparer un mot
de passe, comparez-le simplement à un mot de passe en clair, la
fonction de comparaison le chiffrera automatiquement avant la comparaison.
Des dispositions dans le code prévoient de rapporter une erreur si le mot de passe s'avère facilement trouvable. Néanmoins, ce code pour le moment n'est qu'une coquille vide qui ne fait rien.
Une chaîne précédée d'un signe deux-points est considérée comme un mot de passe déjà chiffré et est stockée sans autre chiffrement. Ceci permet la saisie de mots de passe déjà chiffrés.
En sortie, le signe deux-points est ajouté en préfixe. Cela rend possible
la sauvegarde et la restauration des mots de passe sans les chiffrer de
nouveau. Pour obtenir le mot de passe (chiffré) sans le signe deux-points,
utilisez la fonction raw()
. Ceci permet d'utiliser
le type avec d'autres choses comme, par exemple, le module
Auth_PostgreSQL
d'Apache.
Le chiffrement utilise la fonction crypt()
du standard
Unix. Il souffre donc
des limitations habituelles de cette fonction, notamment le fait que seuls
les huit premiers caractères d'un mot de passe sont pris en compte.
Le type de données chkpass
n'est pas indexable.
Exemple d'utilisation :
test=# create table test (p chkpass); CREATE TABLE test=# insert into test values ('hello'); INSERT 0 1 test=# select * from test; p ---------------- :dVGkpXdOrE3ko (1 row) test=# select raw(p) from test; raw --------------- dVGkpXdOrE3ko (1 row) test=# select p = 'hello' from test; ?column? ---------- t (1 row) test=# select p = 'goodbye' from test; ?column? ---------- f (1 row)
D'Arcy J.M. Cain <darcy@druid.net>