一、授权语句的基本概念与准备
1.1 授权的对象与粒度
在 MySQL 中,授权语句用于控制谁可以访问哪些数据库对象以及能执行哪些操作。授权对象限定了权限的作用范围,从全局到数据库、表、甚至列级,都有对应的粒度。理解这一点对安全性至关重要。
常见的对象级别包括 全局权限(*.*)、数据库权限(db.*)、表权限(db.table),以及列级权限等。通过合理组合,可以实现最小权限原则,降低被滥用的风险。
1.2 常见权限类型与管理要点
常用权限包括 SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、EXECUTE、ALTER、INDEX 等。掌握这些权限的组合方式,是实现复杂访问控制的基础。
二、GRANT语句的基本语法与实战要点
2.1 基本语法结构
GRANT 语句的核心是把权限赋予给一个用户并绑定到一个主机地址。语法的核心要素是权限集合、对象、用户与主机,以及可选的 WITH GRANT OPTION。
典型结构为:GRANT 权限 ON 对象 TO '用户名'@'主机' [IDENTIFIED BY '密码'] [WITH GRANT OPTION];。其中对象可以是数据库、表,甚至是 ALL PRIVILEGES。
GRANT ALL PRIVILEGES ON ecommerce.* TO 'shopper'@'localhost' IDENTIFIED BY 'S3cur3P@ss';
在实际操作中,若目标用户尚不存在,GRANT 语句会创建用户并设置初始密码,随后的权限可以再通过 REVOKE 或 GRANT 进行调整。
2.2 常见场景示例
对特定数据库的完全访问可以用 GRANT ALL PRIVILEGES ON database.* 的形式授权,随后可以搭配 WITH GRANT OPTION 赋予分发权限的能力。
GRANT ALL PRIVILEGES ON ecommerce.* TO 'shopper'@'%' WITH GRANT OPTION;
对单一表的最小权限示例:GRANT SELECT, UPDATE ON ecommerce.orders TO 'analyst'@'172.16.0.10';
GRANT SELECT, UPDATE ON ecommerce.orders TO 'analyst'@'172.16.0.10';
三、REVOKE的用法与撤销策略
3.1 基本撤销语法
REVOKE 用于移除已授予的权限。撤销的作用对象须与 Gran 成功时的对象保持一致,否则不会产生效果。
典型结构为:REVOKE 权限 ON 对象 FROM '用户名'@'主机';,若要撤销包含 WITH GRANT OPTION 的权限,也要单独处理。
REVOKE ALL PRIVILEGES ON ecommerce.* FROM 'shopper'@'%';
3.2 撤销后的验证与整理
撤销权限后应及时检查实际权限,SHOW GRANTS FOR '用户名'@'主机' 可以查看当前分配的权限集合。
SHOW GRANTS FOR 'shopper'@'%';
如需进一步收回通过 WITH GRANT OPTION 产生的授权,需执行 REVOKE GRANT OPTION FOR ... 的操作。
REVOKE GRANT OPTION FOR ALL ON ecommerce.* FROM 'shopper'@'%';
四、从GRANT到REVOKE的完整实战演练
4.1 场景设定与准备
目标是创建一个数据库级别的用户,并给出合适的权限以进行日常查询与写入。同时学习如何在需要时撤销权限,确保最小权限策略落地。
在开始前,推荐先用 SHOW DATABASES、SHOW GRANTS 来了解当前默认权限结构,避免误操作。
4.2 实操步骤:创建用户并授权
第一步,创建用户并设置初始密码;第二步,对目标数据库赋予必要权限;第三步,验证权限。
-- 第一步:创建用户并设定密码
CREATE USER IF NOT EXISTS 'datareader'@'localhost' IDENTIFIED BY 'ReadOnly123';
-- 第二步:授权对 ecommerce 数据库的查询权限
GRANT SELECT, SHOW VIEW ON ecommerce.* TO 'datareader'@'localhost';
-- 第三步:验证授权
SHOW GRANTS FOR 'datareader'@'localhost';
注意:在某些版本中可以直接使用 ALTER USER 设置密码,或通过 CREATE USER 统一管理用户信息。
4.3 实操步骤:扩大权限并测试可授权性
在需要时,可以增加对写操作和视图的权限,并通过 WITH GRANT OPTION 让该用户也能授权他人。
GRANT SELECT, INSERT, UPDATE ON ecommerce.* TO 'datareader'@'localhost' WITH GRANT OPTION;
SHOW GRANTS FOR 'datareader'@'localhost';
当不再需要时,及时撤销不必要的权限,确保风险降到最低。
4.4 实操步骤:撤销权限与持续审计
撤销某些操作权限,并观察系统行为,确保数据完整性与安全性。
REVOKE INSERT, UPDATE ON ecommerce.* FROM 'datareader'@'localhost';
SHOW GRANTS FOR 'datareader'@'localhost';
最后,若需要彻底清理访问,可以删除用户记录或执行 DROP USER 操作。
DROP USER IF EXISTS 'datareader'@'localhost';


