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, il suffit de comparer le champ avec un mot de passe en clair. La fonction de comparaison le chiffre automatiquement avant la comparaison.
Il existe des parties dans le code pour reporter une erreur si le mot de passe est facilement trouvable. Néanmoins, ce code ne fait rien actuellement.
Une chaîne précédée d'un symbole deux-points est supposée déjà chiffrée et se retrouve stockée sans autre traitement. Ceci permet la saisie des mots de passe précédemment chiffrés.
En sortie, le symbole 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 symbole deux-points, on utilise 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 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>