Этот модуль реализует тип данных chkpass, который разработан для
хранения зашифрованных паролей. Каждый пароль после ввода автоматически
преобразуется в шифрованный вид и всегда хранится в шифрованном виде.
Для проверки пароля, происходит простое сравнение пароля в тестовом виде,
а функция сравнения сама зашифрует его перед сравнением.
В код встроена возможность выдачи сообщений об ошибке, если пароль будет
определён как легко взламываемый. Однако, в данный момент такая возможность
просто есть в наличии, но ничего не делает.
Если строка, которую вы вводите, начинается с двоеточия, то она считается
уже зашифрованным паролем и сохраняется без выполнения шифрования.
Это позволяет вводить пароли, которые были зашифрованы ранее.
При выводе, сперва выводится двоеточие. Это позволяет делать дамп и
перезагружать пароли без их перешифровки. Если вы хотите, зашированный
пароль без двоеточия затем использует функция raw()
. Это
позволяет вам использовать данный тип, например с такими приложениями
как Auth_PostgreSQL модуль в Apache.
Шифрование осуществляется с помощью стандартной функции Unix
crypt()
и таким образом, разделяет все обычные ограничения
этой функции; особенно то, что в качестве пароля используется только
первые восемь символов.
Обратите внимание, что тип данных chkpass является неиндексируемым.
Пример использования:
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)