programing

MySQL 8.0 - 클라이언트가 서버에서 요청한 인증 프로토콜을 지원하지 않으므로 MySQL 클라이언트를 업그레이드하십시오.

procenter 2022. 9. 24. 22:04
반응형

MySQL 8.0 - 클라이언트가 서버에서 요청한 인증 프로토콜을 지원하지 않으므로 MySQL 클라이언트를 업그레이드하십시오.

어떤 이유에서인지 서버에 간단하게 접속할 수 없습니다.최신 MySQL Community 8.0 데이터베이스를 Node와 함께 설치합니다.디폴트 설정의 JS.

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

    var mysql = require('mysql');

    var con = mysql.createConnection({
      host: "localhost",
      user: "root",
      password: "password",
      insecureAuth : true
    });

    con.connect(function(err) {
      if (err) throw err;
      console.log("Connected!");
    });

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

C:\Users\mysql-test>node app.js
    C:\Users\mysql-test\node_modules\mysql\lib\protocol\Parse
    r.js:80
            throw err; // Rethrow non-MySQL errors
            ^

Error: ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
    at Handshake.Sequence._packetToError (C:\Users\mysql-
test\node_modules\mysql\lib\protocol\sequences\Sequence.js:52:14)
    at Handshake.ErrorPacket (C:\Users\mysql-test\node_mo
dules\mysql\lib\protocol\sequences\Handshake.js:130:18)
    at Protocol._parsePacket (C:\Users\mysql-test\node_mo
dules\mysql\lib\protocol\Protocol.js:279:23)
    at Parser.write (C:\Users\mysql-test\node_modules\mys
ql\lib\protocol\Parser.js:76:12)
    at Protocol.write (C:\Users\mysql-test\node_modules\m
ysql\lib\protocol\Protocol.js:39:16)
    at Socket.<anonymous> (C:\Users\mysql-test\node_modul
es\mysql\lib\Connection.js:103:28)
    at Socket.emit (events.js:159:13)
    at addChunk (_stream_readable.js:265:12)
    at readableAddChunk (_stream_readable.js:252:11)
    at Socket.Readable.push (_stream_readable.js:209:10)
    --------------------
    at Protocol._enqueue (C:\Users\mysql-test\node_module
s\mysql\lib\protocol\Protocol.js:145:48)
    at Protocol.handshake (C:\Users\mysql-test\node_modul
es\mysql\lib\protocol\Protocol.js:52:23)
    at Connection.connect (C:\Users\mysql-test\node_modul
es\mysql\lib\Connection.js:130:18)
    at Object.<anonymous> (C:\Users\mysql-test\server.js:
11:5)
at Module._compile (module.js:660:30)
at Object.Module._extensions..js (module.js:671:10)
at Module.load (module.js:573:32)
at tryModuleLoad (module.js:513:12)
at Function.Module._load (module.js:505:3)
at Function.Module.runMain (module.js:701:10)

https://dev.mysql.com/doc/refman/5.5/en/old-client.html https://github.com/mysqljs/mysql/issues/1507 등의 정보를 읽어 보았습니다.

하지만 나는 아직도 내 문제를 어떻게 해결해야 할지 모르겠어.어떤 도움이라도 주시면 감사하겠습니다.d

MYSQL Workbench에서 다음 쿼리를 실행합니다.

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

서 ★★★★★rootlocalhost 및 URL로 됩니다.password

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

flush privileges;

그런 다음 노드를 사용하여 연결을 시도하십시오.

안 될 때는 안 되고 안 될 때는 안 하고 .@'localhost'syslog.syslog.

요약

  1. 에러를 없애고 싶은 경우는, 프로젝트의 시큐러티(예를 들면 퍼스널 프로젝트나 개발 환경등)를 희생하고, @Pras의 회답에 따라 주세요.ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password' 다음에 또 한 번.flush privileges
  2. 없이 해 합니다.mysql2)mysql합니다. )을 사용합니다.npm i mysql2 , , , , 입니다.mysql = require('mysql2');.
  3. 항상 배우고 싶어하는 호기심 많은 개발자라면 계속 읽어보세요...:)

무슨 일이야?

먼저 무슨 일인지 확실히 해두죠.

MySQL 8 my my 8은 。에는 「」라고 하는 이름이 붙어 .caching_sha2_password보다 더 쓰입니다.mysql_native_password(소스).여러 개의 핸드쉐이크를 사용하는 암호 알고리즘을 사용하는 것이 24년 동안 존재해 온 일반 암호 패스워드보다 더 안전하다는 것은 분명합니다.

이제 는 ,, 제입니다.mysqljsNode(「」(「」)와 함께 하는 )npm i mysql노드 코드에서 사용)은 아직 MySQL 8의 새로운 기본 인증 방식을 지원하지 않습니다.이 호는 https://github.com/mysqljs/mysql/issues/1507에 게재되어 있으며, 3년이 지난 2019년 7월 현재도 오픈되어 있습니다.

업데이트 2019년 6월:이것을 수정하기 위한 새로운 PR이 mysqljs에 추가되었습니다!

2020년 2월 업데이트: mysqljs 버전 3으로 출시될 예정입니다.

2020년 7월 업데이트: 아직 (적어도 2020년 4월 현재) 출시되지 않은 것으로 보이지만, node-mysql2가 인증 스위치 요구를 지원하고 있다고 주장되고 있습니다.이 문제에 대해 정상적으로 동작하고 있는지 아래 코멘트를 부탁드립니다.나중에 직접 테스트해 보겠습니다.

업데이트 2021년 4월:이 문제는 아직 해결되지 않은 것 같습니다만, 불과 3일 전에 누군가가 포크를 만들어 거기에 만들었습니다.그러나 mysql.js 패키지는 아직 공식화되지 않았습니다.또, 이하의 코멘트에 의하면, mysql2 패키지는 정상적으로 동작해, Authentication-switch서포트하고 있는 것 같습니다.


현재 옵션

옵션 1) [권장하지 않음] 이전 "mysql_native_password"를 사용하여 인증하려면 "MySQL"을 다운그레이드합니다.

이는 모든 사람이 제안하고 있는 것입니다(위의 상위 답변 등).그냥 들어가면 돼mysql" " " 라는합니다.root 것을 쓰면 괜찮아요.mysql_native_password증증: :

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password ...

좋은 점은 삶이 단순해지고 Sequel Pro와 같은 오래된 도구를 문제없이 사용할 수 있다는 것입니다.그러나 문제는 보다 안전한(및 아래를 참조) 제품을 이용하지 못하고 있다는 것입니다.

옵션 2) [Meh...] "Node" 패키지를 MySQL Connector X DevAPI로 바꿉니다.

MySQL X DevAPI for Node는 http://dev.mysql.com 공식 사용자가 제공하는 노드의 Mysqljs 패키지를 대체하는 것입니다.

caching_sha2_password 포트(포트)를 사용해 33060(X 프로토콜 통신의 경우)

점은 것을 떠났다는 것입니다.mysql모두가 익숙하고 의지하고 있는 패키지입니다.

좋은 점은, 당신의 앱이 더 안전해지고 당신은 우리의 좋은 옛 친구들이 제공하지 못한 많은 새로운 것들을 이용할 수 있다는 것입니다!X DevAPI의 튜토리얼을 확인하시면 편리한 새로운 기능이 많이 탑재되어 있다는 것을 알 수 있습니다.학습 곡선에 대한 대가를 지불하기만 하면 됩니다.이것은, 테크놀로지 업그레이드에 수반되는 것입니다.:)

PS. 아쉽게도 이 XDevAPI 패키지에는 아직 타입 정의(TypeScript로 이해 가능)가 없기 때문에 타입 스크립트를 사용하고 있으면 문제가 발생합니다.를 사용하여 .d.ts 를 생성하려고 했습니다.dts-gen ★★★★★★★★★★★★★★★★★」dtsmake이치노러니니명명명명명

옵션 3) [권장] "mysql.js"를 "mysql2.js" 패키지로 바꿉니다.

전술한 바와 같이 mysql 패키지(NPM 패키지 링크)에서는 아직문제가 발생하고 있습니다(2021년 4월 현재).그러나 mysql2 패키지(NPM 패키지 링크)는 그렇지 않습니다.그래서 아마 다음은 한 줄짜리 답일 것입니다!

npm un mysql && npm i mysql2

해 주세요.mysql2인기 있는 작품에서 벗어나다mysql 인기 ( 다운로드, 62만건)mysql2 4월 4일)에 오리지날 ).mysql 4일)로됩니다!2021년 4월 4일)

건배!

mysql_native_password 삭제:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourRootPassword';
-- or
CREATE USER 'foo'@'%' IDENTIFIED WITH mysql_native_password BY 'bar';
-- then
FLUSH PRIVILEGES;

그 이유는caching_sha2_password는 MySQL 8.0에 도입되었지만 Node.js 버전은 아직 구현되지 않았습니다.자세한 내용은 이 풀 요청과 이 문제참조하십시오.아마 곧 고쳐질 거야!

MySQL 8의 전체 단계

MySQL에 연결

$ mysql -u root -p
Enter password: (enter your root password)

패스워드 리셋

(환환))your_new_password(미국의

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_password';
mysql> FLUSH PRIVILEGES;
mysql> quit

그런 다음 노드를 사용하여 연결을 시도합니다.

승인된 답변은 맞지만 새 사용자를 만든 후 해당 사용자를 사용하여 데이터베이스에 액세스하는 것이 좋습니다.

create user nodeuser@localhost identified by 'nodeuser@1234';
grant all privileges on node.* to nodeuser@localhost;
ALTER USER 'nodeuser'@localhost IDENTIFIED WITH mysql_native_password BY 'nodeuser@1234';

도, 「」를 사용할 경우.MySQL MySQL Server를 사용하여 할 때 하도록 지시하면 .Docker.

당신의 래,, 신 so는compose을 사용하다

# Use root/example as user/password credentials

version: '3.1'

services:

  db:
    image: mysql:8.0.15
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
       MYSQL_ROOT_PASSWORD: 'pass'
       MYSQL_DATABASE: 'db'
       MYSQL_USER: 'user'
       MYSQL_PASSWORD: 'pass'
    ports:
      - 3318:3306
    # Change this to your local path
    volumes:
      - ~/Database/ORM_Test:/var/lib/mysql

ALTER USER ... 명령줄이 작동하지 않고 Windows 10 을 사용하고 있는 경우는, 다음의 순서에 따라 주세요.

1) 윈도우 검색창에 MySQL을 입력합니다.

2) MySQL Windows Installer를 엽니다(커뮤니티).

3) "MySQL 서버"를 찾아 Reconfigure(재구성)을 클릭합니다.

4) '인증방법' 단계가 될 때까지 '다음'을 클릭합니다.

5) '인증방식' 단계에서 두 번째 옵션 '레거시 인증방식 사용'을 확인합니다.

6) 그 후 Windows instra에 의해 지정된 절차를 끝까지 따릅니다.

7) 완료되면 Windows 검색창에서 "Services"로 이동하여 "Start" MySql81을 클릭합니다.

다시 한 번 시도해 보십시오.MySQL과 Node.js 사이의 접속은 정상적으로 동작합니다.

가장 간단한 답은 다음과 같습니다.

  1. 노드에서 mysql 대신 mysql2 사용

노드에 mysql2 설치

  1. npm install mysql2

mysql db를 다운그레이드하지 마십시오.

당신은 가도 좋습니다.해피 코딩!

Mysql 최신 도커 컨테이너

ALTER USER root IDENTIFIED WITH mysql_native_password BY 'password';

다운그레이드는 다음과 같은 이유로 권장되지 않을 수 있습니다.

  1. (인증을 향상시키기 위해) 이유가 있어서 업그레이드된 것입니다.
  2. 이러한 내용을 변경할 수 있는 충분한 권한이 없을 수 있습니다.

하시면 됩니다.mysql2 mysqlmysqljs.mysqljs와 .

쓰세요.const mysql = require('mysql2/promise')메서드의 ) (약속 베이스 메서드의 경우)

은 이 글을 알 수 있습니다.mysql2여기:https://www.npmjs.com/package/mysql2

에서는 MySQL 8.0 입니다.caching_sha2_password는 기본 이며, 플러그인은 "Default plugin 。mysql_native_password. ...

에 대한 .caching_sha2_password로로 합니다.mysql_native_password 보안 관점에서, 이것은 정말로 실망스러운 일이다.

이 문서는 광범위하게 논한다caching_sha2_password물론 반드시 되어야 하지 않은 것이 첫번째 선택은 인증 방법을 상당 수준 약화시키다.

그것으로, 나는 에이딘의 대답이 될 것으로 받아들여지답이라고 믿는다.대신 인증 방법 등급 하락의, 그 대신 서버의 버전과 일치하는 커넥터를 사용한다.

만약 당신이 docker를 사용하고 있지만 나를 위해 일했어요!

docker-compose.yml다음과 같이 합니다.

mysql:
   ...    
   command: --default-authentication-plugin=mysql_native_password
   restart: always

후에 그후,,down와 (용기)up 또.

Windows 10 의 mysql 에 기존의 mysql 8.0 을 인스톨 하는 경우는,

  1. 설치 프로그램 시작,

  2. QuickAction(MySQL Server 왼쪽) 아래의 "Reconfigure"를 클릭한 다음

  3. [Next] (다음)을 클릭하여 다음 2개의 화면으로 넘어갑니다.

  4. "Authentication Method"에서 "Use Legacy Authentication Method (Retain MySQL 5.x 호환성 유지)"를 선택합니다.

  5. 설치가 완료될 때까지 계속 클릭

원본 매뉴얼은 https://dev.mysql.com/doc/dev/connector-nodejs/8.0/ 에서 구할 수 있습니다.

'use strict';

const mysqlx = require('@mysql/xdevapi');

const options = {
  host: 'localhost',
  port: 33060,
  password: '******',
  user: 'root',
  schema: 'yourconference'
};

mysqlx.getSession(options)
  .then(session => {
          console.log(session.inspect());
           session.close();
  }).catch(err => {
    console.error(err.stack);
    process.exit(1);
  });

서버에 MYSQL이 있고 다른 서버에 nodejs 어플리케이션이 있다.

MYSQL Workbench에서 다음 쿼리를 실행합니다.

mysql_native_password로 식별되는 사용자 'root'@'%'를 'password'로 변경합니다.

8은 MySQL 8+입니다.caching_sha2_passwordmysql_native_password. 보다 인증 되지 않습니다mysql아직 사용할 수 없습니다.단, 해 주십시오.@mysql/xdevapi오라클

새 패키지를 설치하려면 다음을 수행합니다.

npm install @mysql/xdevapi --save --save-exact

데이터베이스에 연결하고 일부 값을 삽입하려면:

const mysqlx = require('@mysql/xdevapi');
var myTable;

mysqlx
    .getSession({
        user: 'root',
        password: '*****',
        host: 'localhost',
        port: 33060
    })
    .then(function (session) {

    // Accessing an existing table
    myTable = session.getSchema('Database_Name').getTable('Table_Name');

    // Insert SQL Table data
    return myTable
        .insert(['first_name', 'last_name'])
        .values(['John', 'Doe'])
        .execute()
    });

공식 패키지 매뉴얼은 다음 URL에서 찾을 수 있습니다.https://dev.mysql.com/doc/dev/connector-nodejs/8.0/

위의 답변 외에 아래 명령어를 실행한 후

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

다음과 같은 오류가 표시되는 경우:

[ERROR] Column count of mysql.user is wrong. Expected 42, found 44. The table is probably corrupted

그런 다음 cmd를 admin으로 입력하고 cmd에서 MySQL 서버 bin 폴더의 경로를 설정합니다.

set path=%PATH%;D:\xampp\mysql\bin;

다음 명령을 실행합니다.

mysql_upgrade --force -uroot -p

그러면 서버와 시스템테이블이 갱신됩니다.

그러면 Workbench의 쿼리에서 다음 명령을 정상적으로 실행할 수 있습니다.

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

그런 다음 다음 명령을 실행해야 합니다.

flush privileges;

이 모든 단계를 완료하면 MySQL 데이터베이스에 성공적으로 연결할 수 있습니다.이게 도움이 되길...

저도 방금 이 문제에 부딪혔는데, 위에서 설명한 MySQL 재구성이 모두 여전히 오류가 나타납니다.가 데이터베이스 이름의 철자를 잘못 쓴 것으로 드러났습니다.

따라서 올바른 데이터베이스 이름으로 연결하고 있는지 확인하십시오. 특히 이 경우에는 더욱 그렇습니다.

MySql 8의 경우 루트 사용자의 인증을 변경하는 대신 모든 권한을 가진 새 사용자를 생성하고 인증 방식을 caching_sha2_password에서 mysql_native_password로 변경합니다.상세한 순서에 대해서는, 오치코 에크레사의 문서를 확인해 주세요.

순서의 개요:

  1. root 로 합니다.mysql -u root -p
  2. 만들기CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
  3. permission 든든 。GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';

특정 권한 부여에 대한 자세한 내용은 위의 문서 링크를 참조하십시오.

  1. 「」를 새로고침 .FLUSH PRIVILEGES;
  2. MySql을 합니다.quit; 할 수 있습니다.mysql -u [newuser] -p;
  3. 에서 인증을 합니다.ALTER USER 'newuser'@'localhost' IDENTIFIED WITH mysql_native_password by 'password';

추가 정보:저는 루트 인증을 변경한 후 인증 문제가 발생하여 로그인할 수 없었습니다.그래서 패스워드 리셋(패스워드 리셋 문서)을 했습니다.

MySQL2에서 크넥시즈를 사용하는 것을 추천합니다.

너는 갈 수.caching_sha2_passwordauth (인증)

Knex를 통한 쿼리:

const response = await knex.raw("SELECT * FROM USERS");

또는

는, 「」를 해 주세요.CREATE를 합니다.ALTER아래 명령어를 단말기에 입력하기만 하면 됩니다.

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'yourpass';
GRANT ALL ON *.* TO 'root'@'%';
Flush privileges;

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpass';
GRANT ALL ON *.* TO 'root'@'localhost';
Flush privileges;

모두 완료:)

MySQL 사용자의 권한과 사용자 이름/비밀번호를 확인합니다.

는, 오버라이드 된 「Override(오버라이드)」를 합니다._delegateErrorin. 의 경우 은 다음과 같이 합니다.사용자의 경우 다음과 같이 표시되어야 합니다.

var mysql = require('mysql');

var con = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "password",
  insecureAuth : true
});

var _delegateError = con._protocol._delegateError;

con._protocol._delegateError = function(err, sequence) {
    if (err.fatal)
        console.trace('MySQL fatal error: ' + err.message);

    return _delegateError.call(this, err, sequence);
};

con.connect(function(err) {
  if (err) throw err;

  console.log("Connected!");
});

이 구성은 치명적인 오류를 추적하는 데 도움이 됩니다.

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★결국 내게 한 것은 더해진 것이다.require('dotenv').config() 나 my my my.sequelizercsuccessilize-cli env success success 、

ORM, 빌더 등을 생략하고및 을 사용하여 DB/SQL 관리를 간소화할 수 있습니다.

-- create this file at: db/mdb/read.table.rows.sql
SELECT TST.ID AS "id", TST.NAME AS "name", NULL AS "report",
TST.CREATED_AT AS "created", TST.UPDATED_AT AS "updated"
FROM TEST TST
WHERE UPPER(TST.NAME) LIKE CONCAT(CONCAT('%', UPPER(:name)), '%') 
const conf = {
  "univ": {
    "db": {
      "mdb": {
        "host": "localhost",
        "username":"admin",
        "password": "mysqlpassword"
      }
    }
  },
  "db": {
    "dialects": {
      "mdb": "sqler-mdb"
    },
    "connections": [
      {
        "id": "mdb",
        "name": "mdb",
        "dir": "db/mdb",
        "service": "MySQL",
        "dialect": "mdb",
        "pool": {},
        "driverOptions": {
          "connection": {
            "multipleStatements": true
          }
        }
      }
    ]
  }
};

// create/initialize manager
const manager = new Manager(conf);
await manager.init();

// .sql file path is path to db function
const result = await manager.db.mdb.read.table.rows({
  binds: {
    name: 'Some Name'
  }
});

console.log('Result:', result);

// after we're done using the manager we should close it
process.on('SIGINT', async function sigintDB() {
  await manager.close();
  console.log('Manager has been closed');
});

나는 몇 시간 동안 이 오류를 겪었고 마침내 진상을 규명했다.Zchary의 말대로 올바른 데이터베이스 이름을 전달하고 있는지 매우 주의 깊게 확인하십시오.

사실, 내 경우엔 더 심했어 내 모든 것을 통과하고 있었다.createConnection()의 '''로 지정합니다.undefined왜냐면 내가 그들을 데리러 왔기 때문이다.process.env★★★★★★★★★★★★★★★★★★★!그 후 디버깅스크립트와 테스트 npm 스크립트는 기능했지만 정상 실행은 실패했습니다. ......

, , 및 "MySQL", "MySQL", "MySQL", "MySQL", "MySQL", "MySQL", "MySQL", "MySQL", "MySQL", "", "", "MySQL" 등입니다.undefined이치노

어쨌든, 이야기의 사기 - 어리석고 겉보기와는 다르게 보이는 것들을 먼저 확인하세요!

새 사용자 권한을 생성할 수 있는 경우 node.js에 정상적으로 연결하려면 그렇게 하십시오.

UPDATE mysql.user SET authentication_string = PASSWORD('MY_NEW_PASSWORD')
WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;

이건 나한테 효과가 있었어.

MySQL Server 설치 관리자를 실행하고 My SQL Server를 재구성하기만 하면 됩니다.이건 나한테 효과가 있었어.

세션의 mysql 연결에 사용하는 스키마를 사용해야 합니다.

(async () => {
    const connection = await db.connection();
    sessionStore = new MySQLStore({

    }, connection); //just pass your connection here 
})();

여기에 복사 붙여넣기만 하면 됩니다만, 고객님의 문의에 대응하기 위해 이와 유사한 것을 실장하고 있을 가능성이 있습니다.

const mysql = require('mysql')

if (!process.env.NODE_ENV || process.env.NODE_ENV === 'development') {
    require('dotenv').config();
}

const dbConfig = {
    host: process.env.DB_HOST,
    user: process.env.DB_USER,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_DATABASE,
    connectionLimit: process.env.DB_CONNECTION_LIMITS
}

const pool = mysql.createPool(dbConfig);

const connection = () => {
    return new Promise((resolve, reject) => {
        pool.getConnection((err, connection) => {
            if (err) {
                reject(err);
            }

            const query = (sql, binding) => {
                return new Promise((resolve, reject) => {
                    connection.query(sql, binding, (err, result) => {
                        if (err) {
                            reject(err);
                        }
                        resolve(result);
                    });
                });
            };

            const release = () => {
                return new Promise((resolve, reject) => {
                    if (err) {
                        reject(err);
                    }
                    resolve(connection.release());
                });
            };
            resolve({ query, release });
        });
    });
};

const query = (sql, binding) => {
    return new Promise((resolve, reject) => {
        pool.query(sql, binding, (err, result, fields) => {
            if (err) {
                reject(err);
            }
            resolve(result);
        });
    });
};

module.exports = { pool, connection, query };

MySQL에서도 같은 문제가 발생하고 있으며, MySQL(제어판 - Administrative Tools - Services)의 Windows에서 XAMPP를 사용하여 서비스를 중지하고 db.js(데이터베이스 담당) 폴더에서 암호를 비워 둡니다(여기 참조).

const mysql = require('mysql');
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: ''
});

데이터베이스에 액세스하기 위해 사용하는 사용자에게 액세스 권한이 있는지 확인합니다.
GRANT ALL PRIVILEGES ON * . * TO 'user'@'localhost';
첫 번째 별이 데이터베이스 이름으로 대체될 수 있는 경우 두 번째 별은 테이블을 지정합니다.츠키노

언급URL : https://stackoverflow.com/questions/50093144/mysql-8-0-client-does-not-support-authentication-protocol-requested-by-server

반응형