Skip to content
VDS · 데이터베이스

phpMyAdmin과 Adminer: 데이터베이스 패널

VDS에 데이터베이스용 웹 패널을 설치하고, 진입 통로가 되지 않도록 잠그는 방법을 알아봐요. 비밀번호 접근, 주소 제한, 대안을 다뤄요.

업데이트 2026년 8월 23일

웹 패널은 일회성 수정이나 테이블 확인에는 편리해요. 하지만 서버가 침해되는 가장 흔한 원인이기도 해요. /phpmyadmin URL은 자동으로 무차별 대입 공격을 당하고, 로그인 폼은 데이터에 대한 직접적인 접근을 허용하거든요.

Adminer: 단일 파일

Adminer는 단일 PHP 파일이며 MySQL, PostgreSQL, SQLite를 지원해요. 설치할 것이 없어요:

mkdir -p /var/www/tools
curl -L -o /var/www/tools/adminer.php \
  https://github.com/vrana/adminer/releases/latest/download/adminer.php
chown www-data:www-data /var/www/tools/adminer.php

작동하는 PHP-FPM이 필요해요. 파일 이름은 알아보기 어려운 것으로 바꾸는 게 좋아요. 보호 수단은 아니지만 대량 스캔을 피할 수 있어요.

phpMyAdmin

apt install -y phpmyadmin

이 패키지는 Apache에 자동으로 연결돼요. Nginx의 경우 경로를 직접 지정해요:

location /db-panel {
    alias /usr/share/phpmyadmin;
    index index.php;
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
    }
}

필수 보호 조치

다음 세 가지 없이는 패널을 절대 설치하지 마세요.

내 주소에서만 접근:

location /db-panel {
    allow 203.0.113.10;
    deny all;
}

웹 서버 수준의 추가 비밀번호:

apt install -y apache2-utils
htpasswd -c /etc/nginx/.htpasswd admin
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;

그리고 세 번째는 HTTPS 전용이에요: Let's Encrypt 인증서. 이게 없으면 데이터베이스 비밀번호가 평문으로 전송돼요.

최선의 선택: 패널을 외부에 노출하지 않기

주소가 동적이라면 패널을 아예 노출하지 마세요. SSH 터널을 설정하고 데스크톱 클라이언트(DBeaver, TablePlus, HeidiSQL)로 작업하세요:

ssh -L 3307:127.0.0.1:3306 root@YOUR_ADDRESS -N

자세한 내용은 원격 접근을 참고하세요. 이렇게 하면 SSH 외에는 외부에 아무것도 노출되지 않고, 패널이 아예 필요 없어져요.

흔한 실수

증상원인
브라우저가 adminer.php를 다운로드함이 경로에 PHP가 연결되지 않음
#1045 Access denied데이터베이스 사용자가 다른 호스트에 바인딩됨
대용량 덤프 가져오기가 중단됨upload_max_filesize와 max_execution_time이 너무 작음. 콘솔에서 가져오는 게 나음
로그에 /phpmyadmin 요청이 수천 건일상적인 스캔 — 패널을 닫아야 함
패널은 작동하는데 사이트는 안 됨패널의 과도한 요청으로 공유 PHP-FPM 풀이 고갈됨

대용량 데이터베이스를 웹 패널로 덤프하면 시간 초과가 발생해요. 실제 백업은 콘솔에서 일정에 따라 수행해요 — 데이터베이스 백업.