Ralat sambungan pangkalan data: Jenis ralat 2002 - Kebenaran ditolak
P粉757640504
2023-08-24 19:54:00
<p>Saya cuba menyambung ke pangkalan data menggunakan skrip berikut (cxn-test.php)</p>
<pre class="brush:php;toolbar:false;"><?php
$host = '155.30.136.20';//IP Maya
$pengguna = 'pengguna_abc';
$lulus = 'xxxxxxxxx';
$dbname = 'selamat datang';
$link = mysqli_connect($host, $user, $pass,$dbname);
jika (!$link) {
echo "Ralat: Tidak dapat menyambung ke MySQL."
echo "Nombor ralat nyahpepijat:" mysqli_connect_errno() .
echo "Mesej ralat nyahpepijat:" mysqli_connect_error() .
keluar;
}lain {
gema "kejayaan" .PHP_EOL;
}</pre>
<p>Apabila saya mencubanya pada terminal</p>
<blockquote>
<p>php cxn-test.php //Success</p>
</blockquote>
<p>Tetapi apabila saya mencubanya pada localhost, saya mendapat ralat berikut: </p>
<blockquote>
<p>curl -s http://localhost/cxn-test.php</p>
</blockquote>
<p><kod>Ralat: Tidak dapat menyambung ke MySQL.
Nombor ralat nyahpepijat: 2002
Mesej ralat nyahpepijat: Kebenaran ditolak</code></p>
<p>Ini adalah isu pelik, ia tidak berfungsi pada localhost tetapi berfungsi dengan baik pada baris arahan. </p>
Saya menghadapi masalah yang sama selepas mendapat kotak CentOS 7 baharu yang menjalankan SELinux. Saya boleh menyambung ke pelayan pangkalan data MySQL jauh melalui baris arahan, tetapi Drupal (dan skrip PHP ujian) tidak dapat menyambung.
Masalah itu akhirnya disebabkan oleh dasar keselamatan SELinux.
Secara lalai, dasar httpd_can_network_connect_db dilumpuhkan (bermaksud pelayan web anda tidak boleh menghubungi pangkalan data jauh).
Semak dengan arahan berikut:
getsebool -a | grep httpd
Jika httpd_can_network_connect_db dimatikan, sila dayakannya dengan arahan berikut:
(Bendera -P membuat perubahan kekal, jadi tetapan kekal berkuat kuasa sepanjang but semula.)