9.3 9.4 9.5 9.6 10 11
问题报告 纠错本页面

F.6. chkpass

这个模块实现了一种数据类型chkpass,它被设计用来存储加密的口令。每一个口令被自动地转换为加密的形式,并且总是以加密形式存储。要比较,可简单地与一个明文口令比较,并且比较函数将会对明文口令先加密。

代码中规定如果口令被判断为容易被攻破,将会报告一个错误。但是,目前这里只是一个分支,它并不做任何事情。

如果你在一个输入字符串前放一个冒号,它就被假定为一个已加密的口令,并且在存储时不会被进一步加密。这个特性使得已经被加密的口令能够被录入。

在输出时,将会预先考虑冒号。这使得我们可以在转储和载入时不需要重新加密它们。如果你想要没有冒号的加密口令,则可使用raw()函数。它允许你把该类型和类似Apache的Auth_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)

F.6.1. 作者

D'Arcy J.M. Cain ()