MariaDB 외부 접속 허용 설정 완벽 가이드

MariaDB 외부 접속 허용 설정 완벽 가이드

🎯 Summary

MariaDB에 외부에서 접속하려면 bind-address 설정 변경사용자 권한 설정 두 단계가 필요합니다.

즉시 해결 방법

1. bind-address 주석 처리

# my.cnf 파일 편집
sudo nano /etc/mysql/my.cnf
# 또는
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
# 이 줄을 주석 처리
#bind-address = 127.0.0.1

2. 외부 접속 권한 부여

-- MariaDB 접속 후 실행
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

3. 서비스 재시작

sudo systemctl restart mariadb

📚 상세 설명

배경 및 필요성

MariaDB는 기본적으로 보안상의 이유로 로컬 접속(127.0.0.1)만 허용합니다. 원격 서버나 다른 애플리케이션에서 데이터베이스에 접속하려면 외부 접속을 허용하도록 설정을 변경해야 합니다.

단계별 설정 과정

1. 설정 파일 위치 확인

Ubuntu/Debian 계열

# 주 설정 파일 위치
/etc/mysql/my.cnf
/etc/mysql/mariadb.conf.d/50-server.cnf

CentOS/RHEL 계열

# 주 설정 파일 위치
/etc/my.cnf
/etc/my.cnf.d/server.cnf

2. bind-address 설정 변경

# 설정 파일 백업
sudo cp /etc/mysql/my.cnf /etc/mysql/my.cnf.backup

# 설정 파일 편집
sudo nano /etc/mysql/my.cnf

변경 전

[mysqld]
bind-address = 127.0.0.1

변경 후

[mysqld]
#bind-address = 127.0.0.1
# 또는 특정 IP만 허용하려면
#bind-address = 0.0.0.0

3. 사용자 권한 설정

-- MariaDB 접속
mysql -u root -p

-- 모든 IP에서 접속 허용
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'%';
FLUSH PRIVILEGES;

-- 특정 IP에서만 접속 허용
CREATE USER 'myuser'@'192.168.1.100' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'192.168.1.100';
FLUSH PRIVILEGES;

4. 방화벽 설정

Ubuntu (UFW)

sudo ufw allow 3306/tcp

CentOS (firewalld)

sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

실제 활용 사례

웹 애플리케이션 연결

// Node.js 예시
const mysql = require('mysql2');

const connection = mysql.createConnection({
  host: 'your-server-ip',
  user: 'myuser',
  password: 'mypassword',
  database: 'mydatabase'
});

connection.connect((err) => {
  if (err) {
    console.error('연결 실패:', err);
    return;
  }
  console.log('MariaDB 연결 성공!');
});

외부 도구 연결 설정

Host: your-server-ip
Port: 3306
Username: myuser
Password: mypassword
Database: mydatabase

보안 고려사항

1. 특정 IP만 허용

-- 특정 IP 대역만 허용
GRANT ALL PRIVILEGES ON *.* TO 'user'@'192.168.1.%' IDENTIFIED BY 'password';

2. 강력한 패스워드 설정

-- 복잡한 패스워드 사용
CREATE USER 'user'@'%' IDENTIFIED BY 'StrongP@ssw0rd!2023';

3. 최소 권한 원칙

-- 필요한 권한만 부여
GRANT SELECT, INSERT, UPDATE ON mydatabase.* TO 'user'@'%';

문제 해결

연결 실패시 확인사항

1. 포트 확인

netstat -tulpn | grep 3306

2. 서비스 상태 확인

sudo systemctl status mariadb

3. 로그 확인

sudo tail -f /var/log/mysql/error.log

일반적인 오류 해결

“Access denied” 오류

-- 사용자 권한 재확인
SELECT user, host FROM mysql.user WHERE user = 'myuser';
SHOW GRANTS FOR 'myuser'@'%';

“Can’t connect to server” 오류

# 방화벽 상태 확인
sudo ufw status
# 또는
sudo firewall-cmd --list-all

결론

MariaDB 외부 접속 설정은 bind-address 주석 처리와 사용자 권한 설정만으로 간단히 해결할 수 있습니다. 하지만 보안을 위해 특정 IP만 허용하고 최소 권한 원칙을 적용하는 것이 중요합니다.

다음 단계로는 SSL 연결 설정과 고급 보안 옵션 적용을 고려해보세요.