这个模块实现了一种数据类型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)
D'Arcy J.M. Cain (<darcy@druid.net>
)