MySQL 取消权限
我们已经学会了如何授予用户帐户访问权限。现在,我们要学习的是从用户帐户中撤销权限。MySQL 提供了 REVOKE 语句来从用户帐户中删除权限。
REVOKE 语句
撤销语句使系统管理员能够撤销 MySQL 用户帐户的权限和角色,以便他们不能再使用之前分配的数据库权限。
语法
下面是使用 REVOKE 语句的基本语法:
REVOKE privilege_name(s)
ON object
FROM user_account_name;
参数解释
在上述语法中,我们可以有以下参数:
参数名 | 描述 |
---|---|
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; | 它用于从存储过程(过程和函数)中撤销所有权限。 |
代理 | REVOKE PROXY ON root FROM peter@localhost; | 它使我们能够撤销代理用户。 |
REVOKE语句示例
让我们通过例子来了解REVOKE权限。首先,我们需要使用以下语句创建一个名为” john@localhost “的新用户:
mysql> CREATE USER john@localhost IDENTIFIED BY 'jtp12345';
接下来,使用以下语句将当前服务器上的所有数据库的所有权限赋予john@localhost:
mysql> GRANT ALL ON mystudentdb.* TO john@localhost;
接下来,执行SHOW GRANT语句来验证权限。在输出中,我们可以看到所有权限都被分配给了当前服务器上的所有数据库john@localhost。
如果我们想撤销授予用户的所有权限,执行以下语句:
mysql> REVOKE ALL, GRANT OPTION FROM john@localhost;
我们将在下面得到输出,我们可以看到用户可以在没有任何权限的情况下登录到数据库中。
撤销用户帐户上的选定特权
假设我们已经通过以下语句为用户提供了在mystudentdb上执行SELECT、INSERT和UPDATE命令的授权特权:
mysql> GRANT SELECT, UPDATE, INSERT ON mystudentdb.* TO john@localhost;
接下来, 使用以下语句显示GRANT权限:
mysql> SHOW GRANTS FOR john@localhost;
最后,通过以下语句执行REVOKE语句来移除更新和插入的特权:
mysql> REVOKE UPDATE, INSERT ON mystudentdb.* FROM john@localhost;
它将提供以下输出,只保留SELECT权限。
撤销代理用户示例
首先,我们需要通过以下语句向想要代理的用户授予代理权限:
mysql> GRANT PROXY ON 'peter@javatpoint' TO 'john'@'localhost' WITH GRANT OPTION;
接下来,使用给定的语句显示GRANT权限:
mysql> SHOW GRANTS FOR 'john'@'localhost';
最后,执行REVOKE语句以从用户中删除代理权限,语句如下:
mysql> REVOKE PROXY ON 'peter@javatpoint' FROM 'john'@'localhost';
它将提供以下输出,其中代理权限已成功吊销。
撤销存储例程示例的权限
在这里,撤销权限适用于 过去拥有执行权限的用户 的存储例程(包括过程和函数)。
通过以下示例来理解它。假设我们有一个函数 calculatesalary ,并希望授予用户john 执行权限 ,运行以下查询:
mysql> GRANT EXECUTE ON FUNCTION calculatesalary TO john@localhost;
如果需要撤销对用户的执行权限,我们必须运行以下命令:
mysql> REVOKE EXECUTE ON FUNCTION calculatesalary TO john@localhost;
我们可以在下面的列表中撤销可以应用的权限。
- CREATE: 它使用户账户能够创建数据库和表。
- DROP: 它允许用户账户删除数据库和表。
- DELETE: 它使用户账户能够从特定表中删除行。
- INSERT: 它允许用户账户向特定表中插入行。
- SELECT: 它使用户账户能够读取数据库。
- UPDATE: 它使用户账户能够更新表行。