PostgreSQL中密码的数据types是什么?

我读了有数据types的encryption,所以密码保护在您的数据库。

我现在使用varchar来存储密码。 我有这样的想法,我应该以某种方式应用SHA-512函数的密码,并把这些数据的地方,使明文密码被删除。

但是,Perl中的数据types表明我在PostgreSQL中比varchar有更好的方法。

PostgreSQL中密码的数据types是什么?

杰夫有一篇很好的文章,标题为“ 你可能存储密码不正确” 。 本文讨论在数据库中存储密码的各种方法,以及可能遇到的一些常见错误。 特别的是,它讨论了哈希algorithm,彩虹表的使用,以及使用“盐”来减less密码文件受损的风险。

varchar数据types的使用非常适合存储适当散列的密码。 例如,以下是来自生产数据库的实际帐户logging的一部分:

  =>selectaccount_id,电子邮件,盐,passhash帐户,其中电子邮件=“greg@hewgill.com”;
  account_id | 电子邮件| 盐|  passhash                 
 ------------ + ------------------ + ------------------ + ------------------------------------------
           1 |  greg@hewgill.com |  GFR9uT4N4Tzl3vnK |  2c2bf00079a6d49a8f7fb17cefb52fdb41a4b043
 (1排)

在这种情况下, passhash是与我的密码连接的salt的SHA-1的hex表示forms。

安装“chkpass模块”

该模块实现一个数据typeschkpass,用于存储encryption的密码。 您需要安装postgresql contrib包并运行CREATE EXTENSION命令来安装。

在Ubuntu 12.04中,它会这样:

 sudo apt-get install postgresql-contrib 

重新启动postgresql服务器:

 sudo /etc/init.d/postgresql restart 

所有可用的扩展名都在:

 /opt/PostgreSQL/9.5/share/postgresql/extension/ 

现在你可以运行CREATE EXTENSION命令。

例:

 CREATE EXTENSION chkpass; CREATE TABLE accounts (username varchar(100), password chkpass); INSERT INTO accounts(username, "password") VALUES ('user1', 'pass1'); INSERT INTO accounts(username, "password") VALUES ('user2', 'pass2'); select * from accounts where password='pass2'; 

返回

 username | password --------------------------- "user2" | ":Sy8pO3795PW/k" 

Postgres版本9.4+可以使用pgcrypto扩展以更智能,更安全的方式完成,如下所示: http : //www.meetspaceapp.com/2016/04/12/passwords-postgresql-pgcrypto.html