DEFINERとINVOKER
今日は業務で、MySQLと格闘してました。
テーブルの操作とかはある程度今まで行ってたのですが、今日はVIEWに苦しめられました。
あるVIEWにアクセスしようとすると、エラー!
> SELECT * FROM test_view; Access denied for user: 'user_name@host_name' (Using password: NO)
GRANTについては、テーブルレベルでは制御しておらず、グローバルレベルでしか設定していません。
アクセスしていたユーザにはちゃんと参照できる権限をつけていました。
VIEWについて詳細に調査。
> SHOW CREATE VIEW test_view; CREATE ALGORITHM = UNDEFINED DEFINER = `user_name2`@`host_name2` SQL SECURITY DEFINER ・・・・
すると、DEFINERの設定にアクセスしていたユーザとは別のユーザが指定されていました。
これによって、VIEWへのアクセスが拒否されてたみたいです。
DEFINERとINVOKERの違い
- ・DEFINER:DEFINERで定義されたユーザはVIEWにアクセス可能
- ・INVOKER:VIEWが生成されたテーブルの権限に基づいてアクセス権限が決まる