`GRANT` 语句用于为用户授予特定权限,是 MySQL 权限管理的核心命令。

基本语法

GRANT priv_type [(column_list)] 
    ON [object_type] privilege_level 
    TO user [IDENTIFIED BY 'password']
    [, user [IDENTIFIED BY 'password']] ...
    [WITH with_option ...]

 

核心参数详解

1. 权限级别 (Privilege Levels)

 格式  说明  示例

 `*.*`  所有数据库的所有表  `GRANT SELECT ON *.* TO 'user'@'%'`

 `database.*`  指定数据库的所有表  `GRANT ALL ON mydb.* TO 'user'@'localhost'`

 `database.table`  指定数据库的指定表  `GRANT INSERT ON mydb.users TO 'user'@'%'`

 `*`  当前数据库的所有表  `USE mydb; GRANT SELECT ON * TO 'user'@'%'`

 

2. 常用权限类型

 

权限说明级别
SELECT查询数据全局、数据库、表、列
INSERT插入数据全局、数据库、表、列
UPDATE更新数据全局、数据库、表、列
DELETE删除数据全局、数据库、表
CREATE创建数据库/表全局、数据库
DROP删除数据库/表全局、数据库
ALTER修改表结构全局、数据库、表
ALL PRIVILEGES所有权限(除GRANT外)所有级别
GRANT OPTION授予权限的权限所有级别


3. WITH 选项

选项说明
GRANT OPTION允许用户将自己权限授予他人
MAX_QUERIES_PER_HOUR count每小时最大查询次数
MAX_UPDATES_PER_HOUR count每小时最大更新次数
MAX_CONNECTIONS_PER_HOUR count每小时最大连接数
MAX_USER_CONNECTIONS count用户最大同时连接数


实用示例

示例 1:创建用户并授予基本权限

 创建用户并授予所有数据库的查询、插入权限

GRANT SELECT, INSERT ON *.* 
    TO 'testUser'@'localhost' 
    IDENTIFIED BY 'testPwd' 
    WITH GRANT OPTION;

示例 2:授予特定数据库权限

 授予用户对mydb数据库的所有权限

GRANT ALL PRIVILEGES ON mydb.* 
    TO 'app_user'@'%' 
    IDENTIFIED BY 'secure_password';

示例 3:授予特定表权限

 只允许用户访问特定的表

GRANT SELECT, INSERT, UPDATE ON mydb.users 
    TO 'report_user'@'192.168.1.%';

 

示例 4:授予列级权限

 只允许更新特定列

GRANT UPDATE (name, email) ON mydb.users 
    TO 'support_user'@'localhost';

示例 5:带限制的权限

 限制用户每小时最多1000次查询

GRANT SELECT ON mydb.* 
    TO 'readonly_user'@'%' 
    WITH MAX_QUERIES_PER_HOUR 1000;

权限验证

使用 `SHOW GRANTS` 查看授予的权限:

 查看当前用户权限

SHOW GRANTS;

 查看特定用户权限

SHOW GRANTS FOR 'testUser'@'localhost';

 

最佳实践和安全建议

1. 最小权限原则:只授予用户完成工作所必需的最小权限

2. 避免使用超级权限:不要轻易授予 `ALL PRIVILEGES` 或 `SUPER` 权限

3. 限制主机访问:使用具体的主机名或IP段,避免使用 `'%'`

4. 定期审计权限:使用 `SHOW GRANTS` 定期检查用户权限

5. 使用强密码:总是为用户设置强密码

6. 及时回收权限:使用 `REVOKE` 语句移除不再需要的权限

 回收权限示例

REVOKE INSERT ON *.* FROM 'testUser'@'localhost';

 

注意事项

1. 自动创建用户:如果用户不存在,`GRANT` 语句会自动创建用户(MySQL 5.7+ 此行为取决于配置)

2. 权限生效:权限更改立即生效,无需重启服务

3. 权限层级:权限具有层级关系,高级别权限会覆盖低级别权限

4. 密码安全:使用 `IDENTIFIED BY` 时会以明文传输密码,建议使用加密连接

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)