MySQL 클라이언트를 업그레이드하십시오. MySQL 8.0 - 클라이언트가 서버에서 요청한 인증 프로토콜을 지원하지 않습니다.
P粉574695215
P粉574695215 2023-10-10 09:34:48
0
2
791

어떤 이유로 서버에 대한 단순 연결을 설정할 수 없습니다. 기본 설정을 사용하여 Node.JS와 함께 최신 MySQL Community 8.0 데이터베이스를 설치했습니다.

이것은 내 node.js 코드입니다

으아악

다음은 명령 프롬프트에서 발견된 오류입니다.

으아악

다음과 같은 내용을 읽었습니다. https://dev.mysql.com/doc/refman/5.5/en/old-client.html https://github.com/mysqljs/mysql/issues/1507

하지만 여전히 문제를 해결하는 방법을 잘 모르겠습니다.

P粉574695215
P粉574695215

모든 응답(2)
P粉161939752

요약

  1. 버그만 제거하고 싶다면 프로젝트 보안 위험을 감수하면서(예: 개인 프로젝트 또는 개발 환경일 뿐임) @Pras의 답변 -- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password' 然后 刷新权限
  2. 을 사용하세요.
  3. 수정하고 싶은데 이유를 모르겠다면 설치해서 사용하세요 mysql2 (而不是 mysql)并使用它 - npm我 mysql2mysql = require('mysql2');.
  4. 호기심이 많고 항상 배우고자 하는 개발자라면 이 글을 읽어보세요... :)

무슨 일이 있었나요?

먼저 무슨 일이 일어났는지 알아내야 합니다.

MySQL 8은 플러그형 인증 방법을 지원합니다. 기본적으로 caching_sha2_password 的密码,而不是我们的旧 mysql_native_password(source)라는 이름 중 하나가 사용됩니다. 분명히 다중 핸드셰이크를 사용하는 암호화 알고리즘은 24에서 사용되는 일반 비밀번호 전달보다 더 안전합니다. 년!

이제 문제는 Node 코드에서 이를 설치하고 사용하는 Node mysqljs (使用 npm i mysql 패키지가 MySQL 8에 대한 이 새로운 기본 인증 방법을 아직 지원하지 않는다는 것입니다. 문제는 여기에 있습니다: https://github.com/mysqljs/mysql/issues/1507 a> 2019년 7월 현재, 3년이 지난 후에도 여전히 열려 있습니다.

2019년 6월 업데이트: 지금 이 문제를 해결할 수 있는 새로운 PR이 mysqljs a>에 있습니다!

2020년 2월 업데이트: 분명히 mysqljs 버전 3에 포함될 예정입니다.

2020년 7월 업데이트: 아직 (적어도 2020년 4월 기준) 에는 없지만 에서는 node-mysql2이 인증 전환 요청을 지원한다고 주장합니다. node-mysql2이 효과가 있다면 아래에 댓글을 남겨주세요. 나중에 직접 테스트해 보겠습니다.

2021년 4월 업데이트: 문제는 여전히 존재하는 것 같습니다. 불과 3일 전에 누군가가 포크를 만들어 구현했지만 아직 공식적으로 mysql.js 패키지에는 없습니다. 또한 아래 댓글을 보면 mysql2 패키지가 제대로 작동하고 인증 전환을 제대로 지원하는 것으로 보입니다.


현재 옵션

옵션 1) [권장하지 않음] 인증을 위해 이전 "mysql_native_password"를 사용하려면 "MySQL"을 다운그레이드하세요

이것은 모두가 여기에서 제안하는 것입니다(예: 위의 가장 좋은 답변). 인증하려면 mysql 并运行一个查询,说明 root 可以使用旧的 mysql_native_password 방법만 입력하면 됩니다.

으아악

좋은 소식은 삶이 더 쉬워지고 질문 없이 Sequel Pro와 같은 오래된 도구를 계속 사용할 수 있다는 것입니다. 하지만 문제는 더 안전한 것(아래를 읽어 보세요)을 활용하는 것이 아니라는 것입니다.

옵션 2) [메...] "Node" 패키지를 MySQL Connecter X DevAPI로 교체

MySQL 이것은 X 프로토콜 통신을 위한 지원 처럼 작동합니다. )

안타깝게도 우리 모두가 익숙하고 의존했던 기존 caching_sha2_password 身份验证的超级按钮。 (只需确保您使用端口 33060 패키지에서 벗어났습니다. 보너스는 이제 귀하의 앱이 더 안전해지고 우리의 오랜 친구가 제공하지 않는 수많은 새로운 기능을 활용할 수 있다는 것입니다!

X DevAPI Tutorial

을 확인해 보세요. 편리하게 사용할 수 있는 새롭고 멋진 기능이 많이 포함되어 있다는 것을 알게 될 것입니다. 기술 업그레이드와 함께 제공되는 학습 곡선의 대가를 지불하면 됩니다. :)mysql 추신. 불행하게도 이 XDevAPI 패키지에는 아직 TypeScript가 이해하는 유형 정의가 없으므로

typescript

를 사용하면 문제가 발생합니다. 나는 dts-gen과 dtsmake를 사용해 .d.ts를 생성했지만 성공하지 못했습니다. 그러니 이 점을 명심하시기 바랍니다.

옵션 3) [권장] "mysql.js"를 "mysql2.js" 패키지로 교체

위에서 언급했듯이 mysql 패키지(NPM 패키지 링크)에는 여전히 이 문제가 발생합니다(2021년 4월 기준). 하지만 mysql2 패키지(NPM 패키지 링크)는 그렇지 않습니다. 따라서 다음은 아마도 쉬운 대답이 될 것입니다!

으아아아

참고, mysql2 是流行的 mysql 的一个分支,但它的受欢迎程度(4 月份 mysql2 每周下载量为 62 万次) 2020 年)已接近原始软件包(2021 年 4 月 mysql주당 720K 다운로드), 전환하는 것이 합리적으로 보입니다!

P粉198749929

MYSQL Workbench에서 다음 쿼리를 실행하세요

更改用户 'root'@'localhost' 通过 mysql_native_password BY 'password' 进行识别;

어디 root 사용자가 있나요? localhost 귀하의 URL로 그리고 password 비밀번호

그런 다음 다음 쿼리를 실행하여 권한을 새로 고칩니다.

刷新权限;

이 작업을 수행한 후 node를 사용하여 연결을 시도합니다.

이 방법이 작동하지 않으면 @'localhost' 부분 없이 시도해 보세요.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿