Postgres chkpass比较'包含'而不是'平等'

时间:2018-06-07 12:46:27

标签: postgresql compare equals where-clause

我注意到postgres使用'contains'而不是'equal'来比较加密文本。 复制使用此:

create table "user" (uname text, password chkpass);
insert into "user" values ('user1', 'password')
select * from "user" where uname = 'user1' and password = 'password1'

这是一个主要问题。

有人注意到了吗?有人可以给我临时解决方案吗?

1 个答案:

答案 0 :(得分:0)

这不是错误。只是加密内部使用的crypt()函数的局限性。

  

我注意到postgres使用“ contain”而不是“ equal”比较加密的文本。

它不使用“包含”,而是检查要比较的文本的前八个字符。如Documentation of chkpass

中所述
  

加密使用标准的Unix函数crypt(),因此它受到该函数的所有通常限制;值得注意的是,只考虑了密码的前八个字符。

我建议您使用其他算法来加密密码(如in this post所述),然后将其存储在数据库中,而不要使用postgres chkpass。