database - 加密存储在数据库中的用户名是否有益?

标签 database security database-design language-agnostic authentication

关于 this question about passwords management 的第一个被接受的答案建议对数据库中的用户标识符进行加密。

好处是,如果有人获得密码,他必须知道如何解密用户登录以获得完整的登录名/密码对。

我看到的一些缺点,例如:

  • 每次要显示用户登录信息时都必须解密
  • 如果您想对用户登录进行“开头为”搜索以查找用户,您不能简单地使用 LIKE '...%'
  • ORDER BY 在登录字段上也可能相当困难......

您会推荐什么(是否加密用户标识符)?

最佳答案

和往常一样,答案是“视情况而定”。

一般来说,如果攻击者可以访问您的数据库,您的安全状况就会受到严重威胁,加密密码可能对您没有好处。这与使用单向哈希不同 - 有权访问您的数据库的攻击者很可能也可以访问您的解密 key ,而根据定义,单向哈希是一种方式。

正如您已经说过的,您可能需要定期访问用户 ID(尤其是如果您使用电子邮件地址作为用户 ID);在这种情况下,可以读取您的数据库的攻击者可能会拦截未加密的数据。

因此,如果您在银行、政府或任何其他必须将数据安全放在首位的地方工作,这种额外的保护可能是值得的,特别是如果您有强大的 key 管理系统。

对于其他用途,我认为额外的安全性太小,不值得额外的痛苦。

关于database - 加密存储在数据库中的用户名是否有益?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8139680/

相关文章:

asp.net-mvc - 如何从不在数据库表中的模型创建验证字段?使用 MVC4

ASP.net 安全问题 "Authorization"和 ".ASPXAUTH"cookies

mysql - 如何在 mySql 中创建弱实体?

sql - 推进 ORM : How to use own brackets in where clause

Java连接到数据库错误: java. lang.ClassNotFoundException : com. mysql.jdbc.Driver

c - 使 C 免受缓冲区溢出和其他错误影响的选项?

php - PDO准备好的语句是否足以防止SQL注入(inject)?

mysql - MySQL如何实现时间向上兼容?

mysql - 我需要为 SQL 中的 bool 列提供引用表吗?

java - 整数 null 以检查数据库