一、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数据控制语言的资料请关注代码网其它相关文章!
发表评论