Mysql 简明教程
MySQL - REVOKE Statement
前面, 我们讨论了 root 用户如何在安装后通过默认权限访问 MySQL 服务器。这些权限足以对数据执行基本操作。然而, 在某些特殊情况下, 用户可能需要向服务器主机请求取消某些权限。要做到这一点, 我们使用 MySQL REVOKE 语句。
The MySQ REVOKE statement
MySQL REVOKE 语句用于从用户处删除某些管理权限或角色。它撤销先前授予的权限。
Example
假设我们使用 CREATE USER 语句在 MySQL 中创建了一个名为 'test_user'@'localhost' 的用户, 如下所示 −
CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'testpassword';
下面是生成的输出−
Query OK, 0 rows affected (0.23 sec)
现在, 让我们创建一个名为 'test_database' 的数据库 −
CREATE DATABASE test_database;
输出结果如下:
Query OK, 1 row affected (0.56 sec)
接下来,我们将使用已创建的数据库——
USE test_database;
我们得到了如下输出 −
Database changed
现在,让我们在数据库中创建一个表——
CREATE TABLE MyTable(data VARCHAR(255));
获得的输出如下 −
Query OK, 0 rows affected (0.67 sec)
将 grants privileges 查询应用于上面创建的表格, 给 'test_user'@'localhost −
GRANT SELECT ON test_database.MyTable TO 'test_user'@'localhost';
执行上面的代码后,我们得到以下输出: -
Query OK, 0 rows affected (0.31 sec)
您可以使用 SHOW GRANTS 语句验证已授予的权限——
SHOW GRANTS FOR 'test_user'@'localhost';
我们获得的输出如下所示——
现在, 您可以使用 REVOKE statement 撤销上述授予的权限, 如下所示 −
REVOKE SELECT ON test_database.MyTable FROM 'test_user'@'localhost';
我们得到了如下输出 −
Query OK, 0 rows affected (0.25 sec)
Revoking All Privileges
如果用户对一个用户拥有多个权限, 你可以使用 MySQL 中的 REVOKE ALL 语句一次性撤销所有这些权限。
Example
假设我们创建了一个用户, 如下所示 −
CREATE USER 'sample_user'@'localhost';
下面是生成的输出−
Query OK, 0 rows affected (0.18 sec)
我们还创建了一个过程, 如下所示 −
DELIMITER //
CREATE PROCEDURE sample ()
BEGIN
SELECT 'This is a sample procedure';
END//
DELIMITER ;
获得的输出如下 −
Query OK, 0 rows affected (0.29 sec)
此外,我们在数据库中创建一个名为“sample”的表 −
CREATE TABLE sample(data INT);
我们得到了如下输出 −
Query OK, 0 rows affected (0.68 sec)
现在,以下查询向名为 'sample_user'@'localhost' 的用户授予对上述创建过程的 ALTER ROUTINE、EXECUTE 权限。
GRANT ALTER ROUTINE, EXECUTE
ON PROCEDURE test_database.sample TO 'sample_user'@'localhost';
以上代码的输出如下所示 −
Query OK, 0 rows affected (0.20 sec)
同样,以下查询向用户“sample_user”@“localhost”授予对表“sample”的 SELECT、INSERT 和 UPDATE 权限 −
GRANT SELECT, INSERT, UPDATE
ON test.sample TO 'sample_user'@'localhost';
生成的结果为 −
Query OK, 0 rows affected (0.14 sec)
您可以使用 SHOW GRANTS 语句验证授予用户的全部权限清单 −
SHOW GRANTS FOR 'sample_user'@'localhost';
获得的结果如下 −
最后,要 revoke all the privileges 授予的“sample_user”@'localhost',可以使用以下语句 −
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'sample_user'@'localhost';
生成的结果为 −
Query OK, 0 rows affected (0.30 sec)
Revoking Proxy Privilege
您可以通过向用户授予 PROXY 权限,使其成为另一个用户的代理。如果您这样做,则这两个用户拥有相同的权限。
Example
假设我们在 MySQL 中使用 CREATE 语句创建了名为 sample_user, proxy_user 的用户 −
CREATE USER sample_user, proxy_user IDENTIFIED BY 'testpassword';
以下是所获得的输出 −
Query OK, 0 rows affected (0.52 sec)
现在,我们正在创建一个表“Employee” −
CREATE TABLE Employee (
ID INT, Name VARCHAR(15), Phone INT, SAL INT);
我们得到了如下输出 −
Query OK, 0 rows affected (6.47 sec)
以下查询向用户 sample_user 授予对上述创建表上的 SELECT 和 INSERT 权限 −
GRANT SELECT, INSERT ON Emp TO sample_user;
获得的输出如下 −
Query OK, 0 rows affected (0.28 sec)
现在,我们可以使用 GRANT 语句向用户 proxy_user 分配代理权限,如下所示 −
GRANT PROXY ON sample_user TO proxy_user;
生成的结果为 −
Query OK, 0 rows affected (1.61 sec)
您可以使用 REVOKE PROXY 语句撤消代理权限,如下所示 −
REVOKE PROXY ON sample_user FROM proxy_user;
我们获得以下结果 −
Query OK, 0 rows affected (0.33 sec)
Revoking a Role
MySQL 中的角色是一组带有名称的权限。您可以使用 CREATE ROLE 语句在 MySQL 中创建一个或多个角色。如果您不使用 ON 子句使用 GRANT 语句,您可以授予角色而不是权限。
Example
以下查询创建一个名为 TestRole_ReadOnly 的角色 −
CREATE ROLE 'TestRole_ReadOnly';
以下是上面代码的输出: -
Query OK, 0 rows affected (0.13 sec)
现在,让我们使用 GRANT 语句授予创建的角色只读权限 −
GRANT SELECT ON * . * TO 'TestRole_ReadOnly';
获得的结果是 −
Query OK, 0 rows affected (0.14 sec)
然后,您可以按如下方式授予创建的角色给用户 −
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
上述代码的输出如下:
Query OK, 0 rows affected (0.14 sec)
接下来,可以将“TestRole_ReadOnly” 角色授予 'newuser'@'localhost' −
GRANT 'TestRole_ReadOnly' TO 'newuser'@'localhost';
我们获得以下结果 −
Query OK, 0 rows affected (0.13 sec)
以下查询将从用户那里撤销角色 −
REVOKE 'TestRole_ReadOnly' FROM 'newuser'@'localhost';
执行上面的代码后,我们得到以下输出: -
Query OK, 0 rows affected (1.23 sec)