လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP function တွင် "Host ကိုဆက်သွယ်ခွင့်မပြုသည့်" အမှားအယွင်းကိုမည်သို့ဖြေရှင်းရမည်နည်း။

PHP function တွင် "Host ကိုဆက်သွယ်ခွင့်မပြုသည့်" အမှားအယွင်းကိုမည်သို့ဖြေရှင်းရမည်နည်း။

M66 2025-08-05

ဒေတာဘေ့စ်နှင့်အထူးသဖြင့် MySQLI_Connect ( သို့မဟုတ် PDO ကိုအသုံးပြုခြင်းသည်ဒေတာဘေ့စ်များနှင့်ချိတ်ဆက်သောအခါ PHP ကိုအသုံးပြုသည့်အခါဘုံအမှားများအနက်မှတစ်ခုဖြစ်သည်။

 Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server

ဤအမှားမက်ဆေ့ခ်ျဆိုသည်မှာဒေတာဘေ့စ်ဆာဗာသည်လက်ရှိ client host ထံမှဆက်သွယ်မှုတောင်းဆိုမှုကိုငြင်းပယ်သည်ဟုအဓိကအားဖြင့် Database server တွင်ခွင့်ပြုချက်ပြင်ဆင်မှုကိုဆက်သွယ်ခွင့်မပြုသည့်ကြောင့်ဖြစ်သည်။

ဤဆောင်းပါးသည်ဤပြ problem နာကိုဖြေရှင်းရန်နှင့်မည်သို့ဖြေရှင်းရမည်ကိုအသေးစိတ်ရှင်းပြပါလိမ့်မည်။


1 ။ အမှား၏အကြောင်းရင်းကိုနားလည်ပါ

MySQL ဆာဗာသည်အသုံးပြုသူများအားဆက်သွယ်မှုကိုခွင့်ပြုသည့်အခါအသုံးပြုသူအမည်နှင့်စကားဝှက်ကိုအတည်ပြုရုံသာမကဆက်သွယ်မှုမှလာသည့်အိမ်ရှင်လိပ်စာကိုလည်းစစ်ဆေးသည်။ အသုံးပြုသူအမည်နှင့်စကားဝှက်သည်မှန်ကန်မှုရှိလျှင်ပင် connection host သည်ခွင့်မပြုပါက၎င်းကိုငြင်းဆိုလိမ့်မည်။

ပုံမှန်အားဖြင့် MySQL သည် localhost (ဇာတိ) ဆက်သွယ်မှုများကိုသာခွင့်ပြုသည်။


2 ။ ဆက်သွယ်မှုမှအသုံးပြုသော hostname သို့မဟုတ် IP ကိုစစ်ဆေးပါ

ချိတ်ဆက်သောအခါမည်သည့် hostname သို့မဟုတ် IP ကိုဖြတ်သန်းသွားသနည်း။ များသောအားဖြင့် PHP code တွင်ရေးထားလေ့ရှိသည် -

 $mysqli = new mysqli('db.m66.net', 'user', 'password', 'database');

ဤနေရာတွင် hostname သည်ဒေတာဘေ့စ်ဆာဗာအတွက်မှန်ကန်သော IP သို့မဟုတ် domain name ဖြစ်သည်ကိုသေချာအောင်လုပ်ပါ။


3 ။ အိမ်ရှင်နှင့်ဆက်သွယ်မှုကိုခွင့်ပြုပါ

"အိမ်ရှင်အားဆက်သွယ်ခွင့်မပြုပါ" ပြ issue နာကိုဖြေရှင်းရန် MySQL server ပေါ်တွင်သတ်မှတ်ထားသော client host ကိုခွင့်ပြုရန်လိုအပ်သည်။

သင်၏ DataBase Username သည် DBUSER ကို ယူဆပြီး Remote Host IP မှဆက်သွယ်မှုများကို 123.123.1233.123 မှဆက်သွယ်မှုများကိုခွင့်ပြုရန်လိုအပ်သည်။

 GRANT ALL PRIVILEGES ON database.* TO 'dbuser'@'123.123.123.123' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

အိမ်ရှင်ဆက်သွယ်မှုအားလုံးကိုခွင့်ပြုလိုပါက (ထုတ်လုပ်မှုပတ် 0 န်းကျင်အတွက်အကြံမခံနိုင်ပါ) သင် % wildcard ဇာတ်ကောင်ကိုသုံးနိုင်သည်။

 GRANT ALL PRIVILEGES ON database.* TO 'dbuser'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

4 ။ ဝေးလံသောဆက်သွယ်မှုများကိုခွင့်ပြုရန် MySQL configuration ကိုပြုပြင်ရန်

MySQL သည် 127.0.0.1 ကို default ဖြင့်ခညျြနှောငျပြီးလျှင်ဇာတိလက်လှမ်းမီမှုကိုသာကန့်သတ်ထားသည်။

MySQL configuration file (များသောအားဖြင့် /etc/mysql/my.cnf ormysql/mysql/mysql/ mysql.dysql.dsql.d /ysqlql.d/ysqlql.d/ysqlql.cfld/mysqlql.d/Sqld/mysqlqlql.d/Sqlql

 bind-address = 127.0.0.1

ပြောင်းပါ

 bind-address = 0.0.0.0

ထို့နောက် MySQL ဝန်ဆောင်မှုကိုပြန်လည်စတင်ပါ။

 sudo service mysql restart

5 ။ firewall configuration ကို

server firewall သည် MySQL default port 3306 ကိုပြင်ပသို့ဝင်ရောက်ခွင့်ပြုရန်သေချာပါစေ။

ဥပမာ UFW ကို သုံးပါ။

 sudo ufw allow 3306/tcp

6 ။ PHP နမူနာကုဒ်

ဒေတာဘေ့စ်ဆာဗာလိပ်စာကို DB.M66.net ဟုယူဆခြင်းသည် DB.M66.net ဖြစ်သည်။ Connection Code ဥပမာ -

 <?php
$host = 'db.m66.net';
$user = 'dbuser';
$password = 'password';
$dbname = 'database';

$mysqli = new mysqli($host, $user, $password, $dbname);

if ($mysqli->connect_error) {
    die('ဆက်သွယ်မှုမအောင်မြင်ပါ: (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}

echo 'အောင်မြင်စွာဆက်သွယ်မှု!';

$mysqli->close();
?>

7 ။ အပိုဆောင်းပြ esh နာဖြေရှင်းခြင်းအကြံပြုချက်များ

  • အသုံးပြုသူအမည်နှင့်စကားဝှက်သည်မှန်ကန်ကြောင်းအတည်ပြုပါ။

  • PHP နှင့် MySQL ဆာဗာကွန်ယက်များသည်အပြန်အလှန်ယိုယွင်းနေပြီးသင်စမ်းသပ်ရန် Ping သို့မဟုတ် Telnet DB.m66.net 3306 ကို သုံးနိုင်သည်။

  • အသုံးပြုသူသည်သတ်မှတ်ထားသောဒေတာဘေ့စ်ကိုဝင်ရောက်ရန်ခွင့်ပြုချက်ရှိကြောင်းသေချာစေရန်ဒေတာဘေ့စ်အသုံးပြုသူခွင့်ပြုချက်များကိုစစ်ဆေးပါ။

  • အသေးစိတ်အတွက် MySQL အမှားမှတ်တမ်းကိုစစ်ဆေးပါ။

မကြာသေးမီ ဆောင်းပါးများ