web-dev-qa-db-ja.com

Mysql-ユーザー 'root'@'x.x.x.x'のアクセスが拒否されました

ローカルボックスからリモートのmysqlデータベースに接続しようとしています。最初は、mysql dbをヒットすることさえできませんでした。しかし、my.cnfファイルのbinding_addressにコメントを付けてmysqlサーバーを再起動した後、これをヒットできるようになりました。

しかし、今、アクセス拒否エラーが発生しています

mysql -u root -h x.x.x.x -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'x.x.x.x' (using password: YES)

私のIPはブラックリストに載っていますか?リモートボックスの管理者権限があるので、これを変更できます。誰かが私を助けます。

13
bragboy

Rootがlocalhost以外のホスト/ IPからアクセスできることを再確認してください。

mysql>はmysqlを使用します。
mysql>ユーザーからのホストの選択WHEREユーザー= 'ルート';

「localhost」を含む1行だけが返される場合は、接続元のIPにアクセス許可を付与する必要があります。

mysql> GRANT SELECT、INSERT ON mydatabase。* TO 'root'@'10.0.0.1';

Mydatabaseをアクセスしたい(またはワイルドカードに入れた)データベースに置き換え、IPをクライアントが接続しているアドレスまたはサブネットに置き換えます。

8
Serge Stepanov

ビジネスの最初の注文は、完全な権限で入ります。できない場合は、この行をmy.cnfに追加して、mysqlを再起動します。

skip-grant-tables

私はあなたがどんなユーザーを持っているかを確認するために少しの偵察をすることを勧めます:

SELECT user,Host,password FROM mysql.user WHERE user = 'root' ORDER BY Host ASC;

次のようなユーザーリストが表示されます。

mysql> SELECT user,Host,password FROM mysql.user WHERE user = 'root' ORDER BY Host ASC;
+------+------------+-------------------------------------------+
| user | Host       | password                                  |
+------+------------+-------------------------------------------+
| root | 127.0.0.1  |                                           |
| root | ::1        |                                           |
| root | localhost  | *E0AD777475E6713F9B04317EE38888D61042DAC1 |
| root | randym-mbp |                                           |
+------+------------+-------------------------------------------+
4 rows in set (0.01 sec)

リストにlocalhostが表示されている必要があります。そうでない場合は、次のように追加します。

GRANT ALL PRIVILEGES ON *.* TO root@'localhost' IDENTIFIED BY 'your_password' WITH GRANT OPTION;

それ以外の場合は、次のようにパスワードを更新するだけです。

SET PASSWORD FOR root@'localhost' = PASSWORD('your_password');
FLUSH PRIVILEGES;

次に、my.cnfからskip-grant-tablesを削除し、mysqlを再起動します。

22
randomx

mysqlのパスワードはIPごとに設定されます。通常、これらはlocalhostを介したアクセスのみ、特にrootユーザーに対してのみ設定されます。権限テーブルにroot@%エントリが設定されていることを確認します。

本当にリモートrootアクセスを許可する必要がある場合は、お願いは、ユーザーがサーバーのスーパーユーザーアカウントを簡単に推測できないようにユーザー名を変更することを検討してください。

4

Unixのようなシステムの場合、ルートパスワードをリセットするために次の解決策が機能しました: http://www.cyberciti.biz/tips/recover-mysql-root-password.html

Jist:

次の5つの簡単な手順でMySQLデータベースサーバーのパスワードを回復します。

  1. MySQLサーバープロセスを停止します。

  2. MySQL(mysqld)サーバー/デーモンプロセスを--skip-grant-tablesオプションで起動して、パスワードの入力を求めないようにします。

  3. Mysqlサーバーにrootユーザーとして接続します。

  4. 新しいmysql rootアカウントのパスワードを設定します。つまり、mysqlパスワードをリセットします。

  5. MySQLサーバーを終了して再起動します。

特定のコマンド:(rootユーザーとしてログイン):

  1. MySQLサービスを停止する

    # /etc/init.d/mysql stop
    

    出力:

    Stopping MySQL database server: mysqld.
    
  2. パスワードなしでMySQLサーバーを起動します。

    mysqld_safeを使用します。

    mysqld_safe --skip-grant-tables &
    

    出力:

    [1] 5988
    Starting mysqld daemon with databases from /var/lib/mysql
    mysqld_safe[6025]: started
    
  3. Mysqlクライアントを使用してmysqlサーバーに接続します。

    # mysql -u root
    

    出力:

    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 1 to server version: 4.1.15-Debian_1-log
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    mysql>
    
  4. 新しいMySQL rootユーザーパスワードを設定する

    mysql> use mysql;
    mysql> update user set password=PASSWORD("NEW-ROOT-PASSWORD") where User='root';
    mysql> flush privileges;
    mysql> quit
    
  5. MySQLサーバーを停止します。

    # /etc/init.d/mysql stop
    

    出力:

    Stopping MySQL database server: mysqld
    STOPPING server from pid file /var/run/mysqld/mysqld.pid
    mysqld_safe[6186]: ended
    [1]+  Done                    mysqld_safe --skip-grant-tables
    
  6. MySQLサーバーを起動してテストします。

    # /etc/init.d/mysql start
    # mysql -u root -p
    
1
c33s

そのIPに特権を付与する必要がある可能性があります。例は次のとおりです。

mysql> dbname。*のすべての権限をroot @ '%'に付与します。 mysql> FLUSH PRIVILEGES;

すべてのIPへの許可

0
hitmanDX

残念ながら、mysqlの権限はホストとIPで区別されます。ホスト名に付与された権限はIPでは機能せず、その逆も同様です。

接続元のユーザーとホストIP /ホスト名にアクセス許可を付与していることを確認してください。

0
Spliffster