У меня есть некоторые проблемы с доступом к моей базе данных.
Сценарий работал раньше на моем локальном хосте. Я импортировал его на другой сервер, и другой сервер выдает мне сообщение об отказе в доступе.
Сообщение, которое дается: 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 и [email protected] будут иметь два отдельных набора разрешений. Изменение 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';
Проверьте документы по GRANT MySQL здесь — 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_
функции
Других решений пока нет …