메뉴 닫기

MariaDB root 로그인 인증방식 변경

“시작하며”


MariaDB 10.4 버전 이상부터는 로그인 인증방식이 unix_socket 을 사용하도록 변경되었으며, 이 포스트는  변경된 인증방식에 대해 설명합니다.

unix_socket 인증 방식이란?
Unix 도메인 소켓 파일을 사용하여 로컬 호스트에서 실행되는 애플리케이션과 MariaDB 서버 간의 안전한 인증을 제공하는 방식. 다만 이 unix_socket 인증으로 로그인을 하는 경우에는 서버와 클라이언트가 같은 호스트(로컬)에서 실행되는 경우에 사용되며, MariaDB 서버는 Unix 도메인 소켓 파일에 대한 소유자 및 권한을 확인하여 로그인을 승인한다. 즉, 소켓 파일의 소유자와 클라이언트의 사용자 이름이 일치하고 권한이 적절하면 인증이 승인 처리 된다.


[개 요]

✅종    류 : 엔지니어링 / 프로그램 운영 기술
✅난이도 : ⭐ 
✅내용요약 : MariaDB 10.4 이상 버전에서 root 로그인 인증하는 방법 설명
✅테스트 버전 : MariaDB 10.7 버전과 10.1버전
✅테스트 환경 : Cent OS
✅관련직무 : 시스템&클라우드 엔지니어, 프로그래머


[기초이론&용어]

MariaDB :  MySQL코드를 기반으로 개발된 FOSS RDBMS로 데이터베이스를 구축&관리할 때 사용하는 데이터베이스 관리 시스템이다. 시스템 운영을 위해 서버에 설치하여 이용한다.


 

 

버전에 따른 비교 (MariaDB 10.7 버전 & 10.1버전 비교)


❗ 인증방식 차이  

10.4버전 이전에는 Root 패스워드를 설정이 된 상태 일 경우 로컬에서도 반드시 Root 패스워드를 입력해야만 접근이 가능합니다.

반면 10.7 버전에서는 패스워드를 입력하지 않아도 unix_socket 방식에 의해 로컬 호스트에서의 소유자 및 권한이 일치하여 Root로 접속할 수 있습니다. 이는 MariaDB 10.7 버전과 10.4이하 버전인 10.1버전에서 Root 접속 시 패스워드를 입력하지 않았을 때 출력 되는 내용(아래)으로 확인할 수 있습니다.

[패스워드 미 입력시 출력내용]

 

❗ 테이블 차이

10.7버전에서는 global_priv 라는 테이블이 생성됩니다. 이 테이블에는 모든 사용자 계정, 암호 , 권한이 저장되며, 10.4 버전부터는 기존버전과의 호환을 위해 mysql.user 테이블은 유지되지만, mysql.global_priv 를 참조하는 역할로만 수행합니다.

테이블 확인 명령어 – use my sql;   show tables;

[테이블 출력내용_(좌)MariaDB10.7 / (우)MariaDB10.1] 

 

global_priv 테이블 확인 명령어 – select*from mysql.global_priv; 

root계정의 중간 부분에  “plugin”:”unix_socket” 이 확인되며, 현재 unix_socket 인증방식을 사용하고 있다는 것을 확인할 수 있음.

[global_priv 테이블 출력 내용]

 

MariaDB 10.4 이상에서 root 로그인 인증 하기


MariaDB 10.7 버전과 10.4 이상에서 로컬에서도 계정과 암호를 입력하여 로그인하도록 변경할 수 있습니다. 이 경우  unix_socket 플러그인은 제거하고 mysql_natve_password 플러그인만 사용하며 명령어는 다음과 같습니다.

ALTER USER root@localhost IDENTIFIED VIA mysql_native_password USING PASSWORD(“비밀번호”);

[적용후 출력내용] 

위와 같이 변경한 경우 MySQL에 접속을 시도 시 패스워드를 입력해야만 하며, 아래와 같은 화면이 출력됩니다.

 

root 로그인 인증 원복하기


위의 방식으로 로그인 인증을 설정한 후에 다시 기존의 방식(unix_soket 이용)으로  변경하고 싶다면 아래 명령어를 실행합니다. 아래의 명령어 실행 후 재 로그인을 시도하면 패드워드 없이도 접근이 가능하다는 점을 확인 할 수 있습니다.

 ALTER USER root@localhost ROOT VIA unix_socket;

 

💡 유의사항

unix_socket 인증방식이 적용된 상태에서 원격으로 root 접속하기 위해서는 IP가 허용되어야 합니다. 하지만 보안상의 문제가 발생하는 것을 사전에 방지 하기 위해 로컬이 아닌 원격에서는 root 접속을 허용하지 않고   사용하는 것을 권합니다.

 

📢 기타의견

unix_socket 인증방식은 로컬에서만 적용이 되기 때문에 보안에 취약하다고 느낄 수 있습니다. 하지만 사용자 정보나 암호를 전송하지 않아도 되기 때문에  중간에 유출될 정보가 없어 오히려 보안에 도움이 된다고 합니다.

다만, 이러한 방식도 분명 취약한 부분이 있을 수 있지만 기존 방식이 편하신 분들은 인증방식을 mysql_native_password 로 이용해도 무관할 것으로 보입니다.

 

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x