在MySQL SERVER 8.0中,密码功能不起作用
在MySQL服务器8.0.12版中执行在MySQL SERVER 8.0中,密码功能不起作用,mysql,mysql-8.0,Mysql,Mysql 8.0,在MySQL服务器8.0.12版中执行密码功能时出错 我有以下疑问: SELECT * FROM users WHERE login = 'FABIO' AND pwd = PASSWORD('2018') LIMIT 0, 50000 我得到这个错误: 错误代码:1064。您的SQL语法有错误;检查 与右边的MySQL服务器版本相对应的手册 使用near的语法 OP的MySQL服务器版本是8.0.12。从,函数已被弃用于版本>5.7.5: 注 本节中的信息仅适用于MySQL 5.
密码
功能时出错
我有以下疑问:
SELECT *
FROM users
WHERE login = 'FABIO'
AND pwd = PASSWORD('2018')
LIMIT 0, 50000
我得到这个错误:
错误代码:1064。您的SQL语法有错误;检查
与右边的MySQL服务器版本相对应的手册
使用near的语法
OP的MySQL服务器版本是8.0.12。从,函数已被弃用于版本>5.7.5: 注 本节中的信息仅适用于MySQL 5.7.5之前的版本, 并且仅适用于使用mysql\u本机\u密码或 mysql\u旧密码验证插件。对4.1之前版本的支持 MySQL 5.7.5中删除了密码哈希。这包括删除 mysql\u旧密码验证插件和旧密码() 功能。此外,不能禁用安全认证和旧密码 不能设置为1 从MySQL 5.7.5开始,只有关于4.1密码哈希和 mysql_本机_密码验证插件仍然相关
取而代之的是
密码
功能,您可以从中使用更好、更安全的加密功能。可以查看MySQL服务器团队的更多详细信息。如果需要替换哈希来匹配password()函数,请使用以下命令:SHA1(UNHEX(SHA1());
例如
以及在第8版中给出相同答案的替换:
mysql> SELECT CONCAT('*', UPPER(SHA1(UNHEX(SHA1('mypass')))));
+-------------------------------------------------+
| CONCAT('*', UPPER(SHA1(UNHEX(SHA1('mypass'))))) |
+-------------------------------------------------+
| *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 |
+-------------------------------------------------+
对于MySQL 8.0.22,我必须执行以下操作:
skip grant tables
systemctl重启mysql
您可以创建另一个类似于密码的函数
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$$
然后
您的mysql版本是什么?您确定在查询字符串中的select之前没有任何内容吗?@MadhurBhaiya mysql服务器版本是8.0。12@FabioC此函数在MySQL 8.0版中不存在。无论如何,您不应该将PASSWORD()函数用于自己的密码。该函数的手册多年来一直说它只供MySQL的系统表使用。改为使用。这里的官方参考称它实际上被删除了-你知道密码的位置是什么吗?@FabioC在底部查看我的更新答案。我提供了两份推荐信。添加了更高级的加密功能instead@MadhurBhaiya我正在看文件。我要用一种新的方法。非常感谢。为什么要投否决票?这回答了当人们在无法控制的情况下锁定到特定版本时,需要更换密码的问题。开始时的星号是什么?选择CONCAT('*',上部(SHA1)(UNHEX(SHA1('mypass'))))))
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 ....