选择 打开 改范围 完整检索页
不受支持的版本: 10
当前 PostgreSQL 版本不在支持生命周期内。
您可以参阅当前版本手册首页的对应页面,或其他在上面列出的活跃大版本。

F.8. 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.8.1. 作者

D'Arcy J.M. Cain(