サブネット全体に対してMySQLへのリモートアクセスを許可するにはどうすればよいですか?


93

このコードを使用して、1つのIPへのアクセスを簡単に許可できます。

$ mysql -u root -p
Enter password:    
mysql> use mysql    
mysql> GRANT ALL ON *.* to root@'192.168.1.4' IDENTIFIED BY 'your-root-password';     
mysql> FLUSH PRIVILEGES;

ただし、サブネット192.168.1。*全体がデータベースにリモートでアクセスできるようにする必要があります。

どうやってやるの?

回答:


100

編集:このページでMalvineousの回答を見て賛成することを検討してください。ネットマスクは、はるかに洗練されたソリューションです。


IPアドレスのワイルドカードとしてパーセント記号を使用するだけです。

http://dev.mysql.com/doc/refman/5.1/en/grant.htmlから

ホスト名にワイルドカードを指定できます。たとえば、user_name@'%.example.com'に適用されるuser_nameの任意のホストのためexample.comのドメイン、およびuser_name@'192.168.1.%'に適用されるuser_nameの任意のホストのための192.168.1クラスCサブネット。


6
私はちょうどこのようにそれをしました、しかし、例えば、それが適用されない理由:user_name@'192.168.1.my-hacked-rnds.killing.mysql.com '???? これはMySQLなので、答えを知りたくないと思います。
フロリアン・ヘイグル2015

+ Florian、克服しなければならないセキュリティの層を追加するので、単に「%」を使用するよりも優れていると思いますが、その弱点については良い点があると思います。私は確かにこの構成を他の手段で補足します。たとえば、ファイアウォールを介してアクセスを制御できる別のサブネットにデータベースサーバーをロックして、懸念を解消するなどです。
Josiah 2015年

22
'192.168.1.my-hacked-rnds.killing.mysql.com' 'のような例は、dev.mysql.com / doc / refman / 5.5 / en / account-names.htmlで具体的に扱われていますそのような試みを
Stefan Lasiewski 2015

118

それはあなたもネットマスクを使用することができるようになります、例えば

GRANT ... TO 'user'@'192.168.0.0/255.255.255.0' IDENTIFIED BY ...

7
これは技術的に正しい唯一の答えであるため、受け入れられる答えであるはずです。少なくとも5.5以降でサポート:dev.mysql.com/doc/refman/5.5/en/account-names.html
lifeofguenter

6
「172.16.0.0/16」のようなCIDR表記を使用しないでください。これは機能しません。常に完全なネットマスクを使用してください。
オリバーR.

範囲内の最初のIPアドレスを使用する必要があるようです。たとえば、192.168.0.34 / 255.255.255.0を使用すると、失敗します。
サンダー2017年

@SanderBackus:これは実際には意味がないもの192.160.0.34/255.255.255.0と同じです192.168.0.34/24/24つまり、最後の数値は0から255であり、34の値は無視されます)。次のように、IPに有効なマスクを使用すると機能します192.168.0.34/255.255.255.252か?
Malvineous 2017年

@Malvineousそれが私のポイントでした。192.160.0.34 / 255.255.255.0を使用する場合、mysqlは192.160.0.34を許可しません。私はフル/ 24を許可するつもりでした(はい、文書化されているようにフルネットマスクを使用しました)が、フルレンジを許可するために192.160.0.0/255.255.255.0を使用する必要がある場合はどうやら。
サンダー2017年

28

次のように、ワイルドカードとして「%」を使用します。

GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';

12
mysql> GRANT ALL ON *.* to root@'192.168.1.%' IDENTIFIED BY 'your-root-password';  

ワイルドカード文字は「*」ではなく「%」です


5

私が直面した特異性のメモ:
考えてみてください:

db server:  192.168.0.101
web server: 192.168.0.102

mysql.user'user'@'192.168.0.102'でpassword1のユーザーとpassword2のユーザーが定義されている場合'user'@'192.168.0.%'

その後、

password2を使用して「user」としてWebサーバーからdbサーバーに接続しようとすると、

'user'@'192.168.0.102'ワイルドカード'user'@'192.168.0.%'認証では単一のIP認証が使用されるため、「アクセスが拒否されました」というエラーが発生します 。


2
これが質問に対する答えかどうかはわかりません。元の質問に対する直接の回答が提供されない場合は、コメントとして投稿する必要があります。
kmeixner 2016年

13
Kmeixner、あなたは彼がコメントにそんなに多くを書くことを期待しますか?常識を働かせて、ロボットになるのをやめましょう。このコミュニティは、開発者が自分たちの生活を困難にしないように支援するためのものです。
user1735921 2016

0

サーバーに接続し、ホストに接続する場合は、次の手順を実行する必要があります。

  1. mysqlを記述してmysqlを開きます
  2. 書く;GRANT ALL ON . to root@'write_your_ip_addres' IDENTIFIED BY 'write_password_to_connect'
  3. コントロールとXを押してmysqlを終了します
  4. 書く nano /etc/mysql/my.cnf
  5. my.cnfフォルダーにbind-address = 127.0.0.1の前に#を書き込みます
  6. #bind-address = 127.0.0.1
  7. my.cnfフォルダーをcontrol + Xで保存します
  8. 書く service mysql restart
  9. ホスト上のnavicat経由で接続できます

0

@Malvineausの回答に動機付けられて、自分で試してみたところ、うまくいかないことに気づきました。

サブネットマスクは「192.168.1。%」または「192.168.1.0/255.255.255.0」で指定できますが、サブネットは常に完全なオクテット上にある必要があります。https://mariadb.com/kb/en/create-user/#host-name-componentを参照してください。結果として、一方の仕様と他方の仕様の間の機能は同じです。

たとえば、「192.168.1.0/255.255.255.128」は完全なオクテット境界上にないため、機能しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.