MySQLのユーザ削除についてまとめています。
以下の解説は、MySQL 8.0以降を前提にしています。
MySQLのユーザ削除は、drop user
MySQLのユーザ削除の構文
drop user ユーザ名@ホスト名;
以下の例は、現在のユーザ一覧を確認し、ユーザuser0@localhostを削除したあと、再度ユーザ一覧を確認して、削除が完了したことを確認しています。
【関連記事】
▶MySQLのユーザ一覧は、mysql.userを参照 権限一覧やパスワードハッシュ一覧の取得方法
mysql> select user, host from mysql.user; +------------------+-----------+ | user | host | +------------------+-----------+ | root | % | | mysql.infoschema | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | | select_only | localhost | | user0 | localhost | +------------------+-----------+ 8 rows in set (0.02 sec) mysql> drop user user0@localhost; Query OK, 0 rows affected (0.24 sec) mysql> select user, host from mysql.user; +------------------+-----------+ | user | host | +------------------+-----------+ | root | % | | mysql.infoschema | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | | select_only | localhost | +------------------+-----------+ 7 rows in set (0.00 sec)
MySQL5.7.5以前では、存在しないユーザを削除しようとした場合にエラーになります。エラー回避のため、以下のようにいったんGRANTでユーザ権限をなしにから、DROP USERを実行するSQLを実行するケースがあります。
ユーザが存在する場合は権限なしに設定され、ユーザが存在しない場合は権限のないユーザが作成されます。
GRANT USAGE ON *.* TO user0 IDENTIFIED BY password; DROP USER user0;
なお、この記述をすると、MySQL5.7.6以降では以下のwarningが出力されます。
1287 Using GRANT statement to modify existing user's properties other than privileges is deprecated and will be removed in future release. Use ALTER USER statement for this operation.
MySQL 5.7.6以降では、単純に以下のように記述すれば、存在しないユーザをドロップしようとした場合は無視されます。
drop user if exists user0
ユーザパスワードの削除は、alter userでパスワード上書き
MySQLでは、厳密な意味でパスワードの削除を行うことはできません。特権を持ったユーザで、パスワードを上書きすることによって旧パスワードを削除することができます。
mysql> alter user user0@localhost identified by 'pass123';
なお、MySQL5.7以前で利用できたPASSWORD()関数は廃止されています。MySQL8.0以降では、以下のエラーとなります。
mysql> SET PASSWORD FOR user0@localhost=PASSWORD('pass123'); ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PASSWORD('pass123')' at line 1
ユーザ権限の削除はrevoke
ユーザ権限を削除(剥奪)するには、以下のSQLを実行します。
revoke all on データベース名.テーブル名 from ユーザ名@ホスト名;
以下の例は、user0@localhostの権限を確認後、全てのデータベースの全てのテーブルから、権限を削除し、再度ユーザ権限を確認しています。
mysql> show grants for user0@localhost; +--------------------------------------------------------------+ | Grants for user0@localhost | +--------------------------------------------------------------+ | GRANT USAGE ON *.* TO `user0`@`localhost` | | GRANT ALL PRIVILEGES ON `employees`.* TO `user0`@`localhost` | +--------------------------------------------------------------+ 2 rows in set (0.00 sec) mysql> revoke all on *.* from user0@localhost; Query OK, 0 rows affected (0.01 sec) mysql> show grants for user0@localhost; +-------------------------------------------+ | Grants for user0@localhost | +-------------------------------------------+ | GRANT USAGE ON *.* TO `user0`@`localhost` | +-------------------------------------------+ 1 row in set (0.00 sec)
まとめ
- MySQLでユーザ削除するには、drop user
- MySQL 5.7以前と8.0以降では存在しないユーザのdropに対する扱いが異なる
- ユーザパスワードの削除は、alter userでパスワードを上書きする
- ユーザ権限の削除は、revokeを使用