こんにちは。まぁのです。
今日はちょっと仕事のお話。
未だにDBへアクセスするためのインタフェース作りに頭を悩ませる毎日を送っています。プログラミング初心者には、PHPもハードル高いです…とりあえず取り急ぎ、ODBCドライバを利用して、Excel上にDBのデータを引っ張ってくるというVBAを作ってみました。
ODBCマジ便利!!!
一応、ODBCの設定をする際にハマった箇所を記載しておきます。また時間が経ったら忘れそうだから、自分的メモも兼ねて。初歩的なミス過ぎて、しばらく気がつかなかった…
※ODBCのインストール等は色々な方が説明されていますので、省略。
ODBCとMySQLとの関連付け設定をする際、データベース名や接続ユーザ等を設定するダイアログが表示されます。設定項目を入力。「Test」ボタンをクリックしてDBへ接続テストを行います。
通常はこのように接続成功の表示。
接続失敗すると、エラー表示が…
エラー内容:
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;
■テーブルの見方
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上の手順通りにはならない。
・エラーメッセージをよく確認する事。
以上!