在MySQL Server 8.0.12版中执行PASSWORD
函数时出错
我有以下查询:
SELECT *
FROM users
WHERE login = 'FABIO'
AND pwd = PASSWORD('2018')
LIMIT 0, 50000
我收到此错误:
错误代码:1064。您的SQL语法有错误;检查 与您的MySQL服务器版本相对应的手册 在
附近使用的语法
答案 0 :(得分:22)
如果您需要替换散列来匹配password()函数,请使用以下代码:SHA1(UNHEX(SHA1())); 例如
mysql> SELECT PASSWORD('mypass');
+-------------------------------------------+
| PASSWORD('mypass') |
+-------------------------------------------+
| *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 |
+-------------------------------------------+
并在版本8中给出相同答案的替换:
mysql> SELECT CONCAT('*', UPPER(SHA1(UNHEX(SHA1('mypass')))));
+-------------------------------------------------+
| CONCAT('*', UPPER(SHA1(UNHEX(SHA1('mypass'))))) |
+-------------------------------------------------+
| *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 |
+-------------------------------------------------+
答案 1 :(得分:3)
OP的MySQL服务器版本为8.0.12。从MySQL Documentation开始,对于 version> 5.7.5 :
,不推荐使用PASSWORD功能注意
本节中的信息仅在MySQL 5.7.5之前完全适用, 并且仅适用于使用mysql_native_password的帐户或 mysql_old_password身份验证插件。支持4.1之前的版本 密码哈希在MySQL 5.7.5中已删除。这包括删除 mysql_old_password身份验证插件和OLD_PASSWORD() 功能。另外,secure_auth无法禁用,并且old_passwords 不能设置为1。
从MySQL 5.7.5开始,只有有关4.1密码哈希和 mysql_native_password身份验证插件仍然有用。
相反,您可以使用here中的PASSWORD
函数来使用更好,更安全的加密函数。可以从here查看MySQL服务器团队的更多详细信息。
答案 2 :(得分:0)
您可以创建另一个类似于 PASSWORD 的函数
SET GLOBAL log_bin_trust_function_creators = 1;
delimiter $$
CREATE FUNCTION PASSWORD2 (pass_in varchar(50)) RETURNS varchar(50)
BEGIN
declare n_pass varchar(50);
set n_pass = CONCAT('*', UPPER(SHA1(UNHEX(SHA1(pass_in)))));
return n_pass;
END$$
然后
SELECT PASSWORD2("my_super_scret_password") FROM MyUserTable ....