为什么要选择在应用程序层中使用哈希密码,而不是使用mysql SHA2()?

在将其插入数据库之前,我总是在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专家)

解决方法:

那不是哈希密码;但如果是(如果你在那里传递明文密码)……

数据库连接协议通常不加密.不使用此功能的一个原因是您通过网络以明文形式发送密码.如果有人控制了网络服务器和数据库之间路径的路由器,他们就可以拦截这些数据.

因此,您将在系统的安全性方面引入一个弱点.

上一篇:Docker


下一篇:windows10激活