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

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

ただいまの
回答率

90.50%

  • MySQL

    5856questions

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

  • ネットワーク

    540questions

    ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。

Mysqlの外部サーバーへの接続

解決済

回答 5

投稿

  • 評価
  • クリップ 0
  • VIEW 1,198

seventhencore

score 15

アプリケーションから、外部のMysqlサーバーへのデータの読み書きを行いたいため、
ローカルのMysqlクライアント?から、AWS上に作成したMysqlへの接続を試しています。

検索すると、関連する情報はたくさんでてくるので、試してみていますが接続できません。
(サーバー側で3306をListen状態であることも確認しましたし、アクセスができるようなユーザーも作成しました。)

1点、不思議なのが、

mysql -u user -p -h hostname


と入力した際の挙動が、

Enter password: 
ERROR 1045 (28000): Access denied for user 'user'@'プロバイダのサーバーと思われる名前' (using password: YES)


と、返ってきます。しかし、ping を同様にhostnameで実行しても、正しいグローバルIPが帰ってきます。

これは社内のネットワークで実行しているため、なにかそういった設定がなされているのかもしれません。しかし、自宅のLAN環境で実施した場合も、同様の現象が起こってしまいます。
こちらは何が原因なのでしょうか?
主にNWの問題だと思うのですが、どのように検索すればよいかわからず。。。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

checkベストアンサー

+4

もしかして select * from user; を行ったときに、
「Host が % もしくは空で、かつ User も空、パスワードはなし」のエントリがあったりしませんか。

MySQL での接続チェックの際、user のエントリを「Host と User でソート」して、その先頭から見るので、上の条件に合致するレコードがあると「任意のホストからの、匿名ユーザ、パスワードは指定なし」としてのログインとみなされます。
そしてパスワードが指定されていれば、「パスワード指定なし」とマッチしないので接続が拒否されます。
※任意のパスワードを受け付ける、ではない

このとき仮にホストとユーザを指定したレコードが(例えば user@localhost)あっても、それより優先して権限チェックされてしまいます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/17 12:50 編集

    優先順位があるのですねユーザーを多く作ることがないので直面したことがありませんでした。
    参考になりました。

    seventhencoreさん
    事象がこちらの回答に該当していればここの説明も参考になると思います。
    http://b.l0g.jp/mysql/user-at-localhost/

    キャンセル

  • 2017/03/17 14:18

    接続の優先順位があるのですね。
    なかなか、接続できずにuserをいろいろな条件で作ってしまっており、
    それをほとんど消してスッキリさせ、新しく要件に合うユーザーを作成したところ、無事接続することができました!みなさんありがとうございます!

    キャンセル

  • 2017/03/17 17:04

    実際には最初のエントリしか使ってくれないので、完全一致するエントリがあっても無視されるというステキ仕様なので…嵌まるとなまじ正しいエントリがある故に気づきにくいという、孔明の罠です(w

    キャンセル

0

そのエラーが出ているということはポートは空いていそうですね。
あとは利用するユーザーにも接続IP制限がかかっていないか確認してみてください。
権限を持っていらっしゃるならmysqlにて

mysql> select host, user from mysql.user;


で接続ユーザー自体にlocalhostなどホスト指定がされていませんでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/16 19:01

    それとパスワードは設定されていますでしょうか。

    キャンセル

  • 2017/03/16 21:01

    +--------+------------------+
    | user | host |
    +--------+------------------+
    | user | % |
    ....
    となります。とりあえず、接続ができるかを試してみたいのでガバガバですが。。。
    パスワードも設定しているため、接続のコマンドを投げた後、入力しています。

    キャンセル

0

'user'@'プロバイダのサーバーと思われる名前'
というユーザーはAWSのMySQLに作成されているのでしょうか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/16 21:04

    確かにuserというuserはaws上のmysqlに作成したユーザーです。
    私の認識では文法がsshと同じなので、awsから見れば user@localhost のようなものにログインしたいが、localhost部分にIPを入力すると、なぜか経由しているサーバーに置き換えられてしまうため、正しいlocalhost(awsから見た)にたどり着けていないのかな、と認識したのですが・・・

    キャンセル

0

サーバー側で3306をListen状態であることも確認しましたし、
アクセスができるようなユーザーも作成しました。

とありますが、どのようにユーザーを作ったのでしょうか。
もう少し、情報を具体的に出してください。

Access deniedなので、ホストまでは到達していると思いますので、ネットワークの問題ではなさそうです。
しかし、社内はともかく、自宅からも同じ結果が返るとしたら、セキュリティ的にちょっと問題ですね。
どこからでも、そのサーバーの3306番のポートに接続できるわけですから。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/03/16 21:11

    確かに、Access deniedですが、目的のサーバーが違う風に見えている、ということはないでしょうか?
    ERROR 1045 (28000): Access denied for user 'user'@hostname (using password: YES)
    と返ってくるのであれば、確かに目的のサーバーにたどり着けているのだな、というのは分かるのですが。。。

    セキュリティ面では、接続できた後にきちんと絞っていく予定です。まずは何が原因で繋がらないのか、そこから、と思っています。

    キャンセル

  • 2017/03/16 22:04

    @より後は接続元ですよ。ですからあなたの家からアクセスしたなら、プロバイダの逆引きされたホスト名が出ているだけだと思います。

    キャンセル

  • 2017/03/16 22:05

    mysql -u user -p -h hostname としていると、DB名が指定されていません。ユーザーを設定したDB名を最後に付けてください。

    キャンセル

0

Error: 1045 SQLSTATE: 28000 (ER_ACCESS_DENIED_ERROR)
  Message: Access denied for user '%s'@'%s' (using password: %s)

https://dev.mysql.com/doc/refman/5.6/en/mysql-change-user.html
ER_ACCESS_DENIED_ERROR

The user or password was wrong.

ユーザー名またはパスワードが間違っています。のエラーですね。権限が違っていてもでた覚えがあります。

root@d0149b82fb29:/# mysql --help
mysql  Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using  EditLine wrapper
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
~~~一部抜粋
Usage: mysql [OPTIONS] [database]
  -u, --user=name     User for login if not current user.
  -h, --host=name     Connect to host.
  -p, --password[=name]
                      Password to use when connecting to server. If password is
                      not given it's asked from the tty.
  -P, --port=#        Port number to use for connection or 0 for default to, in
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
                      /etc/services, built-in default (3306).

userはrootではないのでDB指定しないといけないので

mysql -u user -p password -h 192.168.0.xx databasename


パス付きだとこういう感じですかね

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • MySQL

    5856questions

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

  • ネットワーク

    540questions

    ネットワークとは、複数のコンピューター間を接続する技術です。インターネットが最も主流なネットワークの形態で、TCP/IP・HTTP・DNSなどの様々なプロトコルや、ルータやサーバーなどの様々な機器の上に成り立っています。