【備忘録】WebAPサーバーからMariaDBへログインしたユーザにおいて権限付与ができない時の対処法

#はじめに
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'                            　　　　　　　　　         |
+------------------------------------------------------------------------------------------------------------------------+
```


#参考
https://qiita.com/yukibe/items/4ba2aa49510ab1f6b1f1