TypeORMでER_NOT_SUPPORTED_AUTH_MODEに対処する


TypeORMを使ってていきなりエラーが出たので対処してみました

エラー

code: 'ER_NOT_SUPPORTED_AUTH_MODE',
errno: 1251,
sqlMessage:
   'Client does not support authentication protocol requested by server; consider upgrading MySQL client',

対処方法

mysqlのuserを作るときに、パスワードをmysql_native_passwordで設定する

ダメな例:

> CREATE USER 'foouser'@'localhost' IDENTIFIED BY 'foopassword';

okな例:

> CREATE USER 'foouser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'foopassword';

IDENTIFIED BY ではなく IDENTIFIED WITH mysql_native_password BYと書いて「mysql_native_passwordを使うよ」と指定します

もしすでにCREATE USERしていた場合は、以下のクエリでuserの設定を変更します

> ALTER USER 'foouser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'foopassword';
> FLUSH PRIVILEGES;

を実行する

解説

デフォルトのパスワード設定だとなぜかダメで、mysql_native_passwordっていうauth_pluginを使う必要があるようです

ログインは、デフォルトのパスワードを設定したユーザと同じように、

$ mysql -u foouser -p
Enter Password:

でできます

FLUSH PRIVILEGES は、mysqlのサーバを再起動せずにユーザの設定を更新できる命令
この場合は、mysql_native_passwordを追加したという更新を反映させるために実行する

エラーが直らない場合

  • ormconfig.jsonの設定を確認する
  • mysqlの走ってるPORTを確認する
  • DBが存在するか確認する i.e. SHOW DATABASES;を実行

参考

https://github.com/typeorm/typeorm/issues/2093
https://dev.mysql.com/doc/refman/8.0/en/create-user.html
https://linuxize.com/post/how-to-create-mysql-user-accounts-and-grant-privileges/