이전 인증을 사용하는 MySQL 4.1 이상에 연결할 수 없습니다
PHP이전 인증을 사용하는 MySQL 4.1 이상에 연결할 수 없습니다
http://bluesql.net에서 mySQL 데이터베이스에 연결하려고하는데 연결할 때 다음과 같은 오류가 발생합니다.
Connect Error (2000) mysqlnd cannot connect to MySQL 4.1+ using old authentication
이것에 대해 살펴 보았고 MySQL 4.1 이전의 이전 암호 체계와 관련이있다. 최신 버전에는 이전 암호를 사용할 수있는 옵션이 있는데,이 오류로 인해이 문제가 발생할 수 있습니다.
나는 PHP 5.3을 실행 중이며 mySQLi (새로운 mysqli (...))와 연결하고있다. 나는 코드에서 bluesql.net의 DB에 연결하기 위해 뭔가를 할 수 있기를 바라고있다. 분명히 데이터베이스 설정 방법을 제어하지 않는다. 다운 그레이드 PHP 버전은 옵션이 아닙니다.
누구든지 아이디어가 있습니까?
해결법
-
==============================
1.편집 : 이것은 MySQL 서버를 제어하는 경우에만 적용됩니다 ... Mysql 암호 해싱 방법을 살펴 보지 않으면 이전과 새로운
편집 : 이것은 MySQL 서버를 제어하는 경우에만 적용됩니다 ... Mysql 암호 해싱 방법을 살펴 보지 않으면 이전과 새로운
먼저 SQL 쿼리를 확인하십시오.
SHOW VARIABLES LIKE 'old_passwords'
(MySQL 명령 행 클라이언트, HeidiSQL 또는 원하는 프런트 엔드에서) 서버가 기본적으로 이전 암호 스키마를 사용하도록 설정되었는지 여부를 지정합니다. 이것이 old_passwords를 반환하면, Off는 사용자 테이블에 이전 비밀번호 항목을 가지고 있습니다. MySQL 서버는이 계정에 대해 이전 인증 루틴을 사용합니다. 계정에 대한 새 암호를 설정하기 만하면 새 루틴이 사용됩니다.
mysql.user 테이블 (그 테이블에 접근 할 수있는 계정을 가지고 있음)을 살펴봄으로써 어느 루틴이 사용될 것인지를 확인할 수있다.
SELECT `User`, `Host`, Length(`Password`) FROM mysql.user
이렇게하면 이전 암호가있는 계정의 경우 16이고 새 암호가있는 계정의 경우 41이 반환됩니다 (암호가없는 계정의 경우 0이 반환되므로이를 처리하는 것이 좋습니다). MySQL 프런트 엔드의 사용자 관리 도구를 사용하거나 (있는 경우)
SET PASSWORD FOR 'User'@'Host'=PASSWORD('yourpassword'); FLUSH Privileges;
(사용자 및 호스트를 이전 쿼리에서 가져온 값으로 대체하십시오.) 그런 다음 암호의 길이를 다시 확인하십시오. 현재 41이어야하며 클라이언트 (예 : mysqlnd)가 서버에 연결할 수 있어야합니다.
또한 MySQL 설명서를 참조하십시오. * http://dev.mysql.com/doc/refman/5.0/en/old-client.html * http://dev.mysql.com/doc/refman/5.0/en/password-hashing.html * http://dev.mysql.com/doc/refman/5.0/en/set-password.html
-
==============================
2.방금이 문제가 있었고 해결할 수있었습니다.
방금이 문제가 있었고 해결할 수있었습니다.
먼저 old_passwords에 신경 쓰지 않는 이전 클라이언트로 MySQL 데이터베이스에 연결하십시오. 스크립트가 사용할 사용자를 사용하여 연결하십시오.
다음 쿼리를 실행하십시오.
SET SESSION old_passwords=FALSE; SET PASSWORD = PASSWORD('[your password]');
PHP 스크립트에서 mysql_connect 함수를 변경하여 클라이언트 플래그 1을 포함시킵니다.
define('CLIENT_LONG_PASSWORD', 1); mysql_connect('[your server]', '[your username]', '[your password]', false, CLIENT_LONG_PASSWORD);
이를 통해 성공적으로 연결할 수있었습니다.
편집 : Garland Pope의 의견에 따라 PHP 5.4에서 PHP 코드에서 CLIENT_LONG_PASSWORD를 수동으로 설정할 필요가 없을 수도 있습니다!
편집 : 안토니오 Bonifati, 당신을 위해 쿼리를 실행하는 PHP 스크립트의 호의 :
<?php const DB = [ 'host' => '...', # localhost may not work on some hosting 'user' => '...', 'pwd' => '...', ]; if (!mysql_connect(DB['host'], DB['user'], DB['pwd'])) { die(mysql_error()); } if (!mysql_query($query = 'SET SESSION old_passwords=FALSE')) { die($query); } if (!mysql_query($query = "SET PASSWORD = PASSWORD('" . DB['pwd'] . "')")) { die($query); } echo "Excellent, mysqli will now work"; ?>
-
==============================
3.당신은 당신의 mysql 쿼리 브라우저 또는이 라인을 할 수있다.
당신은 당신의 mysql 쿼리 브라우저 또는이 라인을 할 수있다.
SET old_passwords = 0; UPDATE mysql.user SET Password = PASSWORD('testpass') WHERE User = 'testuser' limit 1; SELECT LENGTH(Password) FROM mysql.user WHERE User = 'testuser'; FLUSH PRIVILEGES;
note : 사용자 이름과 비밀번호
그 후에 그것은 일할 수 있어야합니다. 나는 방금 내 문제를 해결했다.
-
==============================
4.OSX에서는 사이트 맵 데이터베이스에 연결할 때 동일한 문제를 해결하기 위해 MacPorts를 사용했습니다. Siteground에서 5.0.77mm0.1-log를 사용하고있는 것 같지만 새 사용자 계정을 만들지 않아도 문제가 해결됩니다. 이것은 무엇을 했는가?
OSX에서는 사이트 맵 데이터베이스에 연결할 때 동일한 문제를 해결하기 위해 MacPorts를 사용했습니다. Siteground에서 5.0.77mm0.1-log를 사용하고있는 것 같지만 새 사용자 계정을 만들지 않아도 문제가 해결됩니다. 이것은 무엇을 했는가?
sudo port install php5-mysql -mysqlnd +mysql5
이것은 PHP가 사용할 mysql 드라이버를 다운 그레이드합니다.
-
==============================
5.동일한 문제가 있지만 쿼리 만 실행하면 도움이되지 않습니다. 이 문제를 해결하기 위해 다음을 수행했습니다.
동일한 문제가 있지만 쿼리 만 실행하면 도움이되지 않습니다. 이 문제를 해결하기 위해 다음을 수행했습니다.
-
==============================
6.MySQL 서버 설정에 대한 관리자 권한이 없다면 (즉, 호스팅 서비스를 사용하고있는 경우), 다음 두 가지 옵션을 사용할 수 있습니다.
MySQL 서버 설정에 대한 관리자 권한이 없다면 (즉, 호스팅 서비스를 사용하고있는 경우), 다음 두 가지 옵션을 사용할 수 있습니다.
1) MySQL 서버에서 old_passwords 옵션을 false로 설정하도록 요청하십시오
2) 옵션 1이 발생할 때까지 PHP를 5.2.2로 다운 그레이드하십시오.
내가 찾은 것부터 MySQL 계정 암호가 저장되는 방식과 'old_passwords'설정이 true로 설정된 경우 문제가있는 것으로 보입니다. 이로 인해 MySQL과 새로운 버전의 PHP (5.3+) 사이의 호환성 문제가 발생합니다. PHP는 41 문자 해시를 사용하여 연결을 시도하지만 MySQL 서버는 여전히 16 자의 해시를 사용하여 계정 비밀번호를 저장합니다.
이 비 호환성은 MySQL 4.1에서 사용 된 해싱 방법을 변경하여 짧고 긴 해시 길이를 허용합니다 (이 페이지의 시나리오 2 : http://dev.mysql.com/doc/refman/ 5.5 / ko / password-hashing.html) 및 PHP 5.3에 MySQL Native Driver 포함 (PHP 설명서에서이 페이지의 글 머리 기호 7에 설명 된 이전 버전과의 호환성 문제 : http://www.php.net/manual/en /migration53.incompatible.php).
-
==============================
7.만약,
만약,
그때,
xampp 1.7.0을 설치하는 것이 좋습니다. 다운로드 링크
참고 : 위의 문제에 대한 해결책은 아니지만 개발을 계속할 수있는 FIX입니다.
from https://stackoverflow.com/questions/1575807/cannot-connect-to-mysql-4-1-using-old-authentication by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
태그 / 성능 열기 / 닫기? (0) | 2018.09.20 |
---|---|
PHP의 form POST에서 cURL을 통해 파일 보내기 (0) | 2018.09.20 |
PHP는 파일이나 호출 코드에 상대적인 경로를 포함하고 있습니까? (0) | 2018.09.20 |
내 PHP 앱에서 404 오류를 보내지 않는 이유는 무엇입니까? (0) | 2018.09.20 |
PHP 클래스에 코드를 포함 할 수 있습니까? (0) | 2018.09.20 |