Chkpass
From PostgreSQL 中文维基, PostgreSQL 中文站, PostgreSQL 中国社区, PostgreSQL Chinese community
[编辑] chkpass
这个模块实现了一个数据类型 chkpass,这个类型是设计来保存加密的密码的。在输入的时候,每个密码都自动转换成加密状态,并且总是以密文保存。比较的时候,只要和明文的密码进行比较即可,比较函数会在比较之前自动加密之(明文密码)。
代码里有一些逻辑,可以保证密码过于简单的时候会报告错误。不过,目前这部分逻辑只是存根,不做任何事情。
如果你把一个输入字串用冒号前缀,那么这个模块会认为是已经加过密的密码,就会不做任何处理存储起来。这样就允许我们可以存储以前加密过的密码。
在输出的时候,它会前缀一个冒号。这样我们就可以转储、恢复密码而不需要重新加密它们。如果你需要不带冒号的密文口令,那么可以使用 raw() 函数。这样你就可以在类似 Apache 的 Autho_PostgreSQL 这样的东西上使用这个类型了。
加密使用的是标准的 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)
[编辑] 作者
D'Arcy J.M. Cain (<darcy@druid.net>)
