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的十六进制表示与我的密码连接.
安装"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)
Postgres 9.4+ 版可以使用 pgcrypto 扩展以更智能、更安全的方式完成此操作,如下所述:http : //www.meetspaceapp.com/2016/04/12/passwords-postgresql-pgcrypto.html
归档时间: |
|
查看次数: |
63198 次 |
最近记录: |