«Доступ запрещен для пользователя» после перемещения базы данных MySQL на удаленный сервер

У меня есть некоторые проблемы с доступом к моей базе данных.

Сценарий работал раньше на моем localhost. Я импортировал его на другой сервер, а другой сервер дал мне сообщение об отказе в доступе.

Сообщение, которое задано: Access denied for user 'root'@'10.4.1.163' (using password: YES)

Используемый сценарий:

 <?php // Connect to database server mysql_connect("localhost", "root", "password") or die (mysql_error ()); // Select database mysql_select_db("database") or die(mysql_error()); // SQL query $strSQL = "SELECT * FROM users WHERE user_id='". $_SESSION['USER_ID'] ."'"; // Execute the query (the recordset $rs contains the result) $rs = mysql_query($strSQL); // Loop the recordset $rs // Each row will be made into an array ($row) using mysql_fetch_array while($row = mysql_fetch_array($rs)) { // Write the value of the column FirstName (which is now in the array $row) echo $row['Name'] . " "; } // Close the database connection mysql_close(); ?> 

Я также попытался изменить localhost на IP-адрес 10.4.1.163.

Что не так с моим скриптом. Я уверен, что пароль, который я использую, прав.

Кто-нибудь знает, как я могу это исправить?

Разрешения MySQL основаны на адресе, к которому они подключаются, а также к пользователю. Итак, root @ localhost и root@10.4.1.163 будут иметь два разных набора разрешений. Изменение localhost на 127.0.0.1, как указано в num8er, вероятно, будет работать, если ваш код и база данных находятся на одном сервере.

Если у вас есть доступ к терминалу, в котором находится ваш php, вы можете попробовать подключиться напрямую, исключая все, что связано с php, используя это:

 mysql -h 10.4.1.163 -u root -p[pass] database -e "SHOW TABLES" 

Обратите внимание, что между -p и паролем нет пробела. В случае успеха вы получите список таблиц в database .

Чтобы предоставить доступ другим пользователям или другому имени хоста / IP, вы захотите запустить что-то в соответствии с этим: (хотя вы действительно должны создать отдельного пользователя с более ограниченными разрешениями на основе ваших требований).

 GRANT ALL PRIVILEGES ON `database`.* TO 'root'@'10.4.1.163'; 

Проверьте документы на MySQL GRANT здесь – http://dev.mysql.com/doc/refman/5.7/en/grant.html

На стороне примечания – пожалуйста, пожалуйста, пожалуйста, не просто перекачивайте старые данные в запрос без использования mysql_real_escape_string ( http://php.net/manual/en/function.mysql-real-escape-string.php ) на нем перед рукой. Вы также можете посмотреть в PDO ( http://php.net/manual/en/book.pdo.php ), который, как правило, предпочтительнее, чем устаревшие функции mysql_