在将其插入数据库之前,我总是在php(或其他)中对密码进行哈希处理.今天我发现mysql 5.5内置了散列,所以我可以这样做:
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| user_id | int(11) | NO | PRI | NULL | auto_increment |
| user_uname | varchar(63) | YES | UNI | NULL | |
| user_password | binary(32) | YES | | NULL | |
+-----------------+--------------+------+-----+---------+----------------+
--set password
UPDATE users SET user_password=UNHEX(SHA2(CONCAT('username','salt'), 256))\
WHERE user_id = 1;
-- validate password
SELECT (SELECT user_password FROM users WHERE user_id=1) = \
SHA2(CONCAT('username','salt'), 256);
这可能是一个坏主意吗? (我不是任何方式的mysql专家)
解决方法:
那不是哈希密码;但如果是(如果你在那里传递明文密码)……
数据库连接协议通常不加密.不使用此功能的一个原因是您通过网络以明文形式发送密码.如果有人控制了网络服务器和数据库之间路径的路由器,他们就可以拦截这些数据.
因此,您将在系统的安全性方面引入一个弱点.