0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Mysql(RDS)でホスト名を変更しようとしたら諸問題が発生した

Posted at

問題1:DROP USERで「the user specified as a definer」というエラーが発生した

背景

下記のようにホスト名を指定したユーザーを作成した後、ホスト名を指定していないユーザーをDROP USERしようとした。

username@% <- DROP USERの対象
username@192.168.1.1

原因

既存のviewのdefinerに指定されていたため、該当ユーザーを削除できなかった

MySQL 8.0.22 では、削除するアカウントの名前がストアドオブジェクトの DEFINER 属性として指定されている場合、DROP USER はエラーで失敗します。

対応策

削除しようとしているユーザーがviewのdefinerに定義されていることが原因であるので、definerを変更することで回避できます(?)

別の定義者でオブジェクトを再定義するには、ALTER EVENT または ALTER VIEW を使用して、イベントおよびビューの DEFINER アカウントを直接変更できます。

問題2:マイグレーション時に「」というエラーが発生した

こんな時系列

  1. マイグレーション専用のMysqlユーザーを使用し、スキーマを渡すことで機械的にマイグレーションができるようにしていた
  2. viewのdefinerに指定されているユーザーのホスト名指定verユーザーを作成した
  3. マイグレーション実行時にエラーが発生

原因

ログイン時にはより具体的なユーザーがログイン対象となるため、作成ユーザーと変更ユーザーが異なりマイグレーション時に失敗した。

mysql > SELECT Host, User FROM mysql.user;
+-------------+------------------+
| Host        | User             |
+-------------+------------------+
| %           | migrationer      |
| 192.168.1.1 | migrationer      |
+-------------+------------------+

definer...migrationer@%
ログインユーザー...migrationer@192.168.1.1

対応策

問題1と同様に、viewのdefinerを変更することで回避できます(?)

たぶん最適解

RDSではMysqlのホスト名を指定するのはやめて、おとなしくセキュリティグループで管理しよう

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?