🔥

Cloud SQL上のMySQLでGRANT ALL ON *.*が使えない

に公開

事象

Google CloudのCloud SQLでMySQL 5.7を使っていましたが、拡張サポートにより費用が2倍程度高くなりそうでしたので、MySQL 8.0にアップグレードしました。

MySQL 8.0にアップグレード後GRANT ALL ON *.* 'ユーザー名'でユーザーに全権限を付与しようとしましたが、エラーになりはじかれてしまいました。

原因

Cloud SQL上のMySQL 8.0ではpartial_revokesというシステムフラグが有効になっています。そのため、データベースを指定する際のワイルドカードの使用に制限がかかっておりエラーになりました。なお、システムフラグのため変更できません。

参考: MySQL 8.0 以降の partial_revokes システムフラグ

解決策

以下どちらかのクエリを実行するしかなさそうです。

  • GRANT ALL ON データベース名.* 'ユーザー名';
    • ワイルドカード(*)ではなく、データベースを明示的に指定します。
  • GRANT cloudsqlsuperuser TO 'ユーザー名';

Discussion