이전 인증을 사용하여 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 (new mysqli (...))와 연결하고 있습니다. bluesql.net에서 DB에 연결하기 위해 코드에서 무언가를 할 수 있기를 바랍니다. 분명히 데이터베이스 설정 방법을 제어 할 수 없습니다. PHP 버전 다운 그레이드는 옵션이 아닙니다.
누구나 아이디어가 있습니까?
편집 : 이것은 MySQL 서버를 제어하는 경우에만 적용됩니다 ... Mysql 암호 해싱 방법을 보지 않은 경우 이전 대 새
먼저 SQL 쿼리로 확인
SHOW VARIABLES LIKE 'old_passwords'
(MySQL 명령 줄 클라이언트, HeidiSQL 또는 원하는 프런트 엔드에서) 서버가 기본적으로 이전 암호 스키마를 사용하도록 설정되었는지 여부. 이 결과가 반환 old_passwords,Off
되면 user
테이블 에 이전 암호 항목이있는 것입니다. MySQL 서버는 이러한 계정에 대해 이전 인증 루틴을 사용합니다. 계정에 대한 새 암호를 설정하기 만하면 새 루틴이 사용됩니다.
mysql.user
테이블 (해당 테이블에 대한 액세스 권한이있는 계정)을 살펴보면 어떤 루틴이 사용 될지 확인할 수 있습니다.
SELECT `User`, `Host`, Length(`Password`) FROM mysql.user
이렇게하면 이전 암호가있는 계정의 경우 16 이 반환 되고 새 암호가있는 계정의 경우 41 이 반환됩니다 (암호가없는 계정의 경우 0 도 반환 됩니다).
MySQL 프런트 엔드 (있는 경우)의 사용자 관리 도구를 사용하거나
SET PASSWORD FOR 'User'@'Host'=PASSWORD('yourpassword');
FLUSH Privileges;
( User
및 Host
이전 쿼리에서 얻은 값으로 대체하십시오 .) 그런 다음 암호 길이를 다시 확인하십시오. 이제 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
서버를 제어 할 수 없는 경우
방금이 문제가 발생하여 해결할 수있었습니다.
먼저 old_passwords를 신경 쓰지 않는 이전 클라이언트로 MySQL 데이터베이스에 연결합니다. 스크립트에서 사용할 사용자를 사용하여 연결하십시오.
다음 쿼리를 실행합니다.
SET SESSION old_passwords=FALSE;
SET PASSWORD = PASSWORD('[your password]');
PHP 스크립트에서 클라이언트 플래그 1을 포함하도록 mysql_connect 함수를 변경합니다.
define('CLIENT_LONG_PASSWORD', 1);
mysql_connect('[your server]', '[your username]', '[your password]', false, CLIENT_LONG_PASSWORD);
이를 통해 성공적으로 연결할 수있었습니다.
편집 : 당 화환 교황 의 의견, 그것은 PHP 5.4로 더 이상 당신의 PHP 코드를 수동으로 설정 CLIENT_LONG_PASSWORD 할 필요가 없습니다!
편집 : 사용자를 위해 쿼리를 실행하는 PHP 스크립트 인 Antonio Bonifati 제공 :
<?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";
?>
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;
참고 : 사용자 이름 및 비밀번호
그 후에 작동 할 수 있어야합니다. 나도 방금 해결 했어
OSX에서는 MacPorts를 사용하여 사이트 그라운드 데이터베이스에 연결할 때 동일한 문제를 해결했습니다. Siteground는 5.0.77mm0.1-log를 사용하는 것으로 보이지만 새 사용자 계정을 만들어도 문제가 해결되지 않았습니다. 이게 무슨 짓이야
sudo port install php5-mysql -mysqlnd +mysql5
이것은 php가 사용할 mysql 드라이버를 다운 그레이드합니다.
같은 문제가 있었지만 쿼리 만 실행하면 도움이되지 않습니다. 이 문제를 해결하기 위해 다음을 수행했습니다.
- my.cnf 파일에서 old_passwords = 0 설정
- Restart mysql
- Login to mysql as root user
- Execute FLUSH PRIVILEGES;
If you do not have Administrator access to the MySQL Server configuration (i.e. you are using a hosting service), then there are 2 options to get this to work:
1) Request that the old_passwords option be set to false on the MySQL server
2) Downgrade PHP to 5.2.2 until option 1 occurs.
From what I've been able to find, the issue seems to be with how the MySQL account passwords are stored and if the 'old_passwords' setting is set to true. This causes a compatibility issue between MySQL and newer versions of PHP (5.3+) where PHP attempts to connect using a 41-character hash but the MySQL server is still storing account passwords using a 16-character hash.
This incompatibility was brought about by the changing of the hashing method used in MySQL 4.1 which allows for both short and long hash lengths (Scenario 2 on this page from the MySQL site: http://dev.mysql.com/doc/refman/5.5/en/password-hashing.html) and the inclusion of the MySQL Native Driver in PHP 5.3 (backwards compatibility issue documented on bullet 7 of this page from the PHP documentation: http://www.php.net/manual/en/migration53.incompatible.php).
IF,
- You are using a shared hosting, and don't have root access.
- you are getting the said error while connecting to a remote database ie: not localhost.
- and your using Xampp.
- and the code is running fine on live server, but the issue is only on your development machine running xampp.
Then,
It is highly recommended that you install xampp 1.7.0 . Download Link
Note: This is not a solution to the above problem, but a FIX which would allow you to continue with your development.
참고URL : https://stackoverflow.com/questions/1575807/cannot-connect-to-mysql-4-1-using-old-authentication
'developer tip' 카테고리의 다른 글
glBindVertexArrays 대 glBindBuffer의 역할은 무엇이며 그 관계는 무엇입니까? (0) | 2020.11.07 |
---|---|
Angular 2 구성 요소 @Input이 작동하지 않습니다. (0) | 2020.11.07 |
사전에 색인을 생성하는 방법은 무엇입니까? (0) | 2020.11.07 |
패턴 매칭 vs if-else (0) | 2020.11.07 |
덤프 파일을 사용하여 메모리 누수를 진단하려면 어떻게합니까? (0) | 2020.11.07 |