我正在图书馆学习MySQL和PHP。我通过更改
的密码存储来提高密码加密系统的安全性password=SHA('password')
到
password=SHA(CONCAT('password', '--', registration_date))
其中registration_date
是用户注册时的时间戳。
注册用户的当前代码是:
INSERT INTO users (first_name, last_name, email, password, registration_date)
VALUES ('first_name', 'last_name', 'email', SHA(CONCAT('password', '--', NOW())), NOW());
我需要担心那里有两个不同的NOW()函数吗?他们有可能会有不同的时间吗?我尝试了几个查询,似乎工作正常。
如果有问题,我该如何解决?
答案 0 :(得分:3)
没问题。来自manual:
NOW()返回一个常量时间,指示语句开始执行的时间。 (在存储的函数或触发器中,NOW()返回函数或触发语句开始执行的时间。)
正如手册中的示例所示,无论评估之间经过了多长时间,语句中NOW()
的每次评估都会返回相同的值。
答案 1 :(得分:0)
在一台服务器上,您不必担心。来自文档:
NOW()返回一个表示时间的常量时间 声明开始执行。
(http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_now)因此,一个查询中的值不会改变。
您应该注意基于语句的复制。如果您的数据库有可能以这种方式复制(例如,对于备份或HA),则从属服务器可能与主服务器具有不同的NOW()
。