REVOKE语句
REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ...ON [object_type] priv_levelFROM user_or_role [, user_or_role] ...REVOKE ALL [PRIVILEGES ],GRANT OPTION FROM user_or_role [, user_or_role] ...REVOKE PROXY ON user_or_roleFROM user_or_role [, user_or_role] ...REVOKE role [, role ] ...FROM user_or_role [, user_or_role ] ... user_or_role: { user (see Section 6.2.4, “SpecifyingAccount Names ”) | role (see Section 6.2.5, “SpecifyingRole Names ”. }
该REVOKE
语句使系统管理员可以撤消特权和角色,可以从用户帐户和角色撤消特权和角色。
有关特权级别,允许的priv_type
,priv_level
和object_type
值以及用于指定用户和密码的语法的详细信息,请参见“ GRANT语句”。
有关角色的信息,请参见“授权控制”。
当read_only
系统变量被启用,REVOKE
需要CONNECTION_ADMIN
或SUPER
特权除了在下面的讨论中描述的任何其它所需的特权。
REVOKE
对于所有命名的用户和角色都成功,或者回滚并且如果发生任何错误都不起作用。该语句仅在所有命名用户和角色都成功的情况下才写入二进制日志。
每个帐户名均使用“指定帐户名”中所述的格式。每个角色名称使用“指定角色名称”中描述的格式。例如:
REVOKE INSERT ON *.*FROM 'jeffrey'@'localhost';REVOKE 'role1', 'role2'FROM 'user1'@'localhost', 'user2'@'localhost';REVOKE SELECT ON world.*FROM 'role3';
帐户或角色名称的主机名部分(如果省略)默认为'%'
。
要使用第一种REVOKE
语法,您必须具有GRANT OPTION
特权,并且您必须具有要撤消的特权。
要撤消所有特权,请使用第二种语法,该语法将删除命名用户或角色的所有全局,数据库,表,列和例程特权:
REVOKE ALL PRIVILEGES ,GRANT OPTION FROM user_or_role [, user_or_role] ...
REVOKE ALL PRIVILEGES, GRANT OPTION
不撤消任何角色。
要使用此REVOKE
语法,您必须具有全局CREATE USER
特权或系统架构的UPDATE
特权mysql
。
REVOKE
关键字后跟一个或多个角色名称的语法采用一个FROM
子句,指示要从中撤消角色的一个或多个用户或角色。
mandatory_roles
无法撤销在系统变量值中命名的角色。
撤消的角色会立即影响从中撤消该角色的任何用户帐户,这样,在该帐户的任何当前会话中,都会为下一条执行的语句调整其特权。
撤消角色将撤消角色本身,而不是其所代表的特权。假设一个帐户被授予了一个包含给定特权的角色,并且还被明确授予了该特权或另一个包含该特权的角色。在这种情况下,如果第一个角色被撤销,该帐户仍然拥有该特权。例如,如果一个帐户被授予两个角色,每个角色都包括SELECT
,则在任一角色被撤销后,该帐户仍然可以选择。
REVOKE ALL ON *.*
(在全局级别)撤消所有授予的静态全局特权和所有授予的动态特权。
要从中撤消特权和角色的用户帐户和角色必须存在,但是当前不需要向其授予要撤消的特权和角色。
授予但服务器不知道的已撤消特权将通过警告撤消。对于动态特权可能会发生这种情况。例如,可以在安装注册该组件的组件时授予动态特权,但是如果该组件随后被卸载,则该特权将变为未注册,尽管拥有该特权的帐户仍然拥有该特权,并且可以从中撤消该特权。
REVOKE
删除特权,但不会从mysql.user
系统表中删除行。要完全删除用户帐户,请使用DROP USER
。请参见“ DROP USER语句”。
如果授予表包含包含大小写混合的数据库名或表名的特权行,并且lower_case_table_names
系统变量设置为非零值,REVOKE
则不能用于撤消这些特权。有必要直接操作授权表。(设置GRANT
时将不会创建此类行lower_case_table_names
,但是此类行可能是在设置变量之前创建的。lower_case_table_names
只能在初始化服务器时配置该设置。)
从mysql程序成功执行后,以REVOKE
响应Query OK, 0 rows affected
。要确定操作后仍保留哪些特权,请使用SHOW GRANTS
。请参见“ SHOW GRANTS语句”。