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

Léo*_* 준영 60 database postgresql types

读到有些数据类型可以加密,因此密码在您的数据库中是安全的.

我目前varchar用来存储密码.我有一个想法,我应该以某种方式将SHA-512函数应用于密码,并将该数据放在某处,以便删除纯文本密码.

但是,Perl中的数据类型告诉我PostgreSQL中有一种比varchar更好的方法.

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

Gre*_*ill 61

杰夫有一篇很好的文章标题为你可能错误地存储密码.本文讨论了在数据库中存储密码的各种方法,以及您可能遇到的一些常见陷阱.特别是,它讨论了使用散列算法,彩虹表以及使用"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是盐的SHA-1的十六进制表示与我的密码连接.

  • 通过使用GPU进行密码破解,这个答案已经过时了.SHA-1不是合适的密码散列算法. (7认同)
  • 建议:不要使用额外的盐盐.将其保存为密码,如下所示:{salt} {hash} (6认同)
  • 请改用scrypt. (3认同)
  • 是的,需要使用其他盐。否则,它就像根本没有盐一样。Jeff在他的文章中对此进行了介绍。 (2认同)

Ner*_* Jr 7

安装"chkpass模块"

该模块实现了一种用于存储加密密码的数据类型chkpass.您需要安装postgresql contrib包并运行CREATE EXTENSION命令进行安装.

在Ubuntu 12.04中它会是这样的:

sudo apt-get install postgresql-contrib
Run Code Online (Sandbox Code Playgroud)

重启postgresql服务器:

sudo /etc/init.d/postgresql restart
Run Code Online (Sandbox Code Playgroud)

所有可用的扩展名都在:

/opt/PostgreSQL/9.5/share/postgresql/extension/
Run Code Online (Sandbox Code Playgroud)

现在您可以运行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';
Run Code Online (Sandbox Code Playgroud)

返回

username | password
---------------------------
"user2"  | ":Sy8pO3795PW/k"
Run Code Online (Sandbox Code Playgroud)


Mur*_*han 5

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

  • 您能否更清楚地解释扩展的优点和缺点。现在,您的答案主要是仅链接的答案。 (6认同)
  • 不过请注意,如果您将 postgres 视为一种服务,并从某些云提供商处使用它,那么您可能无法控制在那里安装 pgcrypto 扩展。小心陷阱。 (4认同)
  • 2019 年,这将得出最正确的答案。谢谢! (2认同)