MySQL DCL数据控制语言的完整教程
一、SQL 语言分为四大类:
- DDL(数据定义):库、表结构操作
CREATE/DROP/ALTER - DML(数据操纵):表里增删改查
INSERT/DELETE/UPDATE/SELECT - DQL(数据查询):
SELECT查询语句 - DCL(Data Control Language 数据控制语言) 专门用来管理数据库用户、分配回收访问权限,核心指令:
CREATE USER、DROP USER、GRANT、REVOKE、SET PASSWORD、FLUSH PRIVILEGES。
日常开发、运维、数据库安全隔离都离不开 DCL:不同业务账号分配最小权限,避免删库、泄露数据风险。
二、24. DCL 用户管理(创建 / 修改 / 删除 / 查看用户)
MySQL 用户完整格式:用户名@访问主机
root@localhost:仅本机登录user@%:任意 IP 远程登录user@192.168.1.%:指定网段访问
1. 查看所有用户
用户信息存储在系统库 mysql 的 user 表
USE mysql; SELECT user, host FROM user;
2. 创建新用户
语法:
CREATE USER '用户名'@'主机' IDENTIFIED BY '密码';
示例:
-- 仅本地登录 CREATE USER 'dev'@'localhost' IDENTIFIED BY 'Dev@123456'; -- 任意远程地址登录 CREATE USER 'test'@'%' IDENTIFIED BY 'Test@654321';
3. 修改用户密码
方式 1:SET PASSWORD(推荐)
SET PASSWORD FOR 'dev'@'localhost' = PASSWORD('NewDev@789');方式 2:ALTER USER(MySQL5.7+/8.0 + 标准)
ALTER USER 'dev'@'localhost' IDENTIFIED BY 'NewPass123';
4. 修改用户允许访问的主机
UPDATE mysql.user SET host = '%' WHERE user = 'dev'; FLUSH PRIVILEGES; -- 刷新权限生效
5. 删除用户
DROP USER IF EXISTS 'test'@'%';
三、25. DCL 权限控制(授予 / 回收 / 查看权限)
1. 常用数据库权限
权限名 | 作用 |
SELECT | 查询表数据 |
INSERT | 插入数据 |
UPDATE | 更新数据 |
DELETE | 删除数据 |
CREATE | 创建库 / 表 |
DROP | 删除库 / 表 |
ALTER | 修改表结构 |
ALL PRIVILEGES | 全部权限(除 GRANT 授权权限) |
2. GRANT 授予权限
语法:
DROP USER IF EXISTS 'test'@'%';
场景 1:给 dev 用户分配 test_db 下所有表查询、新增权限
GRANT SELECT,INSERT ON test_db.* TO 'dev'@'localhost';
场景 2:分配全库所有权限(运维账号慎用)
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%';
授权后刷新生效
FLUSH PRIVILEGES;
3. 查看用户已有权限
SHOW GRANTS FOR 'dev'@'localhost';
4. REVOKE 回收权限
回收已分配的指定权限:
REVOKE INSERT ON test_db.* FROM 'dev'@'localhost'; FLUSH PRIVILEGES;
回收全部权限:
REVOKE ALL PRIVILEGES ON *.* FROM 'admin'@'%';
权限最小化原则
生产环境禁止给业务账号 ALL PRIVILEGES,只分配业务必需的 SELECT/INSERT/UPDATE,不授予 DROP/ALTER 高危权限,防止误操作破坏数据。
四、26. DCL 完整知识点小结
1. DCL 核心作用
管控数据库登录账号与访问权限,保障数据库数据安全,实现多账号权限隔离。
2. 用户管理核心命令
- 查询用户:
SELECT user,host FROM mysql.user - 创建用户:
CREATE USER 用户名@主机 IDENTIFIED BY 密码 - 修改密码:
ALTER USER / SET PASSWORD - 删除用户:
DROP USER
3. 权限控制核心命令
- 授权:
GRANT 权限 ON 库.表 TO 用户 - 回收权限:
REVOKE 权限 ON 库.表 FROM 用户 - 查看权限:
SHOW GRANTS FOR 用户 - 刷新权限:
FLUSH PRIVILEGES(修改用户 / 权限后必须执行)
4. 生产最佳实践
- 区分账号:管理员 root、运维账号、业务读写账号,各司其职;
- 限制访问主机:业务账号限定应用服务器 IP,禁止
%全开放远程; - 最小权限分配:不给业务账号删表、删库、修改结构权限;
- 定期清理闲置用户,定期轮换账号密码。
5. 易踩坑点
- 创建用户、授权时用户名 + 主机必须完全匹配,否则不生效;
- 修改用户表、权限表后忘记执行
FLUSH PRIVILEGES,变更不生效; - 弱密码账号直接对外开放远程访问,存在数据库泄露风险;
- 开发环境随意使用
ALL PRIVILEGES,直接复制到生产环境。
结尾
DCL 是数据库安全的基础,不管后端开发还是运维都必须熟练掌握。合理划分用户、精细控制权限,能极大降低删库、数据泄露等线上事故概率。下一章我们可以结合真实业务场景,演示一套完整的生产账号权限分配脚本。
以上就是MySQL DCL数据控制语言的完整教程的详细内容,更多关于MySQL DCL数据控制语言的资料请关注脚本之家其它相关文章!
相关文章
window10下mysql 8.0.20 安装配置方法图文教程
这篇文章主要为大家详细介绍了window10下mysql 8.0.20 安装配置方法图文教程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2020-05-05
SELECT INTO 和 INSERT INTO SELECT 两种表复制语句简单介绍
Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少2012-11-11
Mysql数据库中的子查询、标量子查询、行子查询、列子查询及表子查询实例代码
MySQL的子查询功能强大,能够在许多复杂查询中帮助我们提取数据,下面这篇文章主要介绍了Mysql数据库中子查询、标量子查询、行子查询、列子查询及表子查询的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下2026-04-04
mysql中inner join和left join使用详解
本文主要介绍了mysql中inner join和left join使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-03-03


最新评论