MYSQL从SHA1生成登录哈希

时间:2014-02-19 15:45:54

标签: mysql sql

我正在尝试创建一个临时登录链接URI,用于单独使用mysql获取对安全区域的“可查看”访问权限。我们的想法是将字段的值设置为给定的sha1值。

sha1值将通过连接几个随机字段和一个盐来确定。 (我不确定这是不是很好的做法)

以下内容返回一个语法错误,我非常确定在子查询中使用相同的表名。有没有明智的方法来实现这一目标?我能用PHP做到这一点,但我正在努力开发自己的SQL技能。

任何有关“最佳实践”的建议也表示赞赏。

update rsvp set rsvp.rsvpViewHash = sha1(select sha1(concat(rsvp.rsvpURLSlug, rsvp.rsvpCreated, 'salt')) from rsvp);

1 个答案:

答案 0 :(得分:1)

有几个问题:

  1. 你要两次哈希。如果您担心哈希的安全性,请使用其他算法。已知SHA1不适用于加密应用程序,因此请改用SHA256。
  2. 你的子查询没有条件,所以它会尝试在表中的每一行上连接和sha1,可能不是你想要的。这也可能是语法错误的根源;返回多行的子查询可能不是sha1()的合适参数,但我对mysql不太熟悉以了解事实。
  3. 无论如何,根本不需要子查询。简化如下:

    UPDATE rsvp
    SET
      rsvpViewHash = CAST(sha1(concat(rsvpURLSlug, rsvpCreated, 'salt')) AS CHAR(10000) CHARACTER SET utf8)
    WHERE
      -- conditions
    ;
    

    EDITED

    将blob结果从blob转换为char;假设目标字段rsvpViewHash能够存储CHAR(10000)