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>