• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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 Section 6.2.4, “Specifying Account Names”)
      | role (see Section 6.2.5, “Specifying Role Names”.
    }
    

    REVOKE语句使系统管理员可以撤消特权和角色,可以从用户帐户和角色撤消特权和角色。

    有关特权级别,允许的priv_typepriv_levelobject_type值以及用于指定用户和密码的语法的详细信息,请参见“ GRANT语句”。

    有关角色的信息,请参见“授权控制”。

    read_only系统变量被启用,REVOKE需要CONNECTION_ADMINSUPER特权除了在下面的讨论中描述的任何其它所需的特权。

    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语句”。