데이터베이스 연결 오류: 오류 유형 2002 - 권한이 거부되었습니다.
P粉757640504
2023-08-24 19:54:00
<p>다음 스크립트(cxn-test.php)를 사용하여 데이터베이스에 연결하려고 합니다</p>
<pre class="brush:php;toolbar:false;"><?php
$host = '155.30.136.20';//가상IP
$user = 'abc_user';
$pass = 'xxxxxxxxx';
$dbname = '환영합니다';
$link = mysqli_connect($host, $user, $pass,$dbname);
if (!$link) {
echo "오류: MySQL에 연결할 수 없습니다." .PHP_EOL;
echo "디버그 오류 번호:" . mysqli_connect_errno() .
echo "디버그 오류 메시지:" . mysqli_connect_error() .
출구;
}또 다른 {
에코 "성공" .PHP_EOL;
}</pre>
<p>단말기에서 시도했을 때</p>
<인용문>
<p>php cxn-test.php //성공</p>
</인용문>
<p>하지만 localhost에서 시도하면 다음 오류가 발생합니다.</p>
<인용문>
<p>curl -s http://localhost/cxn-test.php</p>
</인용문>
<p><code>오류: MySQL에 연결할 수 없습니다.
디버그 오류 번호: 2002
디버그 오류 메시지: 권한이 거부되었습니다</code></p>
<p>이것은 이상한 문제입니다. localhost에서는 작동하지 않지만 명령줄에서는 잘 작동합니다. </p>
SELinux를 실행하는 새 CentOS 7 상자를 구입한 후에도 동일한 문제가 발생했습니다. 명령줄을 통해 원격 MySQL 데이터베이스 서버에 연결할 수 있지만 Drupal(및 테스트 PHP 스크립트)은 연결할 수 없습니다.
이 문제는 궁극적으로 SELinux 보안 정책으로 인해 발생했습니다.
기본적으로 httpd_can_network_connect_db 정책은 비활성화되어 있습니다. 즉, 웹 서버 가 원격 데이터베이스에 접속할 수 수 없다는 의미입니다.
다음 명령으로 확인하세요:
getsebool -a | grep httpd
httpd_can_network_connect_db가 꺼진 경우 다음 명령을 사용하여 활성화하세요.
으아아아(-P 플래그는 변경 사항을 영구적으로 적용하므로 재부팅 후에도 설정이 그대로 유지됩니다.)