MySQLでユーザーの権限を取り消す方法|REVOKE文の基本と実例
MySQLではREVOKEステートメントを使用することで、ユーザーから特定の権限(1つまたは複数)、あるいはすべての権限を取り消すことができます。この記事では、REVOKE文の基本構文と、実際に権限を取り消す手順を具体例とともに解説します。
REVOKE文の基本構文
REVOKE privilege_type [(column_list)]
[, priv_type [(column_list)]]...
ON [object_type] privilege_level
FROM user [, user]...構文の各要素は次の通りです。
- 第1段階: REVOKEキーワードの直後に、取り消したい権限のリストを指定します。複数の権限を指定する場合はカンマ(,)で区切ります。
- 第2段階: ON句で、権限を取り消す対象のレベル(グローバル・データベース・テーブルなど)を指定します。
- 第3段階: FROM句で、権限を取り消したいユーザーアカウントを指定します。複数のユーザーを一度に指定することも可能です。
実際の使用例
ここでは、ユーザーabcd@localhostに付与されているすべての権限を取り消す例を見てみましょう。
ステップ1:現在の権限を確認する
まず、SHOW GRANTS文で現在付与されている権限を確認します。
mysql> SHOW GRANTS FOR abcd@localhost; +---------------------------------------------------------------------+ | Grants for abcd@localhost | +---------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'abcd'@'localhost' WITH GRANT OPTION | +---------------------------------------------------------------------+ 1 row in set (0.00 sec)
このユーザーは、すべてのデータベースに対する全権限(ALL PRIVILEGES)と、他ユーザーへ権限を付与できるGRANT OPTIONを持っていることがわかります。
ステップ2:REVOKE文で権限を取り消す
次のクエリを実行して、すべての権限とGRANT OPTIONを取り消します。
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM abcd@localhost; Query OK, 0 rows affected (0.00 sec)
ステップ3:取り消し後の権限を再確認する
mysql> SHOW GRANTS FOR abcd@localhost; +------------------------------------------+ | Grants for abcd@localhost | +------------------------------------------+ | GRANT USAGE ON *.* TO 'abcd'@'localhost' | +------------------------------------------+ 1 row in set (0.00 sec)
実行後、残っているのは「USAGE」だけになります。これはログインはできるが何の操作権限も持たないことを示すプレースホルダー的な権限です。
補足ポイント
- REVOKEを実行するには、自分自身がその権限に関してGRANT OPTIONを持っている必要があります。
- REVOKEは即座に反映されるため、FLUSH PRIVILEGESを実行する必要はありません(GRANT/REVOKEは権限テーブルに直接反映されます)。
- 存在しないユーザーに対してREVOKEを実行しても、MySQL 8.0以降ではエラーにはなりませんが、意図した結果にならない場合があるため、事前にSHOW GRANTSで確認しておくのが安全です。
-
MySQLでAUTO_INCREMENTの値を1から再スタートさせる方法
MySQLでAUTO_INCREMENT(自動採番)の値を1から振り直したい場合は、TRUNCATEでテーブルを初期化するのが最も簡単な方法です。ここでは、実際にサンプルテーブルを作成し、動作を順番に確認していきましょう。サンプルテーブルの作成まず、AUTO_INCREMENT列を持つテーブルを作成します。mysql> create table DemoTable ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY ); Query OK, 0 rows affected (1.44 sec)次に、INSERTコマンドで複数のレ
-
MySQLで時刻(TIME型)から「分」を抽出する方法
MySQLでは、extract()関数とcast()を組み合わせることで、時刻データから分だけを簡単に抽出できます。基本構文以下が基本となる構文です。select extract(minute from cast(yourColumnName as time)) as anyAliasName from yourTableName;ポイントは、対象のカラムをcast()でtime型に変換してから、extract()のminute指定で分を取り出す点です。サンプルテーブルの作成まずは動作を確認するためのテーブルを作成しましょう。mysql> create table demo15 ->