DB移行前のユーザ情報が、どこかに残っている!?
旧サーバから、MySQLとアプリケーションを移行して順調に動いているシステム。
問題発覚
ところが、特定のテーブルだけInsertできない。Select文は実行できる。
Insert時のエラーには、(今ははっきりと覚えてないが、)
オリジナルサーバの[ユーザ名]@[アドレス]でなければ更新できない
などと書いてあったようだ。
そもそも、データベース移行後、rootユーザしか作ってない&使ってない(ほんとはアカンけど)。
どこからそんなユーザが紛れ込んだんじゃ~。
それに、rootユーザに全権限与えた。
何が不満なんじゃ~。
調査
原因を探ってみると、Information Schemaデータベースの、triggerテーブルのDEFINERというカラムにそのユーザが明記されているではないか!
MySQLのダンプとって、そのまま展開しただけだと、前のサーバのユーザ情報がそうやって残るらしい…。
そして、そのユーザでなかったらトリガーを実行できない縛りになっているらしい。。
解決
triggerテーブルのDEFINER列を直接編集できない!rootでもその権限はないらしい。
幸いにもそのトリガーを作った時のSQLを残してあるので、それを実行したらDEFINERの値が
root@XXX.XXX.XXX.XXX
に変わりました。
その後は、順調に更新できるようになりました。ありがとう!