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


13.7.1.8 REVOKE ステートメント

REVOKE
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    FROM user_or_role [, user_or_role] ...

REVOKE ALL [PRIVILEGES], GRANT OPTION
    FROM user_or_role [, user_or_role] ...

REVOKE PROXY ON user_or_role
    FROM user_or_role [, user_or_role] ...

REVOKE role [, role ] ...
    FROM user_or_role [, user_or_role ] ...

user_or_role: {
    user (see セクション6.2.4「アカウント名の指定」)
  | role (see セクション6.2.5「ロール名の指定」.
}

REVOKE ステートメントを使用すると、システム管理者は、ユーザーアカウントおよびロールから取り消すことができる権限およびロールを取り消すことができます。

権限が存在するレベル、許可される priv_typepriv_level および object_type の値、およびユーザーとパスワードを指定する構文の詳細は、セクション13.7.1.6「GRANT ステートメント」 を参照してください。

ロールの詳細は、セクション6.2.10「ロールの使用」 を参照してください。

read_only システム変数が有効になっている場合、REVOKE には、次の説明で説明する他の必要な権限に加えて、CONNECTION_ADMIN または権限 (または非推奨の SUPER 権限) が必要です。

REVOKE は、指定されたすべてのユーザーおよびロールに対して成功するか、ロールバックされ、エラーが発生しても効果はありません。 ステートメントは、指定されたすべてのユーザーおよび役割で成功した場合にのみバイナリログに書き込まれます。

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

REVOKE INSERT ON *.* FROM 'jeffrey'@'localhost';
REVOKE 'role1', 'role2' FROM 'user1'@'localhost', 'user2'@'localhost';
REVOKE SELECT ON world.* FROM 'role3';

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

最初の REVOKE 構文を使用するには、GRANT OPTION 権限が必要であり、かつ取り消そうとしている権限を持っている必要があります。

すべての権限を取り消すには、2 番目の構文を使用します。この構文では、指定したユーザーまたはロールのすべてのグローバル、データベース、テーブル、カラムおよびルーチン権限が削除されます:

REVOKE ALL PRIVILEGES, GRANT OPTION
  FROM user_or_role [, user_or_role] ...

REVOKE ALL PRIVILEGES, GRANT OPTION はロールを取り消しません。

この REVOKE 構文を使用するには、mysql システムスキーマに対するグローバル CREATE USER 権限または UPDATE 権限が必要です。

REVOKE キーワードの後に 1 つ以上のロール名が続く構文では、ロールを取り消す 1 つ以上のユーザーまたはロールを示す FROM 句を使用します。

mandatory_roles システム変数値で指定されたロールは取り消すことができません。

取り消されたロールは、取り消されたすべてのユーザーアカウントに即時に影響し、アカウントの現在のセッション内で、次に実行されるステートメントの権限が調整されます。

ロールを取り消すと、ロール自体が取り消され、ロールが表す権限は取り消されません。 アカウントに特定の権限を含むロールが付与され、その権限が明示的に付与されているか、その権限を含む別のロールが付与されているとします。 この場合、最初のロールが取り消されても、アカウントにはその権限があります。 たとえば、アカウントにそれぞれ SELECT を含む 2 つのロールが付与されている場合、そのアカウントはいずれかのロールが取り消された後も選択できます。

REVOKE ALL ON *.* (グローバルレベル) は、付与されたすべての静的グローバル権限および付与されたすべての動的権限を取り消します。

権限およびロールを取り消すユーザーアカウントおよびロールは存在する必要がありますが、取り消す権限およびロールは現在付与されている必要はありません。

サーバーに付与されているが既知ではない取り消された権限は、警告付きで取り消されます。 この状況は、動的権限に対して発生する可能性があります。 たとえば、動的権限は、それを登録するコンポーネントがインストールされている間に付与できますが、その後そのコンポーネントがアンインストールされると、権限を所有しているアカウントはまだその権限を所有しており、取り消すことができます。

REVOKE では権限は削除されますが、mysql.user システムテーブルから行は削除されません。 ユーザーアカウント全体を削除するには、DROP USER を使用します。 セクション13.7.1.5「DROP USER ステートメント」を参照してください。

付与テーブルに、大文字と小文字が混在したデータベースまたはテーブル名を含む権限行が保持されており、かつ lower_case_table_names システム変数が 0 以外の値に設定されている場合は、REVOKE を使用してこれらの権限を取り消すことはできません。 このような場合は、付与テーブルを直接操作する必要があります。 (lower_case_table_names が設定されている場合、GRANT はこのような行を作成しませんが、変数を設定する前にこのような行が作成されている可能性があります。 lower_case_table_names 設定は、サーバーの初期化時にのみ構成できます。)

mysql プログラムから正常に実行された場合、REVOKEQuery OK, 0 rows affected で応答します。 操作後に残っている権限を確認するには、SHOW GRANTS を使用します。 セクション13.7.7.21「SHOW GRANTS ステートメント」を参照してください。


関連キーワード:  ステートメント, CREATE, 権限, ロール, TABLE, REVOKE, DROP, user, role, アカウント