我看,有这样的数据类型的密码被固定在你的数据库里面做加密。
我现在用它varchar
来存储密码。我有个想法,我应该以某种方式对密码应用SHA-512函数,并将该数据放在某个地方,以便删除纯文本密码。
但是,Perl中的数据类型告诉我,PostgreSQL中有比varchar更好的方法。
PostgreSQL中密码的数据类型是什么?
我看,有这样的数据类型的密码被固定在你的数据库里面做加密。
我现在用它varchar
来存储密码。我有个想法,我应该以某种方式对密码应用SHA-512函数,并将该数据放在某个地方,以便删除纯文本密码。
但是,Perl中的数据类型告诉我,PostgreSQL中有比varchar更好的方法。
PostgreSQL中密码的数据类型是什么?
Answers:
杰夫有一篇很好的文章,标题为“您可能存储错误的密码”。本文讨论了在数据库中存储密码的各种方法,以及您可能会遇到的一些常见陷阱。特别是,它讨论了哈希算法,彩虹表的使用以及“盐”的使用,以减少密码文件遭到破坏的风险。
varchar
数据类型的使用非常适合存储正确散列的密码。例如,这是我来自生产数据库的实际帐户记录的一部分:
=>从其中email ='greg@hewgill.com'的帐户中选择account_id,电子邮件,盐,密码。 account_id | 电邮| 盐| 密码 ------------ + ------------------ + ------------------ + ------------------------------------------ 1 | greg@hewgill.com | GFR9uT4N4Tzl3vnK | 2c2bf00079a6d49a8f7fb17cefb52fdb41a4b043 (1列)
在这种情况下,passhash
盐的SHA-1的十六进制表示形式是与我的密码连接在一起的。
安装“ chkpass模块”
该模块实现了chkpass数据类型,该数据类型旨在用于存储加密的密码。您需要安装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