- ベストアンサー
MySQLにリモートホストから接続する設定
- リモートホストからMySQLサーバーに接続するための設定方法
- MySQLサーバーの接続設定を変更して、特定のリモートホストからの接続を許可する方法
- MySQLサーバーへの接続を制限する方法
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
http://donrails.araki.net/archives/id/5732 /etc/hosts.allowを使うやり方もあるみたいです。
その他の回答 (2)
- tomaju
- ベストアンサー率76% (84/110)
bind-address は接続元リモートホストのIPアドレスを制限するものではなく、 「サーバが複数の IPアドレスを持っている場合に、特定のアドレスでしか 待ち受けないようにする」オプションだそうです。 http://www.mysql.gr.jp/mysqlml/mysql/msg/9635 http://www.nilab.info/zurazure2/000318.html http://somenotes.seesaa.net/article/140067960.html http://dev.mysql.com/doc/refman/5.1/en/server-options.html#option_mysqld_bind-address LANからの接続に限るというのであれば、 bind-address = サーバーのLANのIPアドレス になるかと思います。(その場合サーバー自身から 127.0.0.1 で接続できなくなると思われます) 手元の環境で実験してみました。 設定を変えて再起動し、netstat -lntp で待ち受けの状態を調べました。 MySQLのバージョンは 5.0.77 です。 (1) bind-address 記述なし サーバーが持っている全てのIPアドレスで待ち受けています。 ----------------------------------------------- tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 9383/mysqld ----------------------------------------------- (2) bind-address = 0.0.0.0 記述なしの場合と同じです。 ----------------------------------------------- tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 365/mysqld ----------------------------------------------- (3) bind-address = 127.0.0.1 127.0.0.1 でのみ待ち受けています。 ----------------------------------------------- tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 32707/mysqld ----------------------------------------------- (4) bind-address = xxx.xxx.xx.xx (サーバーIPアドレス、伏せてます) サーバーのIPアドレスで待ち受けしています。 ちなみにこの時はサーバー自身から mysql -h 127.0.0.1 で接続できませんでした。 ----------------------------------------------- tcp 0 0 xxx.xxx.xx.xx:3306 0.0.0.0:* LISTEN 695/mysqld ----------------------------------------------- (5) bind-address = 192.168.0.1 (サーバーが持っていないIPアドレス) MySQLサーバーが起動しません。 TCP/IPポートのバインドができないとのことで異常終了しています。 ----------------------------------------------- 110906 19:21:35 [ERROR] Can't start server: Bind on TCP/IP port: Cannot assign requested address 110906 19:21:35 [ERROR] Do you already have another mysqld server running on port: 3306 ? 110906 19:21:35 [ERROR] Aborting ----------------------------------------------- (6) 2行書いてみた bind-address = 127.0.0.1 bind-address = xxx.xxx.xx.xx 最後に書いてあるものが有効になるようです。 ----------------------------------------------- tcp 0 0 xxx.xxx.xx.xx:3306 0.0.0.0:* LISTEN 1927/mysqld ----------------------------------------------- (7) スペース区切りで並べて書いてみた bind-address = 127.0.0.1 xxx.xxx.xx.xx 192.168.0.1 最初のアドレスが有効になるようです。 ----------------------------------------------- tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 2652/mysqld -----------------------------------------------
お礼
tomaju様、非常に詳細に御確認頂き、大変ありがとうございます。 my.confでのbind-addressの書式の問題ではなく、そういう仕様ということで了解しました。 2011年9月6日
- nora1962
- ベストアンサー率60% (431/717)
検索したらこんなの見つけました。 http://pman0214.blog37.fc2.com/blog-entry-129.html bind-addressで複数の接続先の範囲設定はできないのでGRANT構文でユーザー名の指定のところでIPアドレスを指定するばいいとのことらしい。 家庭内LANなので実際有効か検証できないけれど GRANT ALL ON root@'192.168.11.%' identified by 'xxxx'; は通った(接続もできる)。
お礼
nora1962様、ありがとうございます。 御指摘と同様の mysql> grant all privileges on DB.* to USER@"192.168.1.%" identified by 'PASSWORD' with grant option ; を既に実行しております。 確かに、これでユーザーとホストの限定ができるのですが、my.confの設定で一つのIPネットワークしか指定できないのは変な感じがしますので、今は「my.confの設定ではどこまでできるのか」を知りたいです。 2011年9月6日
お礼
nora1962様、たびたびありがとうございます。 「mysqlに接続するhostを制限する」という質問の趣旨にはこの方法が適しています。 【個別アプリで問題が片付かなければ、システムで対処してみる】ということですね。 2011年9月6日