用户权限管理,把好数据库的第一道门

本文涉及的产品
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
云数据库 PolarDB MySQL 版,列存表分析加速 4核8GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 数据库小学妹带你轻松掌握MySQL权限管理!通过创建用户、授/回收权限(GRANT/REVOKE)、设置安全边界(localhost/%/IP段)和最小权限原则,实现角色分离与事前防护。牢记FLUSH PRIVILEGES刷新生效,告别root滥用,守好数据大门!

📌 今日关键词:权限分配、安全边界、角色管理

大家好呀!我是数据库小学妹👋

前面我们学会了各种数据库操作,但有个问题我一直隐隐担心:

我现在一直用 root 账号连接数据库,什么都能删、什么都能改。万一哪天猫踩键盘把生产数据清空了怎么办?或者同事需要查数据,我该不该把 root 密码告诉他?

数据库早就想到了这个问题——它提供了用户权限管理,就像给不同的人配不同的钥匙:有人只能开门(查数据),有人能开保险柜(删数据),有人只能进仓库(连某个库)。

如果说昨天我们学的​备份是“事后补救”​,那今天要学的​权限管理就是“事前防御”​!接下来我就把自己学会的用户权限管理分享出来,让你也能把好数据库的大门。

一、为什么必须学会权限管理?

1️⃣ 明确边界,防止“乱入”

  • 保护敏感数据: 比如用户密码、财务信息等,不能随便让人看。
  • 避免误操作: 限制普通用户的权限,防止“手滑”删表、改数据。
  • 职责分离: 开发、测试、运维各司其职,不同角色权限不同,减少风险。

2️⃣ 权限 = 数据库的“门禁卡”

通过精细化的权限分配,我们可以决定:

  • 谁(用户/角色)能访问数据库。
  • 能访问哪些数据库或表。
  • 能做什么(查询、插入、修改、删除等操作)。

🛠️ 新手必会:权限管理实操(MySQL命令)

权限管理核心命令只有几个,但组合起来非常灵活!就像给数据库“发门禁卡” 🆔。

二、用户管理:创建、修改、删除

1. 查看当前所有用户

SELECT user, host FROM mysql.user;

host 表示允许从哪个IP连接:localhost 只能本机,% 表示任意IP。

2. 创建用户

CREATE USER '用户名'@'主机' IDENTIFIED BY '密码';

示例​:

-- 允许本地连接
CREATE USER 'xiaomei'@'localhost' IDENTIFIED BY '123456';

-- 允许任意IP连接(生产环境慎用)
CREATE USER 'xiaomei'@'%' IDENTIFIED BY '123456';

-- 允许指定IP段
CREATE USER 'xiaomei'@'192.168.1.%' IDENTIFIED BY '123456';

3. 修改密码

-- 方法1:用 ALTER USER(推荐)
ALTER USER 'xiaomei'@'localhost' IDENTIFIED BY 'newpass';

-- 方法2:用 SET PASSWORD(老语法)
SET PASSWORD FOR 'xiaomei'@'localhost' = 'newpass';

4. 删除用户

DROP USER 'xiaomei'@'localhost';

三、权限管理:授予、查看、回收

1. 授予权限(GRANT)

GRANT 权限列表 ON 数据库.表 TO '用户名'@'主机';

常见权限​:

权限 作用
ALL PRIVILEGES 所有权限(除GRANT OPTION外)
SELECT 查询数据
INSERT 插入数据
UPDATE 更新数据
DELETE 删除数据
CREATE 创建表/库
DROP 删除表/库
INDEX 创建/删除索引
EXECUTE 执行存储过程

实战示例​:

-- 让 xiaomei 只能查 mydb 库里的所有表
GRANT SELECT ON mydb.* TO 'xiaomei'@'localhost';

-- 让 xiaoming 可以查和插入 mydb 里的 orders 表
GRANT SELECT, INSERT ON mydb.orders TO 'xiaoming'@'localhost';

-- 让 xiaoli 拥有 mydb 库的所有权限(但不能给别人授权)
GRANT ALL PRIVILEGES ON mydb.* TO 'xiaoli'@'localhost';

2. 刷新权限(重要!)

修改权限后,执行以下命令让权限立即生效:

FLUSH PRIVILEGES;

3. 查看用户权限

-- 查看当前用户的权限
SHOW GRANTS;

-- 查看指定用户的权限
SHOW GRANTS FOR 'xiaomei'@'localhost';

4. 回收权限(REVOKE)

-- 回收 xiaomei 的 INSERT 权限
REVOKE INSERT ON mydb.* FROM 'xiaomei'@'localhost';

-- 回收所有权限
REVOKE ALL PRIVILEGES ON mydb.* FROM 'xiaomei'@'localhost';

四、权限的生效级别(由粗到细)

级别 写法 说明
全局 *.* 所有数据库的所有表
数据库级 mydb.* 指定数据库的所有表
表级 mydb.orders 指定数据库的指定表
列级 mydb.orders (name, price) 只允许操作某些列(较少用)

💡 ​新手建议​:

  • 优先用数据库级权限,平衡安全性和灵活性。
  • `.*​*\** 代表所有库所有表,慎用!例如GRANT ALL ON *.* TO ...` 是超级权限(类似 root)。
  • 生产环境建议最小权限原则:“给需要的,而不是给所有的”。

五、实战:创建三个不同权限的用户

假设我们有一个电商数据库 shop,包含 usersordersproducts 三张表。

用户 职责 需要的权限
reader 数据分析师 只读所有表
writer 订单录入员 对 orders 表 INSERT、UPDATE
admin 数据库管理员 对 shop 库的所有权限
-- 1. 创建只读用户
CREATE USER 'reader'@'localhost' IDENTIFIED BY 'read123';
GRANT SELECT ON shop.* TO 'reader'@'localhost';

-- 2. 创建订单写入用户
CREATE USER 'writer'@'localhost' IDENTIFIED BY 'write123';
GRANT SELECT, INSERT, UPDATE ON shop.orders TO 'writer'@'localhost';

-- 3. 创建管理员用户(但不能给别人授权)
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin123';
GRANT ALL PRIVILEGES ON shop.* TO 'admin'@'localhost';

FLUSH PRIVILEGES;

之后,每个人用自己的账号登录,就只能做权限范围内的事。

六、新手避坑指南(血泪总结)

常见错误 正确做法
创建用户时没指定host,导致只能从%连接 明确指定'user'@'localhost''user'@'192.168.%'
授权后忘记FLUSH PRIVILEGES 必须刷新,否则权限不生效
给用户授予了ALL PRIVILEGES但没有GRANT OPTION 用户无法给自己或其他用户授权,这是安全的
删用户时没指定 host,可能删错 SHOW GRANTS确认,再用DROP USER 'user'@'host'
生产环境用'user'@'%'允许任意IP连接 只开放必要IP,如'user'@'192.168.1.100'

七、今日学习心得

今天的内容总结成三句话:

  1. 永远不要用root做日常操作​,创建专用用户并只给最小权限
  2. GRANT 和 REVOKE 是权限管理的核心,学会数据库级和表级授权
  3. FLUSH PRIVILEGES 一定要记得,不然改了等于没改

👋 我是数据库小学妹一个用设计师思维学数据库的转行人。我们一起,把复杂的技术变得简单有趣!💕

本文为个人学习总结,所有命令均在MySQL 8.0环境下验证。权限管理是生产环境的第一道防线,一定要重视。

相关文章
|
1月前
|
SQL 关系型数据库 MySQL
数据量大查询慢?索引让你的SQL秒级响应!|转行学DB第9天
用生活化比喻(如字典目录)详解索引原理:它通过B+树结构加速查询,避免全表扫描;涵盖创建、查看、删除索引方法,联合索引的最左前缀原则,以及读写平衡等实战要点——让查询从“等几秒”变“秒出”!
数据量大查询慢?索引让你的SQL秒级响应!|转行学DB第9天
|
1月前
|
SQL NoSQL 关系型数据库
数据库分类一次讲清|转行学DB第2天
数据库小学妹(UI转行萌新)用通俗语言拆解数据库分类:从关系型(MySQL/Oracle)、NoSQL(Redis/MongoDB/Cassandra)、NewSQL(TiDB)到2026年爆火的向量数据库(Pinecone/Milvus),按数据模型、部署架构、业务负载三大维度梳理,配场景化案例与选学路径,助新手轻松入门。
|
2天前
|
SQL 关系型数据库 MySQL
MySQL慢查询诊断实战:从10秒到0.1秒,我的5步排障法
数据库小学妹分享慢查询优化实战:从10秒降至0.08秒!详解「发现→收集→分析→优化→验证」5步排障法,覆盖慢日志配置、EXPLAIN进阶、索引失效场景、JOIN与分页优化等核心技巧,附真实案例与速查表。
|
29天前
|
SQL 人工智能 安全
AI圈开始“养马”了?聊聊龙虾退位、爱马仕登基
AI智能体“龙虾”(OpenClaw)的衰落与“爱马仕”(Hermes Agent)的崛起:前者因API限策与高危漏洞(CVSS 9.9)式微;后者以持久记忆、技能自生成、跨平台互通等实用能力破圈,成技术圈新“拐杖”。但技术无银弹,懂你的工具才是真助力。
|
28天前
|
SQL 关系型数据库 MySQL
SQL优化十大技巧,查询速度提升10倍!
数据库小学妹带你轻松提速SQL!10个实战优化技巧:精简SELECT、善用LIMIT、巧用EXPLAIN、合理建索引、避开函数索引失效、JOIN优于子查询、IN替代OR、批量操作、EXISTS优化大子查询、定期OPTIMIZE。附避坑指南,新手也能秒上手!
|
27天前
|
存储 JSON 缓存
告别数据混乱!数据库设计三范式从入门到实践
数据库小学妹带你轻松入门三范式!用“建房打地基”比喻,讲清1NF(列不可分)、2NF(消除部分依赖)、3NF(消除传递依赖),直击数据冗余、更新异常等痛点。附实战拆表案例与反范式化提醒,助你设计出结构清晰、稳定高效的数据库!
|
1月前
|
SQL 数据库
多表关联查询入门:LEFT JOIN、INNER JOIN一文搞懂|转行学DB第6天
本文通俗易懂地讲解了数据库多表查询的三种JOIN操作:INNER JOIN(内连接)只返回两表匹配的数据,适用于查询交集数据;LEFT JOIN(左连接)保留左表所有记录并匹配右表数据,适用于查询主表完整信息;RIGHT JOIN(右连接)则保留右表所有记录。
|
1月前
|
SQL 关系型数据库 MySQL
主键、外键和约束:让数据库“有规矩”才能不出错!|转行学DB第5天
本文用通俗易懂的语言讲解了主键(数据的唯一标识)、外键(表间关联)以及唯一约束、非空约束等其他常见约束规则。通过具体SQL示例展示了各种约束的使用方法,并分享了新手容易踩的坑和实用建议。
|
1月前
|
SQL 关系型数据库 MySQL
WHERE、ORDER BY、LIMIT三大神器,让你的查询精准又高效!
本文介绍了SQL查询中的三大核心语句:WHERE(条件过滤)、ORDER BY(排序)和LIMIT(限制结果数)。通过电商订单查询、用户活跃度分析等实际案例,展示了如何组合使用这些语句实现精准查询。文章还分享了常见避坑技巧(如字符串引号使用、NULL值判断)和性能优化建议(如索引使用、分页查询优化)。
|
1月前
|
SQL 关系型数据库 MySQL
5款好用的免费MySQL客户端,新手必备!
告别枯燥命令行!数据库小学妹精选5款免费MySQL图形化工具:Workbench(官方全能)、phpMyAdmin(免安装Web版)、DBeaver(多库支持)、HeidiSQL(Windows轻量之选)、TablePlus(高颜值跨平台)。小白友好,语法高亮、自动补全、可视化结构一应俱全,助你高效学SQL!