【问题标题】:storing passwords in SQL Server在 SQL Server 中存储密码
【发布时间】:2010-10-26 22:55:52
【问题描述】:

在 SQL Server 2008 中存储用户密码的推荐做法是什么?

我正在为 Intranet 存储用户详细信息,并希望获得有关存储用户详细信息(例如名称、密码和用户访问权限等)的最佳方式的建议。我正在考虑创建一个 nvarchar 列,然后加密此文本在插入表格之前。

【问题讨论】:

  • 如果是AD域,不能让AD处理认证吗?
  • 感谢大家的建议。理查德

标签: sql-server-2008


【解决方案1】:

存储密码的常用方法是对密码使用哈希函数,但要事先salt。重要的是要“加盐”密码,以保护自己免受rainbow table 攻击。

所以你的桌子应该是这样的

._______._________________.______________.
|user_id|hash             |salt          |
|-------|-----------------|--------------|
|12     |adsgasdg@g4wea...|13%!#tQ!#3t...|
|       |...              |...           |

在检查给定密码是否与用户匹配时,应将盐与给定密码连接,并计算结果字符串的哈希函数。如果散列函数输出与hash 列匹配 - 它就是正确的密码。

但是,重要的是要理解 salt-hash 的想法有一个特定的原因 - 防止任何有权访问数据库的人知道任何人的密码(反转散列函数输出被认为是困难的问题)。例如,银行的 DBA 将无法登录您的银行帐户,即使他可以访问所有列。

如果您认为您的用户将使用敏感密码(例如他们的 gmail 帐户密码)作为您网站的密码,您也应该考虑使用它。

恕我直言,它并不总是需要的安全功能。所以你应该考虑你是否想要它。

请参阅this article 了解此机制的详细摘要。

更新: 值得一提的是,为了获得额外的安全性,以防止反向个人密码哈希的针对性攻击,您应该use bcrypt,这可能是任意难以计算的。 (但除非你真的害怕神秘的黑衣人瞄准你的特定数据库,否则我认为 sha1 已经足够了。我不会为我的项目引入另一个依赖项来获得额外的安全性。也就是说,没有理由不使用 sha1 100 次,会产生类似的效果)。

【讨论】:

  • 上面的链接不起作用,但this 一个可以。
  • @JumpingJezza,谢谢,以前可以用,我正在更新链接
【解决方案2】:

敏感数据的加密很好。但是,使用密码,您永远不需要知道原始值,因为任何被加密的东西也可以被解密,所以您将这些信息置于被发现的危险之中。

相反,您应该保留密码的哈希值。此过程获取值并生成相当于非常复杂的校验和。给定数字后,无法返回原始密码,从而提高了此类信息的安全性。当您想知道是否有人给了您正确的密码时,您可以对他们给您的值进行哈希处理并比较哈希值。

安全是一个复杂的话题。即使使用哈希,您最终也可能拥有一个存在重大安全漏洞的系统。如果您的团队中没有其他人已经具备这种知识,那么寻求安全顾问的帮助并不是一个坏主意。

【讨论】:

  • 在大多数情况下非常正确。鉴于 OP 在 Intranet 上使用,在某些情况下(与 Intranet 上需要登录的其他应用程序集成)能够检索密码可能很有用。
【解决方案3】:

这通常是这样做的。

您的应用程序将处理加密(和可选的解密),数据库将只存储密码。

我建议使用比过时的事实更强大的东西 - MD5

大多数 .net 开发人员似乎都喜欢使用 TDES

【讨论】:

  • 我同意你希望尽可能使用比 MD5 更强大的东西
  • MD5 不是加密算法,而是散列算法。 en.wikipedia.org/wiki/MD5
  • 同意。我想我不是很明确,所以你起床了:)
【解决方案4】:

T-Sql 包含加密功能 - 4Guys 有一个 good article on it for SQL Server 2005 aa,但我认为这仍然适用于 2008 年。

【讨论】:

  • 那篇文章是关于对称密钥加密的。密码应该是散列的。
  • 我同意 - 我链接到的文章已经过时了。这就是为什么我个人赞成上面 elazar-leibovich 的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多