MySQL的权限控制体系通过一系列内置语句实现,能够精细化管控不同用户对不同数据库、不同表甚至不同字段的操作权限,是数据库安全运维的基础能力。合理的权限配置既能满足业务操作需求,又能避免非授权用户篡改或泄露数据。

MySQL权限控制语句分类
MySQL的权限控制语句主要分为用户管理、权限授予、权限回收、权限查询四大类,不同类别的语句对应不同的管理场景,下面逐一介绍各类语句的语法和使用方法。
一、用户管理相关语句
在使用权限控制语句前,首先需要创建对应的数据库用户,或者修改已有用户的基本属性。MySQL 5.7及以上版本推荐使用CREATE USER语句创建用户,避免使用GRANT语句同时创建用户和授予权限的旧方式。
1. 创建用户
基础语法如下:
-- 创建本地登录用户,设置密码 CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'Test@123456'; -- 创建允许任意IP登录的用户 CREATE USER 'remote_user'@'%' IDENTIFIED BY 'Remote@123456';
其中'test_user'@'localhost'表示用户名为test_user,仅允许从localhost登录,%是通配符,代表允许从任意IP地址登录。
2. 修改用户密码
修改密码可以使用ALTER USER语句:
-- 修改指定用户的密码 ALTER USER 'test_user'@'localhost' IDENTIFIED BY 'New_Test@123456';
3. 删除用户
删除不再使用的用户可以使用DROP USER语句:
-- 删除指定用户 DROP USER 'remote_user'@'%';
二、权限授予语句GRANT
GRANT是MySQL中用于授予用户权限的核心语句,支持授予全局权限、数据库级权限、表级权限、字段级权限等不同粒度的权限。
1. 基础语法
通用语法格式为:
GRANT 权限类型 ON 权限作用范围 TO '用户名'@'主机' [WITH GRANT OPTION];
其中WITH GRANT OPTION是可选参数,加上该参数后,被授权的用户可以将自己拥有的权限再授予其他用户,一般不建议普通用户拥有该权限。
2. 不同粒度的权限授予示例
- 授予全局所有权限:
-- 授予用户所有数据库的所有操作权限,仅建议管理员使用 GRANT ALL PRIVILEGES ON *.* TO 'admin_user'@'localhost' WITH GRANT OPTION;
- 授予指定数据库的所有权限:
-- 授予用户对test_db数据库的所有操作权限 GRANT ALL PRIVILEGES ON test_db.* TO 'test_user'@'localhost';
- 授予指定表的查询和插入权限:
-- 授予用户对test_db库下user表的SELECT和INSERT权限 GRANT SELECT, INSERT ON test_db.user TO 'test_user'@'localhost';
- 授予指定字段的查询权限:
-- 授予用户对test_db.user表的id和name字段的查询权限 GRANT SELECT(id, name) ON test_db.user TO 'test_user'@'localhost';
三、权限回收语句REVOKE
当用户的职责发生变更,或者不再需要某些权限时,需要使用REVOKE语句回收对应权限,避免权限冗余带来的安全风险。
1. 基础语法
通用语法格式为:
REVOKE 权限类型 ON 权限作用范围 FROM '用户名'@'主机';
2. 回收权限示例
- 回收用户的插入权限:
-- 回收test_user对test_db.user表的INSERT权限 REVOKE INSERT ON test_db.user FROM 'test_user'@'localhost';
- 回收用户的所有权限:
-- 回收test_user的所有权限 REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'test_user'@'localhost';
注意回收权限后,需要执行FLUSH PRIVILEGES;语句让权限变更立即生效,部分MySQL版本会自动生效,但手动执行一遍可以保证权限更新。
四、权限查询语句
如果需要查看某个用户当前拥有的权限,可以使用SHOW GRANTS语句:
-- 查看指定用户的权限 SHOW GRANTS FOR 'test_user'@'localhost';
执行后会返回该用户被授予的所有权限语句,方便管理员核对权限配置是否符合预期。
权限控制语句使用注意事项
- 遵循最小权限原则,仅授予用户完成工作必需的最低权限,避免授予ALL PRIVILEGES给普通业务用户。
- 主机地址尽量指定具体IP或者IP段,避免使用
%允许任意IP登录,降低被暴力破解的风险。 - 回收权限后务必执行
FLUSH PRIVILEGES;语句,确保权限变更生效。 - 不要随意给普通用户授予
WITH GRANT OPTION权限,防止权限被扩散。
| 语句类型 | 核心语句 | 主要作用 |
|---|---|---|
| 用户管理 | CREATE USER、ALTER USER、DROP USER | 创建、修改、删除数据库用户 |
| 权限授予 | GRANT | 给用户授予不同粒度的操作权限 |
| 权限回收 | REVOKE | 回收用户已有的多余权限 |
| 权限查询 | SHOW GRANTS | 查看用户当前拥有的所有权限 |