働く母の育児両立ブログ

働くママの育児両立ブログ

年の離れた姉妹を育てる働く母の日常ブログ。英語育児にちょっと足を引っ掛けています。

外部にあるMySQLサーバにODBCを使って接続してみる

こんにちは。まぁのです。

今日はちょっと仕事のお話。
未だにDBへアクセスするためのインタフェース作りに頭を悩ませる毎日を送っています。プログラミング初心者には、PHPもハードル高いです…とりあえず取り急ぎ、ODBCドライバを利用して、Excel上にDBのデータを引っ張ってくるというVBAを作ってみました。

ODBCマジ便利!!!

一応、ODBCの設定をする際にハマった箇所を記載しておきます。また時間が経ったら忘れそうだから、自分的メモも兼ねて。初歩的なミス過ぎて、しばらく気がつかなかった…

ODBC初期設定のエラー(MySQLの場合)


ODBCのインストール等は色々な方が説明されていますので、省略。

ODBCMySQLとの関連付け設定をする際、データベース名や接続ユーザ等を設定するダイアログが表示されます。設定項目を入力。「Test」ボタンをクリックしてDBへ接続テストを行います。


f:id:nikonikohaha:20160303145547p:plain


通常はこのように接続成功の表示。

f:id:nikonikohaha:20160303145627p:plain


接続失敗すると、エラー表示が…

f:id:nikonikohaha:20160303145639p:plain

エラー内容:

Connection Failed: [HY000][MySQL][ODBC 5.2(w) Driver] Access denied
for user 'root'@'192.168.x.x' (using password: YES)


英語苦手なのでgoogle先生に翻訳してもらうと、「PWは合ってるけど、アクセス権限がないよ」という意味らしい。

えっ!?rootなのになんでよ!!ターミナルから普通にssh接続できるし、Port番号も変えてないのに~、としばらく悩みすぎて全く進みませんでした。


外部サーバへ接続するには


私がやりたかったのは、外部サーバへの接続。
他のサイトの記載はlocalhostでの設定の仕方だと気づくのに時間がちょっとかかりました。早速、データベースの権限確認。

■ユーザ一覧とアクセス権の確認

select Host, User from mysql.user;


f:id:nikonikohaha:20160303145938p:plain


■テーブルの見方

Host アクセス権
localhost サーバにログイン後、アクセス可能。
192.168.X.% IPアドレス:192.168.X.~のホストからアクセス可能。
192.168.X.X IPアドレス:192.168.X.Xのホストからのみアクセス可能。
% 全てのホストからアクセス可能


確かにrootのアクセス権はlocalhostのみになっていたので、エラーメッセージは正しかったw とりあえず、いくらテスト用DBとはいえ今後を考えるとrootは不味いので、接続用の新規ユーザ「hoge」を作成してアクセス権を変更します。


■アクセス権の変更

GRANT SELECT, INSERT, UPDATE ON DB名.* TO hoge@"192.168.X.%";


私のホストは”192.168.x”のネットワークに所属している為、「hoge」ユーザーのホスト名を「localhost」ではなく、同じネットワーク”192.168.x.%”に。また、 SELECT、INSERT、UPDATEはやりたいので、それも出来るように権限を変更します。

あとは、ODBCの設定画面にて今作成した「hoge」ユーザを設定すれば、接続成功です!


今回の教訓


・同じ環境でない限り、Web上の手順通りにはならない。
・エラーメッセージをよく確認する事。


以上!