質問: ssh経由でmysqlに接続する 関連するすべてのコンピューターはmacos x10.6.xマシンです。私はコンピューターaを使用していて、mysqlを実行していて、a~ $ mysql -u punkish -p databaseなどとして接続できます。mysqlが実行されているコンピューターbにアクセスできます。 sshキーペアを設定してポート2200経由でbにsshできます。一度入ると、次のようにデータベースに接続できます。a~ $ ssh -p 2200 punkish@b b~ $ mysql -u punkish -p database ただし、コンピューターのsshを介したポート転送を設定して、コンピューターaのポート3307でmysqlに対して行われたすべての要求が、実際にはbのポート3306に送信されるようにします。これにより、guiプログラム(quantum gis)を使用できるようになります。 mysqlに接続したいが、トンネル経由で接続できない。だから、私は次のことをしますa~ $ ssh -p 2200 -l 3307:b:3306 punkish@b b~ $ 上記は私をbに直接ログインさせます。トンネルが確立されているかどうかはわかりませんが、確立されていると思います。ただし、以下は失敗します(別の端末でa~ $ mysql -p 3307 -u punkish -p enter password: error 1045 (28000): access denied for user 'punkish'@'localhost' (using password: yes) ここに興味深いことがあります-私はsequelpro(mac os x用のデスクトップmysqlクライアント)と呼ばれる別のguiプログラムを持っており、それはsshを介してmysql @bに問題なく接続できます。だから、私は何かが機能することを知っています...私は方法がわかりません。自分の質問に答える(8時間以内に答えられないため)解決策を見つけましたが、理由がわかりません。ここに行く-次のコマンドを使用してトンネルを作成していましたuser@compt_a ~$ssh -p 2200 -l 3307:compt_b:3306 ssh_user@compt_b cat - 上記をに変更する必要がありますuser@compt_a ~$ssh -p 2200 -l 3307:127.0.0.1:3306 ssh_user@compt_b cat - 今、次の作品user@compt_a ~$mysql -p 3307 -p -h 127.0.0.1 -u <db user@compt_b> 私には意味がない理由は、最初のコマンドが「ポート2200を介してsshトンネルを確立し、ローカルポート3307をコンピューターbのポート3306に転送する」と言っているためです。これは、「sshトンネルを確立する」よりも理にかなっています。ポート2200、ローカルポート3307を127.0.0.1のポート3306に転送します。それにもかかわらず、それは機能します。ああ、fwiw、最初のコマンドを使用すると、mysqlコマンドはメッセージで失敗しますerror 1130 (hy000): host 'compt_a' is not allowed to connect to this mysql server
回答: たぶん、マシンにsshで接続する必要はまったくありません。必要なのは、ネットワークのクライアントがそのマシンへのアクセスを許可されていることをmysqlに通知することだけです。 grant および create user ステートメントを見てください。 http://dev.mysql.com/doc/refman/5.1/en/grant.html http://dev.mysql.com/doc/refman/5.1/en/create-user.html 私たちのオフィスで、マシンaにデータベースを作成し、ネットワーク172.16.0.1/24または192.168.0.1/24のすべてのユーザーが、ユーザー名「office_user」とパスワード「を知っていれば、そのマシンにアクセスできるようにしたい場合」 office_pass」。オフィスのマシンにあるmysqlクライアントを使用して、アクセスを許可したデータベースに接続できるようにするステートメントを付与する必要があります。これは、任意のネットワークからmysqlデータベース上であらゆることを実行できるユーザーをオフィスで作成するための迅速で安全でない方法です。これは、単純なテストを実行している場合、および非実稼働サーバーでのみ使用してください。これにより、「office_user」ユーザーはmysqlサーバー上のすべてのデータベースにほぼ完全にアクセスできます。 create user'office_user '@' 172.16.0。% 'identified by'office_pass'; create user'office_user '@' 192.168.0。% 'identified by'office_pass';すべての特権を。に 'office_user' @ '172.16.0。%'に付与 'office_pass'で識別; flush privileges; 私が含めなかったので、このユーザーはローカルホストで作業しないことに注意してください create user'office_user '@' localhost 'identified by'office_pass'; いいえ、ipアドレス172.16.0.20でホストされているmysqlサーバーにログインできません。 mysql -u office_user -h 172.16.0.20 -p "office_pass" より安全に、gisソフトウェアに必要なデータベース「office_db」でのみ特権を使用してセルフアクセスを許可できます。ここで、ipアドレスは172.16.0.20です。 create user'office_user '@' 172.16.0.20 'identified by'office_pass'; office_db。*のすべての特権を「office_user」@「172.16.0.20」に「office_pass」で識別します。 flush privileges; 同じログインを使用しますが、指定されたデータベースにのみアクセスできます mysql -u office -h 172.16.0.20 -p "office_pass" office_db 選択や削除などの必要な権限を自分に与えるだけで、これをさらに安全にすることができます。行って読んでください グラントステートメントのドキュメント