🌟
ViewテーブルのDefinerを変更できなかった件(MySQL)
起きたこと
- 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があればできる
- viewテーブルの変更には特定の権限がいるらしい
- SET_USER_IDの権限付与でsyntaxエラー
- SET_USER_IDはMySQL5.7にはなかった
- SUPERの権限付与するか(非推奨らしい)SUPERの権限を持つユーザーでDefinerの変更をするか、のどちらかしかないっぽい
- ただしSUPERの権限を持つユーザーは直接サーバーに入らないとアクセスできないユーザーだった
- SUPER権限の付与で権限エラー
- SUPERの権限付与はrootじゃないとだめなのかな
SUPER権限付与できないからDefiner変更は諦めてviewテーブル作成しなおそう、ということになりました。
感想
へー!ふーん!🐈
Discussion