📜  MySQL撤销权限

📅  最后修改于: 2020-11-17 05:26:32             🧑  作者: Mango

MySQL撤销权限

我们已经学习了如何授予从授予特权到用户帐户的访问权限。现在,我们将学习从用户帐户撤消特权。 MySQL提供REVOKE语句以从用户帐户中删除特权。

撤销声明

使用revoke语句,系统管理员可以撤消对MySQL用户帐户的特权和角色,以便他们过去无法使用对数据库分配的权限。

句法

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

REVOKE privilege_name(s) 
ON object 
FROM user_account_name;

参数说明

在以上语法中,我们可以具有以下参数:

Parameter Name Descriptions
privilege_name(s) It specifies the access rights or grant privilege that we want to revoke from user accounts.
object It determines the privilege level on which the access rights are being granted. It means granting privilege to the table; then the object should be the name of the table.
user_account_name It determines the account name of the user from which we want to revoke the access rights.

权限等级

MySQL支持以下特权级别:

Privilege Level Syntax Descriptions
Global REVOKE ALL, GRANT OPTION FROM john@localhost; It applies to remove all access rights from the user on MySQL server.
Database REVOKE ALL ON mydb.*
FROM john@localhost;
It applies to revoke all privileges from objects in the current database.
Table REVOKE DELETE
ON mydb.employees
FROM john@localhsot;
It applies to revoke privileges from all columns in a specified table.
Column REVOKE SELECT (col1), INSERT (col1, col2), UPDATE (col2) ON mydb.mytable
FROM john@localhost;
It applies to revoke privileges from a single column of a table.
Stored Routine REVOKE EXECUTE ON PROCEDURE/FUNCTION mydb.myprocedure
FROM john@localhost;
It applies to revoke all privileges from stored routines (procedure and functions).
Proxy REVOKE PROXY ON root
FROM peter@localhost;
It enables us to revoke the proxy user.

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语句,使用以下语句删除UPDATE和INSERT特权:

mysql> REVOKE UPDATE, INSERT ON mystudentdb.* FROM john@localhost;

它将给出以下输出,其中仅保留SELECT特权。

REVOKE代理用户示例

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

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授予EXECUTE特权,请运行以下查询:

mysql> GRANT EXECUTE ON FUNCTION calculatesalary TO john@localhost;

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

mysql> REVOKE EXECUTE ON FUNCTION calculatesalary TO john@localhost;

我们可以从下面的列表中撤消特权,可以在上面应用特权。

  • 创建:它使用户帐户可以创建数据库和表。
  • DROP:它允许用户帐户删除数据库和表。
  • 删除:它使用户帐户可以从特定表中删除行。
  • INSERT:它允许用户帐户将行插入到特定表中。
  • 选择:它使用户帐户可以读取数据库。
  • UPDATE:它使用户帐户可以更新表行。