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