이전 인증을 사용하여 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 드라이버가 다운그레이드 됩니다.
같은 문제가 발생했지만 쿼리를 단독으로 실행하는 것은 도움이 되지 않습니다.이 문제를 해결하기 위해 다음과 같이 했습니다.
- my.cnf 파일에서 old_cnf=0을 설정합니다.
- mysql 재시작
- 루트 사용자로 mysql에 로그인합니다.
- 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)에서 참조할 수 있습니다.
한다면,
- 공유 호스팅을 사용하고 있으며 루트 액세스 권한이 없습니다.
- 리모트 데이터베이스(localhost가 아닌)에 접속할 때 위의 오류가 발생합니다.
- Xampp를 사용하고 있습니다.
- 코드는 라이브 서버에서 정상적으로 동작하고 있습니다만, 문제는 xampp를 실행하고 있는 개발 머신에서만 발생합니다.
그리고나서,
xampp 1.7.0 을 인스톨 하는 것을 강하게 추천합니다.링크 다운로드
주의: 이것은 위의 문제에 대한 해결책이 아니라 개발을 계속할 수 있는 픽스입니다.
언급URL : https://stackoverflow.com/questions/1575807/cannot-connect-to-mysql-4-1-using-old-authentication
'programing' 카테고리의 다른 글
Python에서 고정 크기의 배열 초기화 (0) | 2022.11.08 |
---|---|
Jai와 Jai-imageio는 어디서 다운로드 받을 수 있나요? (0) | 2022.11.08 |
HTML 폼의 디폴트 송신 버튼은 어떻게 결정됩니까? (0) | 2022.11.08 |
여러 열을 사용한 중복에 대한 MySQL 선택 레코드 선택 (0) | 2022.11.08 |
MySQL select 문에 조건문을 작성하려면 어떻게 해야 합니까? (0) | 2022.11.08 |