Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 在SQL Server中存储密码_Sql Server 2008 - Fatal编程技术网

Sql server 2008 在SQL Server中存储密码

Sql server 2008 在SQL Server中存储密码,sql-server-2008,Sql Server 2008,在SQL Server 2008中存储用户密码的推荐做法是什么 我正在为intranet存储用户详细信息,并希望获得有关存储用户详细信息的最佳方法的建议,如名称、密码和用户访问权限等。我正在考虑创建一个nvarchar列,然后在插入表之前加密此文本 这通常是做这件事的方法 您的应用程序将处理加密(以及可选的解密),数据库将只存储密码 我建议使用比过时的事实上的MD5更强的东西 大多数.net开发人员似乎喜欢使用TDE,T-Sql包含加密功能—4Guys在以前有aa,但我认为它仍然适用于2008年

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


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

这通常是做这件事的方法

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

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


大多数.net开发人员似乎喜欢使用TDE,T-Sql包含加密功能—4Guys在以前有aa,但我认为它仍然适用于2008年。

对敏感数据进行加密很好。但是,使用密码时,您永远不需要知道原始值,而且由于任何加密的内容也可以解密,因此您将这些信息置于被发现的危险之中

相反,您应该保留密码的散列。这个过程获取值并生成相当于非常复杂的校验和。给定密码,无法返回原始密码,这增加了此类信息的安全性。当您想知道某人是否给了您正确的密码时,您可以对他们给您的值进行散列,然后比较散列


安全是一个复杂的话题。即使使用散列,最终也可能导致系统存在严重的安全缺陷。如果您的团队中没有其他人已经具备此类知识,那么寻求安全顾问的帮助并不是一个坏主意。

存储密码的常用方法是在密码上使用哈希函数,但要事先将其删除。重要的是“盐”的密码,以保护自己免受攻击

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

._______._________________.______________.
|user_id|hash             |salt          |
|-------|-----------------|--------------|
|12     |adsgasdg@g4wea...|13%!#tQ!#3t...|
|       |...              |...           |
在检查给定密码是否与用户匹配时,应该将salt连接到给定密码,并计算结果字符串的哈希函数。如果哈希函数输出与
hash
列匹配,则为正确密码

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

如果你认为你的用户会使用一个敏感的密码(例如他们的Gmail帐户的密码)作为你的网站的密码,你也应该考虑使用它。 依我看,这并不总是一个需要的安全功能。所以你应该考虑你是否想要它

有关此机制的详细摘要,请参阅


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

我同意,当您可以使用MD5时,您希望使用比MD5更强大的功能。MD5不是一种加密算法,而是一种哈希算法。同意。我猜我不是很明确,所以你得到了一个up:)在大多数情况下都是正确的。鉴于OP在intranet上使用,在某些情况下(与需要登录的intranet上的其他应用程序集成),检索密码非常有用。如果是AD域,您不能让AD处理身份验证吗?谢谢大家的建议。上面的Richardlink不起作用,但有一个起作用。@JumpingJezza,谢谢,它曾经起作用,我正在更新链接那篇文章是关于对称密钥加密的。密码应该是散列的。我同意——我链接到的文章明显过时了。这就是为什么我个人对上面elazar leibovich的答案投了更高的票。