티스토리 뷰

IT 이야기/Node.js

express.js와 mariaDB 연결 문제

하늘과 나b 2025. 1. 10. 09:42

express.js에서 mariadb를 연결했는데 아래와 같이 오류가 발생했다.

 

비밀번호도 맞고 HOST 설정도 잘 되어 있어서 다른 문제라고 생각해서 찾아 보았다.

 

2025-01-09 23:59:46 33 [Warning] Access denied for user 'root'@'localhost'

 

 

SELECT user, host, authentication_string, plugin FROM mysql.user WHERE user = 'root';

 

를 했는데

 

SELECT user, host, authentication_string, plugin FROM mysql.user WHERE user = 'root';

 

+------+-----------+-------------------------------------------+-----------------------+

| User | Host | authentication_string | plugin |

+------+-----------+-------------------------------------------+-----------------------+

| root | localhost | invalid | mysql_native_password |

| root | 127.0.0.1 | hash값 | mysql_native_password |

+------+-----------+-------------------------------------------+-----------------------+

 

 

위에서 invalid 값이 문제였다.

 

그래서 아래와 같이 해결했다.

 

authentication_string에 invalid로 표시된 것은 MariaDB에서 root 사용자의 비밀번호가 유효하지 않거나 제대로 설정되지 않았음을 나타냅니다. 이로 인해 "Access denied" 오류가 발생하는 것입니다. 이를 해결하려면 authentication_string을 다시 설정해야 합니다.

해결 방법: 비밀번호 재설정

  1. MariaDB에 관리자 계정으로 로그인 아래 명령어로 MariaDB에 로그인합니다:비밀번호를 입력하거나, sudo를 사용해 직접 로그인할 수 있습니다:

  2. bash
    sudo mysql

  3. bash
    mysql -u root -p

  4. 비밀번호 재설정 아래 명령어를 사용하여 root 사용자의 비밀번호를 다시 설정합니다:여기서 new_password를 원하는 비밀번호로 변경하세요.

  5. sql
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; ALTER USER 'root'@'127.0.0.1' IDENTIFIED BY 'new_password'; FLUSH PRIVILEGES;

  6. 비밀번호 인증 확인 다시 한 번 mysql.user 테이블을 확인하여 authentication_string이 비밀번호로 제대로 설정되었는지 확인합니다:결과가 다음과 같이 나와야 합니다:

  7. sql
    코드 복사
    +------+-----------+-------------------------------------------+-----------------------+
    | User | Host | authentication_string | plugin |
    +------+-----------+-------------------------------------------+-----------------------+
    | root | localhost | (비밀번호 hash) | mysql_native_password |
    | root | 127.0.0.1 | (비밀번호 hash) | mysql_native_password |
    +------+-----------+-------------------------------------------+-----------------------+

  8. sql
    SELECT user, host, authentication_string, plugin FROM mysql.user WHERE user = 'root';

  9. MariaDB 재시작 비밀번호 설정 후 MariaDB를 재시작합니다:
  10. bash
    sudo systemctl restart mariadb
  11. Express.js 연결 테스트 Express.js에서 설정한 비밀번호와 root 계정 비밀번호가 일치하는지 확인하고, 다시 연결을 시도합니다.

참고: 비밀번호 없이 인증을 원한다면

root 계정의 비밀번호를 사용하지 않으려면 플러그인을 auth_socket으로 변경할 수도 있습니다:

ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket; FLUSH PRIVILEGES;

이 경우 Express.js에서는 root 계정을 사용할 수 없고, 다른 사용자를 생성해야 합니다.


 

댓글