【问题标题】:SQL - Update Query - access the value of a field I set in another field I am settingSQL - 更新查询 - 访问我在我正在设置的另一个字段中设置的字段的值
【发布时间】:2017-05-07 09:48:52
【问题描述】:

我的任务是实现密码散列,我必须通过编写 SQL 脚本来散列所有当前用户记录。到目前为止,我已经能够创建独特的盐(来自我也问过的另一个问题),但我在尝试实际散列它们时遇到了麻烦。

我的代码是:

UPDATE 
    user

SET 
    pass_salt = left(NEWID(), 13)
    ,user_pwd = convert(varchar(100), HASHBYTES('SHA1', user.user_pwd + user.pass_salt), 2)

WHERE
    security_user_id = 98

我的问题是我不确定在设置 user_pwd 时如何或是否可以访问 pass_salt 字段。目前,它只返回 null。

注意:我使用的是 SQL Server 2012。我使用“where”子句仅更改一条记录以进行测试。

感谢所有帮助。提前谢谢!

【问题讨论】:

    标签: sql hash sql-server-2012 passwords


    【解决方案1】:

    您可以通过 CTE 做到这一点:

    WITH toupdate as (
          SELECT u.*, left(NEWID(), 13) as new_pass_salt
          FROM user u
         )
    UPDATE toupdate
        SET pass_sale = new_pass_salt,
            user_pwd = convert(varchar(100), HASHBYTES('SHA1', user_pwd + new_pass_salt), 2)
        WHERE security_user_id = 98;
    

    一般来说,在update 中,= 左侧的值来自“新”记录,右侧的值来自“旧”记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-19
      • 1970-01-01
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多