mysql, mysqldump처럼 MySQL 클라이언트 라이브러리를 사용하는 프로그램은 다양한 전송 프로토콜을 통해 MySQL 서버에 접속할 수 있습니다. 대표적인 프로토콜로는 TCP/IP, Unix 소켓 파일, 명명된 파이프(Named Pipe), 공유 메모리(Shared Memory) 등이 있습니다.
이 글에서는 MySQL에서 사용되는 각 연결 전송 프로토콜의 특징과 보안 설정 방법까지 자세히 살펴보겠습니다.
--protocol 옵션에 허용되는 값
아래 표는 --protocol 옵션에 허용되는 값과 각 값이 적용 가능한 플랫폼을 보여줍니다. 참고로 이 값들은 대소문자를 구분하지 않습니다.
| --protocol 값 | 사용되는 전송 프로토콜 | 적용 가능한 플랫폼 |
|---|---|---|
| TCP | TCP/IP | 모든 플랫폼 |
| SOCKET | Unix 소켓 파일 | Unix 및 Unix 계열 시스템 |
| PIPE | 명명된 파이프 | Windows |
| MEMORY | 공유 메모리 | Windows |
TCP/IP
TCP/IP 전송 방식은 로컬 서버뿐만 아니라 원격 MySQL 서버에도 접속할 수 있는 유일한 프로토콜입니다. 네트워크를 통한 연결이 필요한 환경이라면 반드시 TCP/IP를 사용해야 합니다.
명명된 파이프(Named Pipe)
명명된 파이프 전송 방식은 이론상 원격 연결도 허용하지만, 현재 MySQL에서는 아직 해당 기능이 구현되지 않았습니다. 따라서 로컬 MySQL 서버에 대한 연결만 지원합니다. TLS/SSL 암호화가 필수는 아닙니다.
소켓 파일(Socket File)
소켓 파일 전송 방식 역시 로컬 MySQL 서버에 대한 연결만 지원합니다. 다른 프로토콜과 달리 TLS/SSL 암호화를 적용할 수 있습니다.
공유 메모리(Shared Memory)
공유 메모리 전송 방식 또한 로컬 MySQL 서버에 대한 연결만 지원하며, TLS/SSL 암호화가 필수는 아닙니다.
연결을 안전하게 만드는 방법
연결은 기본적으로 보안성이 확보된 전송 프로토콜을 사용하면 자동으로 안전합니다. 그렇지 않은 경우, TLS/SSL 암호화를 지원하는 프로토콜이라면 암호화를 통해 보안 연결을 만들 수 있습니다. 프로토콜별 특징은 다음과 같습니다.
TCP/IP: 기본적으로 보안이 보장되지 않지만, 암호화를 적용하면 안전한 연결로 만들 수 있습니다.
소켓 파일: 기본적으로 안전합니다. 암호화도 가능하지만, 보안이 더 강화되는 것은 아니며 CPU 부하만 증가시킵니다.
명명된 파이프: 기본적으로 보안이 보장되지 않으며, 암호화 없이도 안전하게 사용할 수 있습니다. 단,
named_pipe_full_access_group시스템 변수를 활용하면 명명된 파이프 연결 사용 권한을 가질 MySQL 사용자를 세밀하게 제어할 수 있습니다.공유 메모리: 기본적으로 안전합니다.
정리
원격 연결이 필요하다면 TCP/IP를 선택하고 암호화를 적용하는 것이 좋습니다. 로컬 환경에서는 운영체제에 따라 Unix 소켓(기본적으로 안전), 명명된 파이프 또는 공유 메모리를 활용하면 불필요한 암호화 오버헤드 없이 효율적이고 안전한 연결을 유지할 수 있습니다.