1. ホーム
  2. mysql

[解決済み] すべてのホストからMySQLのルートアクセス

2022-04-29 01:44:52

質問

リモートのUbuntuマシンにMySQLサーバーをインストールしました。その際 root のユーザーを定義しています。 mysql.user テーブルはこのようになります。

mysql> SELECT host, user, password FROM user WHERE user = 'root';
+------------------+------+-------------------------------------------+
| host             | user | password                                  |
+------------------+------+-------------------------------------------+
| localhost        | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ip-10-48-110-188 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| 127.0.0.1        | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ::1              | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+

ユーザーでアクセスできる root を使用して、同じリモートマシンのコマンドラインインタフェースから、標準の mysql クライアントを使用します。ここで私は インターネット上のすべてのホストからの root アクセスを許可する という行を追加してみました(前のダンプの最初の行と全く同じものです。 host の列があります)。

mysql> SELECT host, user, password FROM user WHERE host = '%';
+------------------+------+-------------------------------------------+
| host             | user | password                                  |
+------------------+------+-------------------------------------------+
| %                | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+

しかし、個人PCのクライアントからは引き続き言われています(サーバーのIPは曖昧にしました)。

SQLエラー(2003)。46.x.x.x'のMySQLサーバーに接続できません(10061)

認証エラーなのか、ネットワークエラーなのかがわかりません。サーバーのファイアウォールでは、ポート 3306/TCP に対して 0.0.0.0/0 ということで、私としてはOKです...。

解決方法は?

更新してください。

コメントにあるように、MySql 8 以降は、まず明示的にユーザーを作成する必要があるので、コマンドは以下のようになります。

CREATE USER 'root'@'%' IDENTIFIED BY 'root'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

オリジナルの回答です。

そのプロセスには2つの段階があります。

a) 権限を付与する。ルートユーザーとして、次のように置き換えて実行します。 'password' を現在のrootパスワードに置き換えてください。

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

b) すべてのアドレスにバインドする。

最も簡単な方法は コメントアウト の行は my.cnf ファイルを作成します。

#bind-address = 127.0.0.1 

を実行し、mysqlを再起動します。

service mysql restart

デフォルトではlocalhostにのみバインドされますが、この行をコメントすると、見つけたすべてのインターフェイスにバインドされます。この行をコメントアウトすると、次のようになります。 bind-address=* .

mysqlサービスがどこにバインドされたかを確認するために、rootで実行します。

netstat -tupan | grep mysql

Ubuntu 16.0向けアップデート

設定ファイルは(現在)

/etc/mysql/mysql.conf.d/mysqld.cnf 

(少なくとも標準的なUbuntu 16では)