본문 바로가기
푸닥거리

SQLSTATE[HY000] [2002] Permission denied

by ┌(  ̄∇ ̄)┘™ 2022. 4. 15.
728x90

CentOS/RHEL 서버에서 PHP(Laravel 등) 애플리케이션이 데이터베이스에 접속하려 할 때 이런 오류를 만나는 경우가 있습니다.

SQLSTATE[HY000] [2002] Permission denied

헷갈리는 점은 CLI에서는 잘 된다는 것입니다. php artisan migrate나 mysql 명령은 정상 동작하는데, 웹(Apache/PHP-FPM)을 통해서만 연결이 거부됩니다.

원인 — SELinux

DB 자격증명이 맞는데도 웹에서만 막힌다면, 범인은 대개 SELinux입니다. SELinux는 보안 정책상 웹서버(httpd) 프로세스가 네트워크로 DB에 접속하는 것을 기본적으로 차단합니다. CLI는 이 정책의 영향을 받지 않기 때문에 잘 되는 것이죠.

해결 — httpd DB 접속 허용

SELinux 불리언(boolean) 값을 켜서 웹서버의 DB 네트워크 접속을 허용합니다.

sudo setsebool -P httpd_can_network_connect_db 1

-P 옵션은 재부팅 후에도 설정이 유지되도록 영구 적용합니다. 별도의 httpd 재시작 없이 바로 반영됩니다.

참고

  • 진단 팁 — SELinux가 원인인지 확인하려면 sudo setenforce 0(임시 비활성화) 후 재시도해 보세요. 그때 되면 SELinux 문제가 맞습니다. (테스트 후 setenforce 1로 반드시 복원)
  • 외부 원격 DB가 아니라 로컬 DB에 연결할 때는 httpd_can_network_connect_db 대신 소켓 접속을 쓰거나 httpd_can_network_connect 1이 필요할 수 있습니다.
  • SELinux를 끄지 마세요setenforce 0이나 disabled로 두면 문제는 사라지지만 보안이 크게 약해집니다. 위처럼 필요한 불리언만 켜는 것이 정석입니다.
  • 로그는 /var/log/audit/audit.log에서 denied 항목으로 확인할 수 있습니다.
 

SQLSTATE[HY000] [2002] Permission denied Laravel PDO Driver (credentials working via artisan migrate)

I'm having a lot of trouble with the PDO driver on this new installation This is the error I get when trying to do any db operation triggered by laravel. ext Illuminate\Database\QueryException:

stackoverflow.com

728x90

댓글