ER_NOT_SUpported_AUTH_MODE - MySQL 서버
했습니다.Node.js Server
로로 합니다.MySQL-Database
"Node.js 서버"에 MariaDB를 설치했지만 SQL 데이터베이스를 사용하기로 결정했습니다."MariaDB"를 제거하고 완전히 삭제한 후 "Community Ed" "MySQL Database" 설치를 진행했습니다. *'MySQL Setup Process'**의 모든 과정을 거친 후 JS DB Connection에 대한 사실상의 코드 스니펫을 구현한 JavaScript 문서를 통해 데이터베이스로의 연결을 여러 번 시도했습니다. DB-Connection 문서는 코드 스니펫으로 아래 코드 스니펫으로 표시됨).실망스럽게도 각 시도에서 JS/SQL 연결이 실패했습니다.
다음은 Failed Connection 오류 메시지입니다.
"ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication
protocol requested by server. Consider upgrading MariaDB client."
사용 중인 JS/SQL 연결 스니펫:
var mysql = require('mysql');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '********',
database : 'foobarDb'
});
MySQL v8.0의 경우 다음을 사용합니다.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
를 다시 설정해야 돼요.Quick Action Settings
아래 스크린샷과 같이 "Reconfigure Link(링크 재구성)"를 클릭합니다.여기서 "레거시 비밀번호"를 선택합니다.v5.1
.
에러의 원인:
최신 "MySQL 버전"을 설치했습니다.v8.0
최신 버전에는 로그인 시 사용자를 인증하기 위한 다른 암호화 플러그인이 있습니다.5.6 및 5.1은 이전 암호화 알고리즘으로 돌아갑니다.oracle에 의해 보고된 몇 가지 보안 취약점에 주의해 주십시오.
이 Q/A 스레드에서 최상위 등급의 답변은 대부분 유효하지만 체계적이지 않습니다. 즉, 최소한입니다.해답은 여기 있지만, 그 해답은 세 가지 다른 해답 중 몇 가지에 지나지 않습니다.하나의 해결책으로, 보다 유용하고, 시간을 절약할 수 있는 답변을 제공하기 위해, 명확하고, 간결하고, 질서정연하게 스스로 답을 쓰려고 합니다.Ubuntu 사용자가 경험하는 모든 문제에 대해 설명하고, 또한 다른 답변에 포함되지 않고 독자가 문제를 이해하는 데 도움이 되는 정보를 추가합니다.
시작하려면:이 문제는 SQL 문제가 아니라 Ubuntu 문제입니다.
계속 문제가 되고 있는 것은, 사실과 관련이 있습니다(대부분의 소프트웨어 개발자/I).T. 프로페셔널은 Ubuntu에서 패스워드를 가지고 있지 않기 때문에 누구나 액세스 할 수 있습니다.$ sudo
특권이 문제가 발생하고 있는 모든 사용자에게 알기 쉽게 하기 위해 Ubuntu 사용자는 명령어를 사용하여 루트 사용자로 등록하는 반면 다른 모든 Linux 배포판에서는 패스워드가 포함된 사용자 ID를 사용합니다.실제로 데이터베이스 관리 이외에는 ROOT 사용자가 될 필요가 없었던 것은 기억나지 않습니다.또한 데이터베이스를 처음 서버에 설치할 때만 항상 사용할 수 있습니다.다만, 지금까지의 IT프로패셔널에 비해 경험이 크게 한정되어 있는 것 같습니다.내 말은, 일반적으로는sudo
모든 것이 작업을 수행하지만, 이 경우 문제가 있으므로 주의해야 할 중요한 사항은 다음과 같습니다.
문제:
Ubuntu에는 'ROOT PASSWORD'가 없기 때문에 이 문제에 대해 논의하는 모든 사람이 Ubuntu OS/SHEL 배포 프로그램을 실행하는 것입니다.또한 Ubuntu 커널 및 운영 체제의 다른 모든 것을 다시 작성하지 않으면 Ubuntu SHEL에 "root password"를 지정할 수 없습니다.
해결책:
Ubuntu SHEL에 루트 패스워드를 부여할 수 없을 수도 있지만 MySQL에 루트 패스워드를 부여할 수도 있습니다.'ROOT PASSWORD'
.
솔루션을 실행하려면 다음 사항이 필요합니다.
- Node.js v12+
- NPM(v5+가 필요할 수 있지만 이에 대해서는 언급하지 않음)
- MySQL v8.0+ (분명히)
- MySQL 드라이버(npm부터)
확인:
리스트의 모든 것을 아직 가지고 있지 않다면 솔직히 이것이 당신이 다루고 있는 문제라고 말할 수 없습니다.
만약 당신이 모든 것을 가지고 있다면
Ubuntu distro를 실행하고 있는 경우, 이 문제를 수정해야 했을 때와 같은 에러 메세지가 표시됩니다.
오류 메시지 표시:
ERROR: (28000): Access denied for user 'ajc'@'localhost'
ERROR: ERROR_NOT_SUPPORTED_AUTH_MODE: Client does not support
authentication protocol requested by server; consider upgrading
MySQL client
'Client does not support authentication protocol requested by server; consider upgrading MySQL client
만약 당신이 여전히 책을 읽는다면 아마도 당신은 올바른 곳에 있을 것이다.
이 문제를 해결하려면 빈 Node.js 프로젝트를 만들고 NPM을 사용하여 MySQL 드라이버를 의존관계로 설치합니다(이 문제가 발생하기 위해서는 이 방법을 알아야 합니다).JavaScript 추가
.js
을 합니다.sqltest.js
뭐그 、 거잖잖요요요 요잖요요 。방금 작성한 파일에 아래 코드를 추가합니다.
let mysql = require('mysql');
let connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '********',
database : 'DB_App_00',
});
connection.connect(function(err) {
if (err) {
return console.error('error: ' + err.message);
}
console.log('Connected to the MySQL server.');
});
create Connection'이라는 메서드는 MySQL 데이터베이스 서버에 대한 유효한 연결을 위해 자격 증명 값을 유지하는 JSON OBJ 매개 변수입니다.사용자는 'root'와 같아야 하며 데이터베이스가 존재해야 합니다.또한 나중에 테스트하기 위해 테스트 테이블을 BS 데이터와 함께 데이터베이스에 추가합니다."
이제 터미널 창을 열고 일반적인 업데이트 및 업그레이드를 수행합니다.이것이 중요하기 때문에 모든 튜토리얼에서 이 작업을 수행하도록 요구됩니다.
~$: sudo apt update
~$: sudo apt upgrade
- 업그레이드 후 단말기에 다음 명령을 입력합니다.
~$: sudo mysql -u root
- Ubuntu Password(Ubuntu 비밀번호)를 입력하라는 메시지가 나타나면 입력한 후 [ENTER](입력)을 누릅니다.
다음 단계는 매우 중요합니다.
- 다음은 문제의 치료제 및/또는 치료제로 간주될 수 있는 단계입니다.단말기가 열려 있고 MYSQL 서버 내에서 사용자 'root' 아래에 있어야 합니다.단말기의 커서는 공백의 mysql 명령줄에서 점멸합니다.CMDL 내에서 다음을 복사하여 붙여넣습니다.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'ChoosePassword';
mysql> FLUSH PRIVILEGES;
다음 부분은 분명합니다. 'ChoosePassword'를 작은 따옴표 안에 암호를 남겨두고 기억할 수 있는 암호로 변경하십시오.아무것도 변경하지 않고 [ENTER]를 누릅니다.
단계를 올바르게 따랐다면 이제 자체 암호를 가진 MySQL 'ROOT USER'가 생성됩니다.복사하여 Ubuntu CMDL에서 다음 내용을 붙여넣습니다.
~$: mysql -u root -p
- 새 암호를 입력하라는 메시지가 나타나면 암호를 입력하고 [ENTER](입력)
들어가셔야 합니다 이제 나가세요.
mysql>exit
- 'testsql.js' 파일로 돌아가서 다른 호스트 이름이 필요한 경우를 제외하고 자격 증명을 사용자 루트, 암호 암호, 유효한 데이터베이스 및 호스트를 localhost로 변경합니다.
let connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '********',
database : 'DB_App_00',
});
- 이제 노드를 사용하여 노드 테스트 파일을 실행합니다.
~$: node testsql.js
최종 생각:
connected 라고 표시되어 있지 않은 경우는, 잘못하고 있는 경우는, connected 라고 표시됩니다.작동하기까지는 약간의 노력이 필요했지만, 이 답변으로 나머지 반쪽짜리 답변을 읽을 시간을 절약할 수 있을 것입니다.
하실 수 .mysql2
mysql
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★mysql2
날 위해 일했어
는 설치 으로는 사용하실 수 .npm i mysql2
mysql_native_password를 사용하도록 기존 사용자를 변경하거나 새 사용자를 생성할 수 있습니다.
CREATE USER 'new_user'@'%' IDENTIFIED WITH mysql_native_password BY '***';
GRANT USAGE ON *.* TO 'new_user'@'%';
ALTER USER 'new_user'@'%' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
GRANT ALL PRIVILEGES ON `new_user`.* TO 'new_user'@'%';
FLUSH PRIVILEGES;
new_user를 새 사용자 이름으로 대체하고 암호를 설정합니다.
이제 mysql 패키지를 사용하여 노드에서 mysql에 액세스할 수 있습니다.
npm install mysql
이 패키지에 대해 풀 연결을 사용하도록 권장합니다.
MySQL 버전에 따라서는 접속 확립에 대한 인증이 약간 잘못되어 있는 경우가 있습니다.가 해야 할 되었다."insecureAuth" : true
에게CreateConnection(...)
credentials.
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '********',
database : 'vod_bill_database',
insecureAuth : true
});
에러는 해소되어 클라이언트는 정상적으로 접속되고 있습니다.
이 코드를 처음 실행 ->
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
두 번째
flush privileges;
5.6.40과 같은 이전 버전의 mysql을 시도합니다.새 버전 8.0은 기본적으로 더 안전한 sha2_password auth를 사용하는 경우 기본적으로 SHA256_password auth는 기본적으로 SHA256_password auth를 사용합니다.MYSQL instra 5.6.40
노란색 yow brothers!
// mysql.ts
const pool = mysql.createPool({
connectionLimit: 10,
host: "localhost",
user: "root",
password: "password",
database: "rest-resume-api",
});
도커 컴포지트 파일을 가지고 있습니다.
# docker-compose.yml
version: '3.3'
services:
db:
image: mysql
restart: always
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_DATABASE: 'rest-resume-api'
MYSQL_USER: 'root'
MYSQL_ROOT_PASSWORD: 'password'
ports:
- '3306:3306'
expose:
- '3306'
volumes:
- my-db:/var/lib/mysql2
volumes:
my-db:
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : '********',
database : 'vod_bill_database',
port : 3308
});
같은 에러가 발생하여 phpmyadmin의 포트를 3306에서 3308로 변경했기 때문에 여기도 포트 3308을 써야 했습니다.
이 에러를 해결하려면 , 다음의 코드를 사용합니다.
var connectionString = 'mysql://*root:*password@*localhost/*database?charset=utf8_general_ci&timezone=-0700';
var connection= mysql.createConnection(connectionString);
단, 설정에 따라 connectionString의 * 마크를 변경했는지 확인합니다.
MySQL에서 새 사용자를 생성하기만 하면 됩니다.
CREATE USER 'foo'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bar';
언급URL : https://stackoverflow.com/questions/44946270/er-not-supported-auth-mode-mysql-server
'itsource' 카테고리의 다른 글
segfault 커널 로그 메시지를 읽는 방법 (1) | 2022.10.15 |
---|---|
JavaScript에서 날짜 차이를 계산하는 방법은 무엇입니까? (0) | 2022.10.15 |
VueJ에서 속성별 개체 정렬 목록s (0) | 2022.10.05 |
org.w3c.dom 출력 방법요소에서 문자열 형식(Java)을 선택하십시오. (1) | 2022.10.05 |
이름을 문자열로 지정한 모듈을 Import하려면 어떻게 해야 합니까? (0) | 2022.10.05 |