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_sha2
mysqlnd의
현재 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
을 사용하다
- MySQL 설치 관리자 다시 실행
- MySQL Server(맨 위 항목) 옆의 "재구성"을 선택합니다.
- "Authentication Method(인증방법)"가 표시될 때까지 "Next(다음)"를 클릭합니다.
- "인증에 강력한 비밀번호 암호화 사용(권장)"을 "기존 인증 방법 사용(MySQL 5.X 호환성 유지)"으로 변경합니다.
- [다음]을 클릭합니다.
- 계정 및 역할에 루트 계정 암호를 입력하고 "확인"을 클릭합니다.
- [다음]을 클릭합니다.
- "Apply Configuration(구성 적용)"이 표시될 때까지 "Next(다음)"를 계속 클릭합니다.
- "실행"을 클릭합니다.
설치 관리자가 필요한 모든 구성을 변경합니다.
많은 사람들처럼 나도 같은 문제를 겪었어.사용자가 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 기본 인증 플러그인을 아직 변경하지 않은 경우 다음과 같이 변경할 수 있습니다.
- 「」로 합니다.
root
로 † - 다음 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 서버를 사용할 때 다음을 사용하여 수정했습니다.
- mySQL의 "my.ini" 파일에 있는 포트를 확인합니다.저의 경우 b/w MariaDB와 MySQLDB를 전환할 때 3308로 변경되었습니다.
- mysqli 개체를 생성할 때 포트 번호를 사용합니다.
위의 순서로 프로그램을 정상적으로 실행할 수 있었습니다.
phpMyAdmin GUI 방식
주의: 루트 사용자 계정에 문제가 있는 경우 이 방법이 작동하지 않을 수 있습니다.
- 루트로 phpMyAdmin에 로그인합니다.
- "사용자 계정" 탭으로 전환합니다.
- 오류가 발생한 사용자 이름을 선택합니다.
- 상단 버튼에서 "로그인 정보" 섹션으로 전환합니다.
- "로그인 정보" 상자에서 "인증 플러그인"을 "캐싱 sha2 인증"에서 "네이티브 MySQL 인증"으로 변경합니다.또한 사용자 이름 및 비밀번호를 포함하여 다른 필수 필드를 입력해야 합니다.
- 하단에 있는 "Go" 버튼을 클릭하여 저장합니다.
- 터미널로 돌아가서 즐기세요.:)
저 같은 경우에는 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
'source' 카테고리의 다른 글
하나의 행만 선택하는 동안 총 행 번호 가져오기 (0) | 2022.11.15 |
---|---|
MySQL의 ROW_NUMBER() (0) | 2022.11.15 |
'==' 또는 'is'를 사용하여 문자열을 비교하면 결과가 달라질 수 있는 이유는 무엇입니까? (0) | 2022.11.15 |
정수 해시 키를 사용할 수 있는 정수 해시 함수는 무엇입니까? (0) | 2022.11.15 |
Java의 동등한 Func 및 Action (0) | 2022.11.15 |