read知道有可以加密的数据类型,所以密码在您的数据库中是安全的.

我目前使用varchar来存储密码.我的 idea 是,我应该以某种方式将SHA-512函数应用于密码,并将数据放在某个位置,以便删除纯文本密码.

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

What is the datatype for a password in PostgreSQL?

推荐答案

杰夫有一篇很好的文章,题目是You're Probably Storing Passwords Incorrectly.本文讨论在数据库中存储密码的各种方式,以及可能遇到的一些常见缺陷.特别是,它讨论了使用散列算法、彩虹表和使用"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的十六进制表示形式,与我的密码连接在一起.

Database相关问答推荐

我们可以出于不同目的在同一 postgres 数据库上同时进行物理和逻辑复制吗?

如何将初始数据放入数据库

发布 Oracle 和 SQL Server 性能测试是否违反许可?

我应该为 Realm 中的每个实体定义主键吗?

Objective-C中是否有类似于LINQ的东西?

使用 2 个进程处理数据库

当可伸缩性无关紧要时,NoSQL 与 SQL

Oracle 和 SQL Server 中的 NVARCHAR 之间的区别?

如何在sqlite数据库中添加日期

应用程序服务器 JDBC 资源的 DataSource 或 ConnectionPoolDataSource

使用 Flask 时 Python 中持久数据库连接的最佳实践

返回 DataSet/DataTable 的 PowerShell 函数中的奇怪行为

返回 SQLite 数据库中表大小的查询

conflict serializable和conflict equivalent有什么区别?

MySQL:LAST_INSERT_ID() 返回 0

一个 Linq to Sql - 多个 .DBML 文件或一个 .DBML 文件

cURL 和 PHP 显示1

App=EntityFramework 在 Sql 连接字符串中有什么作用?

如何使用 group_concat 引用值

如何将空值传递给外键字段?