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
'푸닥거리' 카테고리의 다른 글
| ERROR 2059 (HY000) (0) | 2022.04.16 |
|---|---|
| 웹사이트에서 사용된 기술을 식별하는 크롬 확장팩 (0) | 2022.04.15 |
| svnversion (0) | 2022.04.15 |
| [일학습병행] 한국기술교육대학교 고숙련마이스터 과정 22년도 (0) | 2022.04.13 |
| 22년도 직업능력개발훈련교사 자격교육 연간일정 (0) | 2022.04.12 |
댓글