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

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

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

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

Q&A

解決済

3回答

20349閲覧

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

wwm1

総合スコア8

MySQL

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

0グッド

0クリップ

投稿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へログインするときのコマンドを追記

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

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

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

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

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

guest

回答3

0

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

総合スコア1800

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

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

0

ベストアンサー

はじめに

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

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

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

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上でも検証してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問