programing

이전 인증을 사용하여 MySQL 4.1+에 연결할 수 없음

copyandpastes 2022. 11. 8. 21:40
반응형

이전 인증을 사용하여 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 버전을 다운그레이드할 수 없습니다.

생각나는 사람?

edit: 이것은 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);

이것으로 정상적으로 접속할 수 있었습니다.

편집: Garland Pope의 코멘트에 따르면 PHP 5.4에서 더 이상 수동으로 CLIENT_LONG_PASSWORD를 PHP 코드로 설정할 필요가 없을 수 있습니다.

편집: 쿼리를 실행하기 위한 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에서는 MacPort를 사용하여 사이트그라운드 데이터베이스에 접속할 때 동일한 문제를 해결했습니다.Siteground에서 5.0.77mm0.1-log를 사용하고 있는 것처럼 보이지만 새 사용자 계정을 생성해도 문제가 해결되지 않았습니다.이렇게 한 거야

sudo port install php5-mysql -mysqlnd +mysql5

그러면 php가 사용하는 mysql 드라이버가 다운그레이드 됩니다.

같은 문제가 발생했지만 쿼리를 단독으로 실행하는 것은 도움이 되지 않습니다.이 문제를 해결하기 위해 다음과 같이 했습니다.

  1. my.cnf 파일에서 old_cnf=0을 설정합니다.
  2. mysql 재시작
  3. 루트 사용자로 mysql에 로그인합니다.
  4. FLUSH 특권을 실행합니다.

MySQL Server 구성에 대한 관리자 권한이 없는 경우(즉, 호스팅 서비스를 사용 중인 경우), 이 기능을 작동시키기 위한 두 가지 옵션이 있습니다.

1) MySQL 서버에서 old_passwords 옵션을 false로 설정하도록 요청합니다.

2) 옵션 1이 발생할 때까지 PHP를 5.2.2로 다운그레이드합니다.

제가 확인한 바로는 MySQL 계정의 패스워드를 저장하는 방법과 'old_passwords' 설정이 true로 설정되어 있는지 여부가 문제인 것 같습니다.이로 인해 PHP가 41자 해시를 사용하여 연결을 시도하지만 MySQL 서버가 여전히 16자 해시를 사용하여 계정 암호를 저장하는 MySQL과 새로운 버전의 PHP(5.3+) 간의 호환성 문제가 발생합니다.

이 비호환성은 짧은 해시 길이와 긴 해시 길이(이 페이지의 시나리오 2)를 모두 허용하는 MySQL 4.1에서 사용된 해시 방식의 변경에 의해 야기되었습니다(MySQL 사이트: http://dev.mysql.com/doc/refman/5.5/en/password-hashing.html) 및 PHP 5.3에 MySQL Native Driver 포함).http://www.php.net/manual/en/migration53.incompatible.php)에서 참조할 수 있습니다.

한다면,

  1. 공유 호스팅을 사용하고 있으며 루트 액세스 권한이 없습니다.
  2. 리모트 데이터베이스(localhost가 아닌)에 접속할 때 위의 오류가 발생합니다.
  3. Xampp를 사용하고 있습니다.
  4. 코드는 라이브 서버에서 정상적으로 동작하고 있습니다만, 문제는 xampp를 실행하고 있는 개발 머신에서만 발생합니다.

그리고나서,

xampp 1.7.0 을 인스톨 하는 것을 강하게 추천합니다.링크 다운로드

주의: 이것은 위의 문제에 대한 해결책이 아니라 개발을 계속할 수 있는 픽스입니다.

언급URL : https://stackoverflow.com/questions/1575807/cannot-connect-to-mysql-4-1-using-old-authentication

반응형