MySQL 8.0 リファレンスマニュアル


13.7.1.5 DROP USER ステートメント

DROP USER [IF EXISTS] user [, user] ...

DROP USER ステートメントは、1 つ以上の MySQL アカウントとその権限を削除します。 これにより、そのアカウントの権限行がすべての付与テーブルから削除されます。

mandatory_roles システム変数値で指定されたロールは削除できません。

DROP USER を使用するには、mysql システムスキーマに対するグローバル CREATE USER 権限または DELETE 権限が必要です。 read_only システム変数が有効になっている場合、DROP USER にはさらに CONNECTION_ADMIN 権限 (または非推奨の SUPER 権限) が必要です。

MySQL 8.0.22 では、削除するアカウントの名前がストアドオブジェクトの DEFINER 属性として指定されている場合、DROP USER はエラーで失敗します。 (つまり、アカウントを削除すると、格納されたオブジェクトが孤立する場合、ステートメントは失敗します。) 操作を実行するには、SET_USER_ID 権限が必要です。この場合、ステートメントはエラーで失敗するのではなく、警告付きで成功します。 特定のアカウントを DEFINER 属性として指定するオブジェクトの識別方法などの追加情報は、孤立したストアドオブジェクト を参照してください。

DROP USER は、指定されたすべてのユーザーに対して成功するか、ロールバックされ、エラーが発生しても効果はありません。 デフォルトでは、存在しないユーザーを削除しようとすると、エラーが発生します。 IF EXISTS 句を指定すると、ステートメントは、存在しない指定ユーザーごとに、エラーではなく、警告を生成します。

ステートメントが成功した場合はバイナリログに書き込まれますが、失敗した場合は書き込まれず、ロールバックが発生して変更は行われません。 バイナリログに書き込まれるステートメントには、指定されたすべてのユーザーが含まれます。 IF EXISTS 句が指定されている場合、これには存在せず、削除されなかったユーザーも含まれます。

各アカウント名には、セクション6.2.4「アカウント名の指定」で説明されている形式が使用されます。 例:

DROP USER 'jeffrey'@'localhost';

アカウント名のホスト名部分は、省略すると'%'にデフォルト設定されます。

重要

DROP USER は、開かれたどのユーザーセッションも自動的には閉じません。 さらに、開かれたセッションを持つユーザーが削除されても、このステートメントはそのユーザーのセッションが閉じられるまで有効になりません。 セッションがクローズされると、ユーザーは削除され、次回のログイン試行は失敗します。 これは意図的なものです

DROP USER は、古いユーザーが作成したどのデータベースまたはそれらのデータベース内のどのオブジェクトも自動的には削除したり、無効にしたりしません。 これには、DEFINER 属性に削除されたユーザーが指定されているストアドプログラムまたはビューが含まれます。 このようなオブジェクトにアクセスしようとすると、それが定義者のセキュリティーコンテキストで実行された場合は、エラーが生成される可能性があります。 (セキュリティーコンテキストについては、セクション25.6「ストアドオブジェクトのアクセス制御」を参照してください。)


関連キーワード:  ステートメント, CREATE, DROP, TABLE, ユーザー, サブクエリー, 削除, FUNCTION, SLAVE, 関数