MySQL Revoke Privilege

17 Mar 2025 | 4 分钟阅读

我们已经学习了如何从 grant privileges 为用户账户授予访问权限。现在,我们将学习如何从用户账户撤销权限。MySQL 提供了 REVOKE 语句来从用户账户中移除权限。

REVOKE 语句

revoke 语句使系统管理员能够撤销权限和角色给 MySQL 用户账户,这样他们就不能使用过去分配的数据库权限。

语法

以下是使用 REVOKE 语句的基本语法

参数解释

在上面的语法中,我们可以有以下参数

参数名称描述
privilege_name(s)它指定了要从用户账户中撤销的访问权限或授予的权限。
object它确定了授予访问权限的权限级别。这意味着授予表权限;然后对象应该是表名。
user_account_name它确定了要从中撤销访问权限的用户的帐户名。

权限级别

MySQL 支持以下权限级别

权限级别语法描述
全球REVOKE ALL, GRANT OPTION FROM john@localhost;它适用于移除用户在 MySQL 服务器上的所有访问权限。
数据库REVOKE ALL ON mydb.*
FROM john@localhost;
它适用于撤销当前数据库中所有对象的全部权限。
REVOKE DELETE
ON mydb.employees
FROM john@localhsot;
它适用于撤销指定表中所有列的权限。
REVOKE SELECT (col1), INSERT (col1, col2), UPDATE (col2) ON mydb.mytable
FROM john@localhost;
它适用于撤销表中单个列的权限。
存储例程REVOKE EXECUTE ON PROCEDURE/FUNCTION mydb.myprocedure
FROM john@localhost;
它适用于撤销存储例程(过程和函数)的所有权限。
ProxyREVOKE PROXY ON root
FROM peter@localhost;
它允许我们撤销代理用户。

REVOKE 语句示例

让我们通过示例来理解 REVOKE 权限。首先,我们需要使用以下语句创建一个名为“john@localhost”的新用户

接下来,使用以下语句为当前服务器上的所有数据库的 john@localhost 分配所有权限

接下来,执行 SHOW GRANT 语句来验证权限。在输出中,我们可以看到所有权限都已分配给当前服务器上的所有数据库的 john@localhost。

MySQL Revoke Privilege

如果要撤销分配给用户的全部权限,请执行以下语句

我们将得到以下输出,其中可以看到用户可以登录数据库而没有任何权限。

MySQL Revoke Privilege

从用户账户撤销选定的权限

假设我们使用以下语句为用户 mystudentdb 提供了 SELECT、INSERT 和 UPDATE 命令的 grant 权限

接下来,使用以下语句显示 GRANT 权限

最后,执行 REVOKE 语句使用以下语句移除 UPDATE 和 INSERT 权限

它将给出以下输出,其中只剩下 SELECT 权限。

MySQL Revoke Privilege

REVOKE 代理用户示例

首先,我们需要使用以下语句为想要的用户授予代理权限

接下来,使用给定的语句显示 GRANT 权限

最后,执行 REVOKE 语句使用以下语句从用户那里移除代理权限

它将给出以下输出,其中代理权限已成功撤销。

MySQL Revoke Privilege

撤销存储例程权限示例

在这里,撤销权限应用于过程和函数,我们可以从过去拥有 execute 权限的用户那里撤销权限。

让我们通过示例来理解它。假设我们有一个函数 calculatesalary,并想为用户 john 授予 EXECUTE 权限,运行以下查询

如果需要撤销用户的 EXECUTE 权限,我们必须运行以下命令

我们可以从以下列表撤销权限,这些权限可以应用到

  1. CREATE:它允许用户账户创建数据库和表。
  2. DROP:它允许用户账户删除数据库和表。
  3. DELETE:它允许用户账户从特定表中删除行。
  4. INSERT:它允许用户账户向特定表中插入行。
  5. SELECT:它允许用户账户读取数据库。
  6. UPDATE:它允许用户账户更新表行。

下一个主题MySQL if()