はにまログ

「はにまる」のようにゆるーく生きたい。

DB移行前のユーザ情報が、どこかに残っている!?

旧サーバから、MySQLとアプリケーションを移行して順調に動いているシステム。

問題発覚

ところが、特定のテーブルだけInsertできない。Select文は実行できる。

Insert時のエラーには、(今ははっきりと覚えてないが、)
オリジナルサーバの[ユーザ名]@[アドレス]でなければ更新できない
などと書いてあったようだ。

そもそも、データベース移行後、rootユーザしか作ってない&使ってない(ほんとはアカンけど)。
どこからそんなユーザが紛れ込んだんじゃ~。

それに、rootユーザに全権限与えた。
何が不満なんじゃ~。

調査

原因を探ってみると、Information Schemaデータベースの、triggerテーブルのDEFINERというカラムにそのユーザが明記されているではないか!
MySQLのダンプとって、そのまま展開しただけだと、前のサーバのユーザ情報がそうやって残るらしい…。
そして、そのユーザでなかったらトリガーを実行できない縛りになっているらしい。。

解決

triggerテーブルのDEFINER列を直接編集できない!rootでもその権限はないらしい。
幸いにもそのトリガーを作った時のSQLを残してあるので、それを実行したらDEFINERの値が
root@XXX.XXX.XXX.XXX
に変わりました。
その後は、順調に更新できるようになりました。ありがとう!