質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

4636閲覧

AccessからのMysqlへ外部接続時のエラーについて

rei_01

総合スコア13

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2019/06/09 07:09

AccessでMysqlへ外部接続し、リンクテーブルを作成しています。
odbcad32.exeで設定すると問題なく接続できるのですが、今後お客様へ配布することも考え、DSNレス接続をしたいと思い、下記のコードを見つけ試してみました。
※localhostは接続先サーバーのアドレスになっており、サーバー上でIPアドレスの許可もしてあります。

記載されているようにlocalhostでローカルサーバーへ接続すると問題なく、イミディエイトウィンドウへ出力されますが、外部サーバーへ繋ぐと

実行時エラー '-2147467259(80004005)'
「access denied for user 'root'@'許可したIPアドレス' to database 'mysql'」

と、出て接続できません。
調べるとアクセスが拒否されているらしいことは分かったのですが、DSNで接続ができているので、パスワードなど間違っておらず、正常に外部接続ができることは確認できていると思っております。
もう何をどうすればいいのか分からない状態です。

どなたかご教授をお願い致します。

VBA

1Sub sample() 2Dim con As New ADODB.Connection, Rec As New ADODB.Recordset 3 con.ConnectionString = "Driver={MySQL ODBC 3.51 Driver};DATABASE=mysql;" _ 4 & "PWD=password;PORT=3306;SERVER=localhost;" _ 5 & "STMT=SET NAMES sjis;UID=root" 6 con.Open 7 8 Rec.Open "select * from user", con 9 Do Until Rec.EOF 10 Debug.Print Rec(0) 11 Rec.MoveNext 12 Loop 13End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

これは接続文字列の書き方の問題ではなくて、MySQL側の権限設定の問題です。

MySQLは接続元のIPアドレスを制限する機能を持っています。
rootも初期設定ではlocalhostからのみ接続できるように「root@localhost」という形でユーザ登録されているため、外からの接続であればID・パスワードが正しくても拒否されます。

現在のユーザ一覧を確認してみてください。

SQL

1SELECT user, host FROM mysql.user;

このhostが接続が許されたIPアドレスになります。

上記SQLでAccess側のIPアドレスが許可されていないことが確認できましたら、外部サーバのMySQLに「root@Access側のIPアドレス」の形でユーザを追加してあげれば、接続できるようになるかと思います。

ユーザを作成するのはこんな感じです。

SQL

1CREATE USER 'root'@'IPアドレス' IDENTIFIED BY 'パスワード'; 2

※セキュリティを考えるなら、rootで接続するのではなく、Access側で必要とする操作のみを許可したユーザを別途作るのが良いと思いますが。
※IPアドレスの部分を「%」とすればどこからでも接続できるユーザを作成できます。楽ちんですが、セキュリティ要件を検討の上設定ください。

公式ドキュメント
参考URL

投稿2019/06/25 16:46

MyRadio

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rei_01

2019/06/30 16:16

回答に気づかず、お返事が遅くなって申し訳ありません。 ご回答ありがとうございます。 サーバー上でIPアドレスの許可はしてあります。 「%」の許可はサーバー側が許可しておらず、IPアドレスを指定するようエラーメッセージが出ます。 接続文字が間違ってるわけではないんですね。。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問