티스토리 뷰

IT 이야기

MariaDB의 root 사용자 권한 확인

하늘과 나b 2025. 1. 9. 16:05
# mysql -u root -p -h 127.0.0.1 Enter password: ERROR 1698 (28000): Access denied for user 'root'@'localhost' root@

mysql -u root -p -h 127.0.0.1 명령어로 접속 시 ERROR 1698 (28000): Access denied for user 'root'@'localhost' 에러가 발생한다면, MariaDB의 사용자 설정 또는 인증 플러그인에 문제가 있을 가능성이 높습니다.

문제 원인 및 해결 방법

1. MariaDB의 root 사용자 권한 확인

root 사용자가 127.0.0.1에서 접속할 수 있는 권한이 없을 수 있습니다. 소켓 인증을 사용하는 경우도 문제를 유발할 수 있습니다.

  1. 현재 MariaDB에 소켓으로 로그인: localhost에서 MariaDB는 일반적으로 소켓 인증을 통해 접근할 수 있습니다.
  2. bash
    코드 복사
    sudo mysql
  3. root 사용자의 권한 및 인증 플러그인 확인: MariaDB에 로그인한 후 다음 명령어를 실행하여 root 사용자의 설정을 확인하세요.결과 예시:확인할 점:
    • host가 localhost로만 설정되어 있다면 127.0.0.1에서의 TCP 접속이 허용되지 않을 수 있습니다.
    • plugin이 mysql_native_password로 되어 있지 않다면 인증 문제가 발생할 수 있습니다.
  4. sql
    코드 복사
    +------+-----------+-----------------------+ | User | Host | Plugin | +------+-----------+-----------------------+ | root | localhost | mysql_native_password | +------+-----------+-----------------------+
  5. sql
    코드 복사
    SELECT user, host, plugin FROM mysql.user WHERE user = 'root';

2. root 사용자 권한 수정

root 사용자가 127.0.0.1에서도 인증 가능하도록 설정을 변경합니다.

  1. root 사용자를 127.0.0.1에서도 인증 가능하게 수정:
  2. sql
    코드 복사
    CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION; FLUSH PRIVILEGES;
  3. root 사용자의 인증 플러그인을 mysql_native_password로 변경:
  4. sql
    코드 복사
    ALTER USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'your_password'; FLUSH PRIVILEGES;
  5. 다시 접속 시도:
  6. bash
    코드 복사
    mysql -u root -p -h 127.0.0.1

3. MariaDB 설정 확인

bind-address가 올바르게 설정되어 있는지 다시 확인하세요.

  1. 설정 파일 열기:
  2. bash
    코드 복사
    sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
  3. bind-address 확인:
  4. text
    코드 복사
    bind-address = 127.0.0.1
  5. 변경 사항 저장 후 MariaDB 재시작:
  6. bash
    코드 복사
    sudo systemctl restart mariadb

4. 네트워크 포트 확인

MariaDB가 TCP 포트 3306에서 수신 중인지 확인하세요.

bash
코드 복사
sudo netstat -tlnp | grep 3306

출력 예시:

bash
코드 복사
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1234/mysqld
  • 127.0.0.1:3306가 표시되지 않는다면 MariaDB가 TCP/IP 연결을 허용하지 않습니다. 설정 파일에서 skip-networking 옵션을 제거하거나 주석 처리하세요.
bash
코드 복사
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
text
코드 복사
# skip-networking

MariaDB 재시작:

bash
코드 복사
sudo systemctl restart mariadb

5. MariaDB 로그 확인

MariaDB의 에러 로그에서 추가적인 힌트를 확인합니다.

bash
코드 복사
sudo tail -n 100 /var/log/mysql/error.log

6. 문제가 계속될 경우

root 사용자가 아닌 새 사용자를 생성하여 애플리케이션에서 연결 테스트를 수행합니다.

sql
코드 복사
CREATE USER 'app_user'@'127.0.0.1' IDENTIFIED BY 'secure_password'; GRANT ALL PRIVILEGES ON *.* TO 'app_user'@'127.0.0.1'; FLUSH PRIVILEGES;

.env 파일 업데이트:

env
코드 복사
DB_USER=app_user DB_PASSWORD=secure_password

이후 애플리케이션을 다시 실행합니다.


위 단계를 차례로 시도하면 문제를 해결할 수 있을 가능성이 높습니다. 추가적으로 발생하는 오류 메시지를 공유해 주시면 더 도와드릴 수 있습니다!

댓글