mariadb ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Database

mariadb ERROR 1698 (28000): Access denied for user 'root'@'localhost'

https://stackoverflow.com/questions/39281594/error-1698-28000-access-denied-for-user-rootlocalhost

 

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

I'm setting up a new server and keep running into this problem. When I try to login to the MySQL database with the root user, I get the error: ERROR 1698 (28000): Access denied for user 'root'@'

stackoverflow.com

mariadb를 EC2 ubuntu 18.04에 설치하고, root에 아무런 패스워드도 할당하지 않았는데 갑자기 패스워드를 입력하라는 창이 나타났다.

mariadb의 'botobo'라는 우리 서비스 데이터베이스에 권한이 있는 admin이라는 유저가 있었는데, 이 유저로는 user 설정 파일들을 확인할 수 없었다.

하지만 root 패스워드는 모르는 상태이기 때문에 접속이 불가했고••• 그래서 찾아보다가 다음과 같은 방식으로 들어가면 root로 접속할 수 있다는 것을 알게 되었다.

 

// 기존 root 접속 방식
mariadb -uroot -p

// 변경된 root 접속 방식
sudo mariadb -u root

즉, sudo mariadb -u root 방식으로 진입하면 root  계정으로 문제없이 진입할 수 있다.

아래 글은 root에 설정된 unix_socket plugin과 관련된 글이니, 굳이 확인하지 않아도 된다.

 


아무쪼록 변경된 root 접속 방식으로 접속하니 접속이 되었고, root에서 할 수 있는 모든 작업들이 가능해지게 되었다. 

갑자기 root 계정에 패스워드가 생긴 이유가 왠지 unix_socket이라는 플러그인 때문인 것 같았다.

 

https://mariadb.com/kb/en/authentication-plugin-unix-socket/

unix_socket 인증

unix_socket 인증을 간단히 설명하자면 유닉스 계열 운영체제의 사용자 계정과 MariaDB의 사용자 계정을 일치시키는 인증 방식을 말한다. 즉, 유닉스 계열의 운영체제의 root 계정은 mariaDB의 root 계정을 소유하여 관리할 수 있도록 한 것이다. 이 인증 플러그인을 사용하면 유닉스 계열 운영 체제의 루트 사용자가 소유 및 실행한 프로세스에서 DB 콘솔에 로그인하는 경우 소켓 시스템 변수에 정의된 Unix 소켓 파일을 통해 암호 입력 없이 로그인할 수 있다.

 

즉, unix_socket 인증은 초기에는 유효하지 않은 암호(invalid)가 설정되어 있으므로 이러한 방식으로 인증하려면 MariaDB 콘솔에 로그인하여 SET PASSWORD로 암호를 설정해주어야하는 mysql_native_password 방식과는 달리 암호를 강제화하지 않는 다는 것이었다. 그럼 도대체 왜? mariadb -uroot -p 방식으로는 로그인되지 않는 것일까?

 

mariadb에서 use mysql을 진행한 뒤 패스워드를 확인해보았지만 루트 계정에는 패스워드가 걸려있지 않았다.

그냥 내 추측이건데, root로 로그인한다는 말 자체가 이 인스턴스의 루트 계정만이 접속할 수 있도록 하기 위해서 sudo라는 명령어를 붙여야 패스워드 없이 접속이 가능한 것 같다. 즉, sudo mariadb -uroot 도 가능하고, sudo mariadb -uroot -p도 가능한 것!

 

찝찝하지만.. 끗!