📅  最后修改于: 2020-11-17 05:26:32             🧑  作者: Mango
我们已经学习了如何授予从授予特权到用户帐户的访问权限。现在,我们将学习从用户帐户撤消特权。 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特权。首先,我们需要使用以下语句创建一个名为“ 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特权。
首先,我们需要使用以下语句将代理特权授予想要的用户:
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;
我们可以从下面的列表中撤消特权,可以在上面应用特权。