-1

データベースへのアクセスに問題があります。

スクリプトは、以前はローカルホストで機能していました。別のサーバーにインポートしたところ、別のサーバーからアクセス拒否メッセージが表示されました。

表示されるメッセージは次のとおりです。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 に変更しようとしました。

私のスクリプトの何が問題なのですか。私が使用しているパスワードは正しいと確信しています。

これを修正する方法を知っている人はいますか?

4

1 に答える 1

2

MySQL のアクセス許可は、接続先のアドレスとユーザーに基づいています。したがって、root@localhost と root@10.4.1.163 には、2 つの別個のアクセス許可セットがあります。コードとデータベースが同じサーバー上にある場合、num8erが言及したようにlocalhostを127.0.0.1に変更すると、おそらく機能します。

あなたの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_関数よりも一般的に好まれています。

于 2016-05-30T22:57:32.983 に答える