在MySQL SERVER 8.0中,PASSWORD功能不起作用

时间:2018-09-13 19:30:51

标签: mysql

在MySQL Server 8.0.12版中执行PASSWORD函数时出错

我有以下查询:

SELECT * 
FROM users 
WHERE login = 'FABIO' 
  AND pwd = PASSWORD('2018') 
LIMIT 0, 50000

我收到此错误:

  

错误代码:1064。您的SQL语法有错误;检查   与您的MySQL服务器版本相对应的手册   在

附近使用的语法

3 个答案:

答案 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 ....