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