source

php mysqli_connect: 클라이언트에 알 수 없는 인증방식 [http_sha2_password]

nicesource 2022. 11. 15. 21:38
반응형

php mysqli_connect: 클라이언트에 알 수 없는 인증방식 [http_sha2_password]

는 php php를 하고 있습니다.mysqli_connect 데이터베이스에(모두에 있음) MySQL " " " " " " " " localhost " " )

<?php
//DEFINE ('DB_USER', 'user2');
//DEFINE ('DB_PASSWORD', 'pass2');
DEFINE ('DB_USER', 'user1');
DEFINE ('DB_PASSWORD', 'pass1');
DEFINE ('DB_HOST', '127.0.0.1');
DEFINE ('DB_NAME', 'dbname');

$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

if(!$dbc){
    die('error connecting to database');    
}
?>

mysql.user 테이블은 다음과 같습니다.

MySQL Server ini 파일:

[mysqld]
# The default authentication plugin to be used when connecting to the server
default_authentication_plugin=caching_sha2_password
#default_authentication_plugin=mysql_native_password

caching_sha2_password Server 할 수.MySQL Server ini user1 user2 user2 。

오류: mysqli_connect():서버에서 클라이언트 [caching_sha2_password]에 알 수 없는 인증 방식을 요청했습니다.

mysql_native_password Server 할수user2에서는 가 발생합니다.MySQL Server ini user1은 user2로 로그인 할 수 .


를 사용하여 해야 합니까?caching_sha2_password Server mySql Server?에 접속할 수 ?

이 문제는 SQL 명령으로 해결합니다.

ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';

https://dev.mysql.com/doc/refman/8.0/en/alter-user.html에서 참조하고 있습니다.

새 사용자를 생성하는 경우

 CREATE USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

https://dev.mysql.com/doc/refman/8.0/en/create-user.html에서 참조하고 있습니다.

이거면 돼

PHP 7.4는 PHP 7.4입니다.원원의 caching_sha2mysqlnd의


현재 PHP mysqli 확장은 새로운 caching_sha2 인증 기능을 지원하지 않습니다.업데이트가 나올 때까지 기다려야 합니다.

MySQL 개발자로부터의 관련 투고를 확인합니다.https://mysqlserverteam.com/upgrading-to-mysql-8-0-default-authentication-plugin-considerations/

PDO에 대해서는 언급하지 않았습니다.PDO와 접속해 보는 것이 좋을지도 모릅니다.

ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';

따옴표(') 뒤에 있는 따옴표합니다.ALTER USER(') 뒤에(')를 붙입니다.mysql_native_password BY

저도 잘 되고 있어요.

상에서 를 수 caching_sha2_password을 사용하다

  1. MySQL 설치 관리자 다시 실행
  2. MySQL Server(맨 위 항목) 옆의 "재구성"을 선택합니다.
  3. "Authentication Method(인증방법)"가 표시될 때까지 "Next(다음)"를 클릭합니다.
  4. "인증에 강력한 비밀번호 암호화 사용(권장)"을 "기존 인증 방법 사용(MySQL 5.X 호환성 유지)"으로 변경합니다.
  5. [다음]을 클릭합니다.
  6. 계정 및 역할에 루트 계정 암호를 입력하고 "확인"을 클릭합니다.
  7. [다음]을 클릭합니다.
  8. "Apply Configuration(구성 적용)"이 표시될 때까지 "Next(다음)"를 계속 클릭합니다.
  9. "실행"을 클릭합니다.

설치 관리자가 필요한 모든 구성을 변경합니다.

많은 사람들처럼 나도 같은 문제를 겪었어.사용자가 mysql_native_password를 사용하도록 설정되어 있으며 명령줄에서 연결할 수 있지만 mysqli()를 연결할 수 있는 유일한 방법은 다음을 추가하는 것입니다.

default-authentication-password=password_password

ubuntu 19.10 셋업에서 /etc/sysqld.conf.d/mysqld.cnf의 [mysqld]섹션으로 이동합니다.

나에게도 유효 (PHP 5.6 + PDO / MySQL Server 8.0 / Windows 7 64비트)

을 합니다.C:\ProgramData\MySQL\MySQL Server 8.0\my.ini

default_authentication_plugin=mysql_native_password

Windows 및 MySQL Shell에서 MySQL 서비스 재설정...

ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';

했습니다.ALTER USER 'root' @ 'localhost' identified with mysql_native_password BY 'root123';명령줄에서 마지막으로 로컬 서비스에서 MySQL을 다시 시작합니다.

Mac을 사용하는 경우 다음과 같이 해결합니다.이것은 엄청난 시행착오를 거친 후다.이것이 다른 사람들에게 도움이 되길 바랍니다.

디버깅:

$mysql --verbose --help | grep my.cnf

$ which mysql
/usr/local/bin/mysql

해상도: nano /usr / local / etc / my . cnf

추가: default-authentication-password=password_password

-------
# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
default-authentication-plugin=mysql_native_password
------

최종 실행: brew services restart mysql

으로 PHP7 할 수 은 'PHP7.4'로 .MySQL은 「PHP7.4」를 탑재합니다.caching_sha2_password로는 MySQL 설치는 MySQL mysqli_connect설정은 불필요합니다.

Ubuntu 18.04에서 이것을 시도했는데, 이것이 나에게 효과가 있는 유일한 솔루션입니다.

ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';

MySQL 기본 인증 플러그인을 아직 변경하지 않은 경우 다음과 같이 변경할 수 있습니다.

  1. 「」로 합니다.root로 †
  2. 다음 SQL 명령을 실행합니다.

a. 다른 서버에서 MySQL을 실행하고 있는 경우:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password
BY 'password'; 

b. 다른 서버에서 MySQL을 실행하고 있는 경우:

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password
BY 'password'; 

Larabel 5.8을 사용하고 있습니다.MAMP 서버에서 다음과 같이 .env 파일에 DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock을 추가하여 이 오류를 해결합니다.

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=8889
DB_DATABASE=dbname
DB_USERNAME=root
DB_PASSWORD=root
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock

내 경우 WAMP 서버를 사용할 때 다음을 사용하여 수정했습니다.

  1. mySQL의 "my.ini" 파일에 있는 포트를 확인합니다.저의 경우 b/w MariaDB와 MySQLDB를 전환할 때 3308로 변경되었습니다.

여기에 이미지 설명 입력

  1. mysqli 개체를 생성할 때 포트 번호를 사용합니다.

여기에 이미지 설명 입력

위의 순서로 프로그램을 정상적으로 실행할 수 있었습니다.

phpMyAdmin GUI 방식

주의: 루트 사용자 계정에 문제가 있는 경우 이 방법이 작동하지 않을 수 있습니다.

  1. 루트로 phpMyAdmin에 로그인합니다.
  2. "사용자 계정" 탭으로 전환합니다.
  3. 오류가 발생한 사용자 이름을 선택합니다.
  4. 상단 버튼에서 "로그인 정보" 섹션으로 전환합니다.
  5. "로그인 정보" 상자에서 "인증 플러그인"을 "캐싱 sha2 인증"에서 "네이티브 MySQL 인증"으로 변경합니다.또한 사용자 이름 및 비밀번호를 포함하여 다른 필수 필드를 입력해야 합니다.
  6. 하단에 있는 "Go" 버튼을 클릭하여 저장합니다.
  7. 터미널로 돌아가서 즐기세요.:)

저 같은 경우에는 PHP를 사용하고 있습니다.Symfony그건 어리석은 실수예요

데이터베이스 credential이 올바르지 않습니다.paramers.yml.

이에 따라 자격 정보를 변경한 후 문제가 해결되었습니다.

caching_sha2_password 암호화 없이 mysql 서버를 설정하는 것은 유용하지 않다고 생각합니다.네트워크를 통해 안전한 정보를 공개, 송신 또는 취득하는 방법을 찾아야 합니다.아래 코드와 같이 변수 $db_name을 사용하지 않으며, Im은 standar 설정 비밀번호를 사용하여 mysql 서버에서 사용자를 사용합니다.Standar 사용자 암호를 만들고 모든 권한을 구성하십시오.작동하지만, 내가 어떻게 경건하지 않게 말했는지.

<?php
$db_name="db";
$mysql_username="root";
$mysql_password="****";
$server_name="localhost";
$conn=mysqli_connect($server_name,$mysql_username,$mysql_password);

if ($conn) {
    echo "connetion success";
}
else{
    echo mysqli_error($conn);
}

?>

언급URL : https://stackoverflow.com/questions/50026939/php-mysqli-connect-authentication-method-unknown-to-the-client-caching-sha2-pa

반응형