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

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

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

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

Q&A

解決済

rootで付与した権限が反映されない

wwm1
wwm1

総合スコア8

MySQL

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

3回答

0グッド

0クリップ

17964閲覧

投稿2017/05/28 05:51

編集2017/05/28 09:27

#前提
XAMPPをインストールしたときに同梱されていたMySQLをコマンドラインで利用していました。コマンドはすべてrootで実行しています。

MySQLのバージョン情報

Server version: 10.1.16-MariaDB mariadb.org binary distribution Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

windows7, XAMPP version3.2.2

#発生している問題
以下のように、rootでユーザー(hoge)を追加して、GRANT文で権限を付与し、それを確認しました。

SQL

1MariaDB [(none)]> CREATE USER 'hoge'@'localhost'; 2Query OK, 0 rows affected (0.00 sec) 3MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'hoge'@'localhost'; 4Query OK, 0 rows affected (0.00 sec)

SQL

1MariaDB [(none)]> show grants for 'hoge'@'localhost'; 2+---------------------------------------------------+ 3| Grants for hoge@localhost | 4+---------------------------------------------------+ 5| GRANT ALL PRIVILEGES ON *.* TO 'hoge'@'localhost' | 6+---------------------------------------------------+ 71 row in set (0.00 sec)

その後、hoge@localhostには、以下のようにログインしました。

SQL

1# mysql -u hoge@localhost

そして、下のようにSQL文を実行したところ、以下のようなエラーが発生しました。

SQL

1MariaDB [(none)]> SELECT `Host`,`Db`,`User` FROM mysql.db; 2ERROR 1142 (42000): SELECT command denied to user ''@'localhost' for table 'db'

そして、hoge@localhostで権限を確認したところ、なぜか権限が反映されていませんでした。

SQL

1MariaDB [(none)]> show grants; 2+--------------------------------------+ 3| Grants for @localhost | 4+--------------------------------------+ 5| GRANT USAGE ON *.* TO ''@'localhost' | 6+--------------------------------------+ 71 row in set (0.00 sec) 8

#試したこと
hoge@localhostではflush privilegesを実行できなかったので、rootでflush privilegesを実行して再度hoge@localhostで権限を確認しましたが、変化はありませんでした。

#####編集

  • 2017-05-28 18:26 hoge@localhostへログインするときのコマンドを追記

以下のような質問にはグッドを送りましょう

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

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

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

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

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

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

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

適切な質問に修正を依頼しましょう。

回答3

1

hoge@localhostにログインして」とのことですが、コマンド実行結果は@localhostになっているので、ログインする際にhoge@localhostにログインしていない状態です。

hoge@localhost@localhostは別のユーザになるので、権限がないのは正常な状態です。

ログイン時のコマンドを見直してみてはどうでしょう。

【補足】

念のため確認したところ、以下のようになりました。

$ mysql -u hoge Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 129 Server version: 5.5.52-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> show grants; +---------------------------------------------------+ | Grants for hoge@localhost | +---------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'hoge'@'localhost' | +---------------------------------------------------+ 1 row in set (0.00 sec) MariaDB [(none)]> SELECT `Host`,`Db`,`User` FROM mysql.db; +-----------+---------+---------+ | Host | Db | User | +-----------+---------+---------+ | % | test | | | % | test\_% | | | localhost | redmine | redmine | +-----------+---------+---------+ 3 rows in set (0.02 sec)

投稿2017/05/28 08:50

編集2017/05/28 08:59
tkmtmkt

総合スコア1788

wwm1👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

1

ベストアンサー

はじめに

MariaDB [(none)]> show grants; +--------------------------------------+ | Grants for @localhost | <<-- ユーザ名がなくlocalhostなので匿名ユーザでログインしていることを表している +--------------------------------------+ | GRANT USAGE ON *.* TO ''@'localhost' | <<-- 匿名ユーザに権限は与えていないので正しい +--------------------------------------+ 1 row in set (0.00 sec)

原因・解決

いまいち原因は私の知識ではわからないのですが、
ログイン時に匿名ユーザとして入っているので、

  • 匿名ユーザを削除、または匿名ユーザにパスワードをかける。
  • hoge@localhostにパスワードをかける。

これらの方法を試して見るのはどうでしょうか。
あくまで私ならこれを試して見る程度で、正直うまくいく保証はないです。

うまく動けば原因なんて気にしません(公開しなければ)。
動くことを願ってます。

投稿2017/05/28 07:37

Refshiz

総合スコア53

wwm1👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

回答へのコメント

wwm1

2017/05/28 10:01

Refshizさんの仰るとおり、匿名ユーザーでログインされてしまっていたようです。質問文に追記したようなコマンドでログインしていたので安心しきっていて見逃していました。hoge@localhostにパスワードをかけることで解決できました! もしよろしければ教えていただきたいのですが、パスワードがないユーザーは匿名ユーザーとして扱われてしまうのでしょうか?
Refshiz

2017/05/28 10:13

基本的にデータベースはlinuxシステム(アプリ含む)のローカルデータを扱うことや、Webサーバでの情報を取り扱うなどセキュリティを重視されている場で多く用いられているので、ユーザにパスワードは必須とされているのではないかと考えています。(あくまで私の意見です) 以下のサイトの最初に書かれているように 匿名アカウントを許可していない場合、パスワードを設定していないとエラーとなります。 https://www.dbonline.jp/mysql/connect/index3.html
wwm1

2017/05/28 11:07

セキュリティの観点から匿名ユーザーを無効にしない状態でパスワードが省略されていると勝手に匿名ユーザーとしてログインすることになってしまう、ということでしょうか。返信していただきありがとうございました!

0

恐らく自己解決だと思います(違ったら教えていただけると幸いです)。
今まで回答してくださった方々がおっしゃるように、なぜか匿名ユーザーでログインすることになっていたようで、# mysql -u hoge -h localhost -pというように、--hostオプションで明示的にlocalhostへ接続することを指定したところ、hoge@localhostとしてログインでき、権限も変更できていることが確認できましたCREATE USER 'hoge'@'localhost';というようにしてユーザーを作成したので、まさか--hostオプションでも指定しなければいけないとは思いませんでした。
もしも、「こうすれば--hostオプションを指定しなくても良い」という方法がありましたら、是非教えていただけるとうれしいです。

#追記
また、パスワードを設定することでも匿名ユーザーとしてログインされてしまうことを回避できましたので、自己解決をはずして、Refshizさんをベストアンサーにさせていただきます。

投稿2017/05/28 09:44

編集2017/05/28 09:57
wwm1

総合スコア8

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

回答へのコメント

tkmtmkt

2017/05/28 10:39

自分の環境は CentOS 7 にyumでMariaDBをインストールしたもので、mysql -u hoge で 'hoge'@'localhost' にログインできました。何が違うのでしょうね。
wwm1

2017/05/28 11:05

こちらの環境ではmysql -u hogeではログインできなかったと記憶しています。私はOSがwindows7で、XAMPPに同梱されていたMySQLを使っていたので、それが関係しているのかもしれません。 時間に余裕があるときにcent os7上でも検証してみたいと思います。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

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

MySQL

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