PostgreSQL 中密码的数据类型是什么?

,有数据类型,做加密,所以密码在您的数据库是安全的。

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

然而,Perl 中的数据类型表明 PostgreSQL 中有一种比 varchar 更好的方法。

PostgreSQL 中密码的数据类型是什么?

99914 次浏览

Jeff 有一篇题为 您可能存储的密码不正确的好文章。本文讨论在数据库中存储密码的各种方法,以及您可能会遇到的一些常见陷阱。特别是,它讨论了哈希算法、彩虹表的使用,以及使用“ salt”来降低密码文件泄露的风险。

varchar数据类型的使用非常适合于存储正确散列的密码。例如,下面是生产数据库中我实际帐户记录的一部分:

=> select account_id, email, salt, passhash from account where email = 'greg@hewgill.com';
account_id |      email       |       salt       |                 passhash
------------+------------------+------------------+------------------------------------------
1 | greg@hewgill.com | GFR9uT4N4Tzl3vnK | 2c2bf00079a6d49a8f7fb17cefb52fdb41a4b043
(1 row)

在本例中,passhash是与我的密码连接的 salt 的 SHA-1的十六进制表示。

安装“ chkpass 模块”

此模块实现一个用于存储加密密码的数据类型 chkpass。 您需要安装 postgreql 贡献包并运行 CREATEEXTENION 命令进行安装。

在 Ubuntu 12.04中是这样的:

sudo apt-get install postgresql-contrib

重新启动 postgreql 服务器:

sudo /etc/init.d/postgresql restart

所有可用的分机号码都在:

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

现在可以运行 CREATEEXTENION 命令。

例如:

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