不幸的是,我有明文的密码数据库。我想通过这些明文价值观周围尽可能小,也就是说,比较和更新。为此,我试图创造一个看我的用户表格,不包括纯文本密码,而不是提供一散列值得密码。

这是我目前的SQL服务器看,这没工作:

SELECT CAST(CAST(32768 * RAND() AS INT) AS NVARCHAR) AS PasswordSalt
       HashBytes('SHA1', PasswordSalt + u.Password) AS PasswordHash
FROM dbo.Users AS u

我很乐意听取有关替代这种做法,但在其他方面的问题似乎是串联的虚拟列 PasswordSalt 与..任何东西。例如,以下的简单视作品:

SELECT u.Login AS Column1, u.Login + 'b' AS Column2

但是这一次不:

SELECT u.Login AS Column1, Column1 + 'b' AS Column2

错误我收到从管理工作室

无效的列名'Column1'.

在此先感谢,对于任何想法,关于什么我做错了!

有帮助吗?

解决方案

问题是存在的,因为从条款的声明表示数据是所选择的来自用户的表格,但是选择的一部分引用了一个列名PasswordSalt.SQL服务器找不到一个列有此名称用户表,因此错误。

替代的办法可能产生的盐子查询。例如

SELECT x.PasswordSalt,  HashBytes('SHA1', x.PasswordSalt + x.Password) AS PasswordHash FROM ( SELECT  CAST(CAST(32768 * RAND() AS INT) AS NVARCHAR) AS PasswordSalt, Password FROM dbo.Users) x

其他提示

什么

SELECT CAST(CAST(32768 * RAND() AS INT) AS NVARCHAR) AS PasswordSalt 
       HashBytes('SHA1', CAST(CAST(32768 * RAND() AS INT) AS NVARCHAR) + u.Password) AS PasswordHash 
FROM dbo.Users AS u 
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top