programing

MySQL SERVER 8.0에서 Password 기능이 작동하지 않음

codeshow 2023. 10. 24. 21:38
반응형

MySQL SERVER 8.0에서 Password 기능이 작동하지 않음

실행 중 오류가 발생PASSWORDMySQL Server 버전 8.0.12에서 기능합니다.

다음과 같은 문의 사항이 있습니다.

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

다음 오류가 발생합니다.

오류 코드: 1064.SQL 구문에 오류가 있습니다. MySQL 서버 버전에 해당하는 설명서에서 다음에 사용할 올바른 구문을 확인하십시오.

암호() 함수와 일치하는 대체 해시가 필요한 경우 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       |
+-------------------------------------------------+

비밀번호()의 직접적인 교체는 @rayzinnz에서 답변을 참조하시기 바랍니다.

많은 사람들이 구글에서 비밀번호를 설정하거나 재설정하는 방법을 찾고 있을 것입니다.MySQL 8.0.22에서는 다음과 같은 작업을 수행해야 했습니다.

  1. /etc/mysql/my.cnf를 업데이트하고 줄을 추가합니다.

     [mysqld]
    
     skip-grant-tables
    
  2. mysql을 다시 시작하고 특정 사용자에 대한 authentication_string을 지웁니다.

     > systemctl restart mysql
     > sudo mysql
     mysql> UPDATE mysql.user SET authentication_string=null WHERE User='root';
     FLUSH PRIVILEGES;
     mysql> exit;
    
  3. 다시 로그인하고 암호를 업데이트합니다.

     > mysql -u root
     mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'my password';
     mysql> FLUSH PRIVILEGES;
    
  4. /etc/mysql/my.cnf를 업데이트하고 줄을 제거합니다.skip-grant-tables

     > systemctl restart mysql
    
  5. 마지막으로 테스트를

     > mysql -u root -p 
    

OP의 MySQL Server 버전은 8.0.12입니다.MySQL Documentation에서 Password 기능은 버전 > 5.7.5에서 더 이상 사용되지 않습니다.

메모

이 섹션의 정보는 MySQL 5.7.5 이전에만 완전히 적용되며, mysql_native_password 또는 mysql_old_password 인증 플러그인을 사용하는 계정에만 적용됩니다.MySQL 5.7.5에서는 4.1 이전 암호 해시에 대한 지원이 제거되었습니다.여기에는 mysql_old_password 인증 플러그인과 OLD_PASSWORD() 기능이 제거됩니다.또한 secure_auth는 비활성화할 수 없으며 old_passwords는 1로 설정할 수 없습니다.

MySQL 5.7.5 현재 4.1 암호 해시 및 mysql_native_password 인증 플러그인에 대한 정보만 관련된 상태로 남아 있습니다.

대신에.PASSWORD기능, 당신은 여기서 훨씬 더 우수하고 안전한 암호화 기능을 사용할 수 있습니다.MySQL 서버 팀의 자세한 내용은 여기에서 확인할 수 있습니다.

PASWER와 유사한 다른 함수를 만들 수 있습니다.

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

언급URL : https://stackoverflow.com/questions/52320576/in-mysql-server-8-0-the-password-function-not-working

반응형