“시작하며”
MariaDB 10.4 버전 이상부터는 로그인 인증방식이 unix_socket 을 사용하도록 변경되었으며, 이 포스트는 변경된 인증방식에 대해 설명합니다.
unix_socket 인증 방식이란? |
[개 요]
종 류 : 엔지니어링 / 프로그램 운영 기술
난이도 :
내용요약 : MariaDB 10.4 이상 버전에서 root 로그인 인증하는 방법 설명
테스트 버전 : MariaDB 10.7 버전과 10.1버전
테스트 환경 : Cent OS
관련직무 : 시스템&클라우드 엔지니어, 프로그래머
[기초이론&용어]
MariaDB : MySQL코드를 기반으로 개발된 FOSS RDBMS로 데이터베이스를 구축&관리할 때 사용하는 데이터베이스 관리 시스템이다. 시스템 운영을 위해 서버에 설치하여 이용한다.
- MySQL : 관계형 데이터베이스 관리 시스템
- FOSS(Free and Open-Source Software) : 오픈소스(무료) 소프트웨어
- RDBMS(Relational DataBase Management System): 관계형 데이터베이스
버전에 따른 비교 (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 로 이용해도 무관할 것으로 보입니다. |