将散列的密码与其余数据保存在同一个数据库中是否安全

将散列的密码与其余数据保存在同一个数据库中是否安全

问题描述:

我希望如果保存将散列的密码存储在一个表中,并且存储在其他数据(表)在同一个数据库?将散列的密码与其余数据保存在同一个数据库中是否安全

例如想象以下的(简化的)结构(有很多其他数据表):

authentication  user   
--------------  ----------- 
auth_id {PK}  user_id {PK} 
username   realname 
passwordhash  auth_id {FK} 

它是安全的存储这样的用户认证/口令,或是否应该differntly存储,也许在一个额外的数据库或其他?

我建议您查看Sophos的this article,因为它非常好地描述了原理和安全设计。

文章认为有一个单独的密码服务器,以便没有一个角色可以访问密码。

许多企业系统将密码从其他凭证中隔离开来。

+0

_“一般建议是有一个单独的密码服务器”_ - 你有任何消息来支持这种说法吗? – 1615903

这一切都取决于。通常,如果攻击者可以读取一个数据库,那么他们可能会读取另一个数据库,因此如果您的应用程序只是简单地打开一个到另一个数据库的SQL连接,您将不会获得明显的好处。

此外,如果他们可以访问您的数据库,他们可能会读取数据库中的流量,包括用户名/密码组合。因此,我建议将认证数据单独存储在单独的数据库中并不是安全方面的巨大改进;你最好把时间和精力花在其他安全问题上,比如密钥管理(你正在抨击你的哈希,对吗?)。

但是,如果您可以设置物理上独立的基础架构,并将身份验证功能作为服务公开给前端, OAuth,你会为攻击者创造一个重大障碍。他们将不得不妥协这个替代数据库,并且由于集成将在前端,他们不能依靠嗅探数据库的流量。