🌟

ViewテーブルのDefinerを変更できなかった件(MySQL)

2024/02/22に公開

起きたこと

  • viewテーブルを変更するマイグレーションの実行が失敗した
    • 原因はDB接続の権限によるエラー
    • アプリケーションでDB接続しているユーザーとviewのDefinerが異なっていたが原因

ということでviewのdefinerをちゃちゃっと変更しよう🐈と思ったら意外とつまづいた

結果 やること(まだ実行してないけど)

  • アプリケーションでDB接続しているユーザー(hogeuser)とDefinerになっているユーザー(fugeuser)にALLを付与(これで自分がDefinerになっているviewテーブルは削除できる)
    • GRANT ALL ON `%`.* TO 'hogeuser'@'%'
  • fugeuserがDefinerになっているviewテーブルをすべて削除
  • hogeuserでviewテーブル作成しなおす
  • 改めてmigration実行

つまづき

  • viewテーブルのDefiner変更クエリで権限エラー
    • viewテーブルの変更には特定の権限がいるらしい
      • SUEPR or SET_USER_IDがあればできる
  • SET_USER_IDの権限付与でsyntaxエラー
    • SET_USER_IDはMySQL5.7にはなかった
    • SUPERの権限付与するか(非推奨らしい)SUPERの権限を持つユーザーでDefinerの変更をするか、のどちらかしかないっぽい
      • ただしSUPERの権限を持つユーザーは直接サーバーに入らないとアクセスできないユーザーだった
  • SUPER権限の付与で権限エラー
    • SUPERの権限付与はrootじゃないとだめなのかな

SUPER権限付与できないからDefiner変更は諦めてviewテーブル作成しなおそう、ということになりました。

感想

へー!ふーん!🐈

Discussion