#はじめに
WebAPサーバーからDBサーバーへログインし、データベース作成とユーザー作成を行い、ユーザへDBの操作権限を付与しようとした際にエラーが出た。この時の対処法を備忘録として残すために執筆する。
※筆者はあまりDBサーバーでの操作に慣れていない初心者です。
#前提
WebAPサーバーのIPアドレス:10.0.10.221
DBサーバーのプライベートIPアドレス:10.0.10.228
事前に、DBサーバー上で、WebAPサーバーからDBサーバーへrootユーザーでログインできるようにするために下記コマンドを実行していた。
GRANT ALL PRIVILEGES ON *.* TO root@10.0.10.221;
#問題
WebAPサーバーからDBサーバーへログインし、データベース作成とユーザー作成を行なった。
しかし、作成したユーザーへデータベースの権限を付与しようとすると下記の様なエラーがでてしまって権限の付与ができない。
GRANT ALL ON 20211017_db.* TO '20211017_user'@'10.0.10.221';
ERROR 1044 (42000): Access denied for user 'root'@'10.0.10.221' to database '20211017_db'
##(参考)DB作成やユーザ作成の操作ログ
[root@ip-10-0-10-221 ~]# mysql -h 10.0.10.228 -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 13
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> CREATE DATABASE 20211017_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> CREATE USER '20211017_user'@'10.0.10.221' IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> GRANT ALL ON 20211017_db.* TO '20211017_user'@'10.0.10.221';
ERROR 1044 (42000): Access denied for user 'root'@'10.0.10.221' to database '20211017_db'
#調査
・ユーザとDBの名前の入力ミスはないか?
→ない。
・お互いのサーバーのmysqlのバージョンの違いによるものか?
→同じバージョンのため、この可能性はない。
・DBサーバーで付与した権限が不十分ではないか?
→localhost (10.0.10.228)と10.0.10.221のrootユーザーで権限を比べると10.0.10.221には「with grant option」がないめ、この可能性がある。
MariaDB [(none)]> show grants for root@localhost;
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
MariaDB [(none)]> show grants for root@10.0.10.221;
+-----------------------------------------------------+
| Grants for root@10.0.10.221 |
+-----------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.0.10.221' |
#原因
DBサーバー(localhost)でWebAPサーバーへ権限を付与する際に、「with grant option」コマンドを実行しなかったため。
つまり、下記のコマンドを実行しただけでは、WebAPサーバーのrootユーザーでgrantコマンドを実行する事ができななかった。
GRANT ALL PRIVILEGES ON *.* TO root@10.0.10.221;
#実施
DBサーバー上(localhost)で「with grant option」をつけた状態で権限付与した。
GRANT ALL PRIVILEGES ON *.* TO root@10.0.10.221 WITH GRANT OPTION;
確認してみると、「with grant option」の権限が付与された
MariaDB [(none)]> show grants for root@10.0.10.221;
+-----------------------------------------------------------------------+
| Grants for root@10.0.10.221 |
+-----------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.0.10.221' WITH GRANT OPTION |
+-----------------------------------------------------------------------+
その後、WebAPサーバー上でDBへログインして権限付与をやってみるとエラーコードが出る事なく、無事に権限付与ができた。
[root@ip-10-0-10-221 ~]# mysql -h 10.0.10.228 -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 23
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> GRANT ALL ON 20211017_db.* TO '20211017_user'@'10.0.10.221';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> show grants for 20211017_user@10.0.10.221;
+------------------------------------------------------------------------------------------------------------------------+
| Grants for 20211017_user@10.0.10.221 |
+------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO '20211017_user'@'10.0.10.221' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' |
| GRANT ALL PRIVILEGES ON `20211017_db`.* TO '20211017_user'@'10.0.10.221' |
+------------------------------------------------------------------------------------------------------------------------+