MySQLにリモートでアクセスしたい:
GRANT ALL ON *.* TO thufir@'192.168.0.16' IDENTIFIED BY 'hfdks4329vjkl';
Workbenchが接続に失敗したとき、私はpingとtelnetを調べました。
Brents-MacBook:~ thufir$
Brents-MacBook:~ thufir$ ping 192.168.0.21
PING 192.168.0.21 (192.168.0.21): 56 data bytes
64 bytes from 192.168.0.21: icmp_seq=0 ttl=64 time=0.274 ms
64 bytes from 192.168.0.21: icmp_seq=1 ttl=64 time=0.499 ms
^C
--- 192.168.0.21 ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.274/0.387/0.499/0.113 ms
Brents-MacBook:~ thufir$
Brents-MacBook:~ thufir$ telnet 192.168.0.21
Trying 192.168.0.21...
^C
Brents-MacBook:~ thufir$
Brents-MacBook:~ thufir$ telnet 192.168.0.21 3306
Trying 192.168.0.21...
^C
Brents-MacBook:~ thufir$
私はcoreutils
をインストールしていて、Macでnetstat
を使用する方法を学ぶ必要があります。lsof
-明らかに違います。
arrakis
サーバーはOpenSuSE
を実行しています。ポートが閉じていますか?
注:MacにMySQLをインストールしていませんが、 エラーが発生します ...
-------------------------------------------------- - - - - - - - - - - - - - - 更新
MariaDB [mysql]>
MariaDB [mysql]> GRANT ALL ON *.* TO `thufir`@'%' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)
MariaDB [mysql]>
MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MariaDB [mysql]>
MariaDB [mysql]> select Host, user, grant_priv from user;
+------------+--------+------------+
| Host | user | grant_priv |
+------------+--------+------------+
| localhost | root | Y |
| linux-k7qk | root | Y |
| 127.0.0.1 | root | Y |
| ::1 | root | Y |
| localhost | | N |
| linux-k7qk | | N |
| % | cron | N |
| localhost | cron | N |
| localhost | custom | N |
| % | custom | N |
| % | slave | N |
| % | root | N |
| % | thufir | N |
+------------+--------+------------+
13 rows in set (0.00 sec)
MariaDB [mysql]>
MySQLでネットワークを有効にするには、2つのことが正しく処理されていることを確認する必要があります。MySQLの許可とMySQL自体でネットワークを有効にする必要があります。
あなたのGRANT
コマンドは私には奇妙に思えます:
GRANT ALL ON *.* TO thufir@'192.168.0.16' IDENTIFIED BY 'hfdks4329vjkl';
'192.168.0.16'
が一重引用符で囲まれているのに、ユーザーがそうではないのはなぜですか? '192.168.0.16'
は、ホストを一重引用符で囲んだリテラルとして表示される場合があります。したがって、次のようにしてみてください。
GRANT ALL ON *.* TO '[email protected]' IDENTIFIED BY 'hfdks4329vjkl';
しかし、このようなアクセス許可を付与すると、twoコマンドがあり、次のように構成されます。
GRANT USAGE ON *.* TO '[email protected]' IDENTIFIED BY 'thufir';
GRANT ALL PRIVILEGES ON *.* TO '[email protected]';
次に、付与を設定した後、特権テーブルをフラッシュして、ロードする新しい特権を取得する必要があります。
FLUSH PRIVILEGES;
そして、あなたは行ってもいいはずです。
ただし、my.cnf
を確認し、次のようなbind-address
設定があるかどうかを確認してください。
bind-address = 127.0.0.1
これにより、MySQLはデフォルトでlocalhost
(つまり、127.0.0.1
)にバインドされ、データベースサーバーをネットワークに公開するとセキュリティリスクが発生する可能性があるため、MySQLの通常の「すぐに使用できる」セキュリティ動作になります。したがって、この場合、ネットワークを有効にする必要があるため、次のようにコメントアウトする必要があります。
#bind-address = 127.0.0.1
また、skip-networking
が無効になっていることを確認し、次のようにコメントアウトします。
#skip-networking
次に、MySQLサーバーを再起動して、新しい設定を有効にします。
とはいえ、MySQL GRANT
コマンドはIPアドレス192.168.0.16
を使用しますが、ping
およびtelnet
テストはすべて192.168.0.21
用です。 。では、どのIPアドレスですか? MySQLで許可を設定するときは、clientIPアドレスに基づいて設定します。サーバーのIPアドレスではありません。
したがって、サーバーのIPアドレスが192.168.0.16
で、クライアントのIPアドレスが192.168.0.21
の場合、MySQL GRANT
コマンドは192.168.0.21
およびnot例が示すように、192.168.0.16
。多分それが問題ですか?