MySQL Ошибка 1045 Отказано в доступе

Доброе утро,

Я написал блок кода ниже на своем локальном ПК с Windows 7 и попытался запустить его. К сожалению, я получил:

Connect Error (1045) Access denied for user 'dbuser'@'myhost(using password: YES)

Я предоставил dbuser Insert, Select, Update и Execute, используя localhost и% для этой схемы базы данных. Я также могу mysql -u dbuser -p из командной строки на сервере.

Вот блок кода:

<?php
/* Set Variables */
$host="serveripaddress";
$db="dbname"; 
$username="dbuser";
$pass="pass";

/* Attempt to connect */
$mysqli=new mysqli($host,$username,$pass,$db);
if (mysqli_connect_error()){
die('Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
echo 'Success... ' . $mysqli->host_info . "\n";

$mysqli->close();

}
?>

Я испытываю затруднения с пониманием, является ли приведенный выше блок кода причиной моей ошибки или что-то требуется сделать на сервере. Кто-нибудь может предложить некоторые области исследования?

Спасибо Сид

2 ответа

Решение

Убедитесь, что если вы используете имя хоста для GRANT в MySQL этот MySQL может правильно разрешить это имя хоста по IP-адресу, с которого вы подключаетесь.

Например, если вы делаете

GRANT blah ON *.* to user@somehost

Вы должны помнить, что MySQL не увидит "somehost", он увидит IP-адрес. Чтобы получить имя хоста, придется выполнить обратный поиск, и если IP-адрес либо не имеет обратного сопоставления, либо сопоставляется с чем-то совершенно другим, MySQL не даст доступа.

Если вы не можете гарантировать стабильность обратного сопоставления, лучше всего использовать IP-адреса для учетных записей удаленного доступа в MySQL.

<?php
/* Set Variables */
$host="127.0.0.1:3306";
$db="dbname"; 
$username="dbuser";
$pass="pass";

/* Attempt to connect */
$mysqli=new mysqli($host,$username,$pass,$db);
if (mysqli_connect_error()){
    die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());    
}
else
{
echo 'Success... ' . $mysqli->host_info . "\n";
$mysqli->close();
}

?>

Прежде всего, добавьте эти скобки для вашего оператора if/else. Во-вторых, попробуйте жестко закодировать IP. Я просто запустил это с IP-адресом, установленным на переменную (не работал), а затем жестко закодировал его, все работало нормально.

Другие вопросы по тегам