MySQL 8 でユーザーを作成してデータベースの権限を与えるときは2つに分けてやる

MySQL 8では、ユーザーを新規作成してデータベースの権限を与えるというのをワンライナーでできなくなりました。

MySQL 5.7 までは、データベースを作成した後に、そのデータベース用のユーザーを新規作成して、データベースに権限を与えるというのを下記のように1行のコマンドラインで実行できましたね。

でも MySQL 8 では下記のようにシンタックスエラーになってしまいました。 

mysql> GRANT ALL ON db_name.* TO db_user_name@localhost identified BY 'db_password';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY 'db_password'' at line 1

これは MySQL 8 からこの書き方(ショートハンド)が使えなくなったとのことで、下記のようにユーザー作成のところを少し変えて、分割してやれば良いそうです。

mysql> CREATE USER 'db_user_name'@'localhost' IDENTIFIED WITH mysql_native_password BY 'パスワード';
mysql> GRANT ALL ON db_name.* TO 'db_user_name'@'localhost';

CREATE USER のところを今まで通り CREATE USER 'db_user_name'@'localhost' IDENTIFIED BY 'パスワード'; とやると、MySQL を CLI で扱う分には問題なく MySQL にログインできますが、PHP から扱う場合は下記のようなエラーになってしまいました。

PDO exception: SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client
Published 2020-11-25
Updated 2020-11-27