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

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

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

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

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

2回答

6014閲覧

Node.jsのMySQLで、rootで接続可能だが別ユーザだと接続できない

masaya_ohashi

総合スコア9206

MySQL

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

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

1クリップ

投稿2016/06/26 03:30

編集2016/06/26 04:45

###前提・実現したいこと
Node.jsでmysqlを使い接続しようとしたところ、下記のエラーが出て接続することができませんでした。該当ユーザにパスワードは現在設定していません。なにかMySQL側でやるべき設定を忘れているようなので、どなたか心当たりありましたらご教示いただけると幸いです。

###発生している問題・エラーメッセージ

Error: ER_DBACCESS_DENIED_ERROR: Access denied for user ''@'localhost' to database 'xxxx'

###該当のソースコード

var mysql = require("mysql"); var connection = mysql.createConnection({ host: 'localhost', user: 'xxxxx', password: '', port: 3306, database: 'xxxx' }); connection.connect(function(err) { if (err) { console.error("error mysql connection"); console.error(err.stack); } else { console.log("connected mysql:" + connection.threadId); } });

権限のチェック

mysql> SHOW GRANTS for 'xxxxx'@'%'; +-------------------------------------------------+ | Grants for xxxxx@% | +-------------------------------------------------+ | GRANT USAGE ON *.* TO 'xxxxx'@'%' | | GRANT ALL PRIVILEGES ON `%`.* TO 'xxxxx'@'%' | +-------------------------------------------------+

###試したこと

  • createConnectionのパラメータをrootユーザ(パス付き)に設定を変えたところ動作しました。
  • xxxxxユーザはMySQL側でxxxxデータベースへのアクセス権は付与しています。
  • xxxxxユーザのLimit to Hosts Matchingは今は%でワイルドカード指定にしています。

###補足情報(言語/FW/ツール等のバージョンなど)
Windows 8.1
Node.js v6.2.1
MySQL(Node.js) 2.10.2
MySQL(XAMPP) 5.6.28-76.1

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

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

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

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

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

guest

回答2

0

自己解決

XAMPPで起動しているMySQLに、MySQL Workbench上で作成したユーザだとどうも正しく動作しないようです。一度ユーザを削除、mysqlコンソールでユーザを作成しなおしたところ、接続できました。
念のため、もう一度ユーザを削除、MySQL Workbench経由でユーザを作成したところ、やはり接続できませんでした。MySQL WorkbenchでXAMPPのMySQLに接続する際に出る以下の警告が何か関係しているかもしれません。

Connection Warning (local) Incompatible/nonstandard server version or connection protocol detected (10.1.13). (以下略)

###追記
問題はMySQL WorkbenchのLimit to Hosts Matchingの初期値「%」がまずかったようです。「localhost」のみを指定してMySQL Workbenchで作成した場合正しく動作しました。

投稿2016/06/26 05:20

編集2016/06/26 06:02
masaya_ohashi

総合スコア9206

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

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

0

メッセージを見る限りユーザがデータベースへのアクセス権を持っていないので、再度確認してはいかがですか?付与したと思っても、勘違いでついていないことは多いです。
まずはエラーメッセージから読み取れる内容を切り分けるべきです。

投稿2016/06/26 04:13

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

masaya_ohashi

2016/06/26 05:21

確認したところやはり権限は付与されていました。が、自己解決の方に記載したように、MySQL Workbench経由でユーザを作成したことが問題のようでした。助言によりユーザを作り直すきっかけになりました。ありがとうございました。
退会済みユーザー

退会済みユーザー

2016/06/26 05:30

GRANT ALL PRIVILEGES ON *.* TO 'xxxxx'@'%' となるのが正しい気がします。
退会済みユーザー

退会済みユーザー

2016/06/26 08:33

確認できる環境に戻ったので、テストしました。 GRANT ALL PRIVILEGES ON `%`.* TO 'xxxxx'@'%' でも動作するのですね。失礼しました。
masaya_ohashi

2016/06/26 09:17

自分も調べてみて意外でしたが、'%'で大丈夫なんですよね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問