MySQL 指南:全面掌握用户管理与权限控制

在数据库管理中,安全性是重中之重。直接使用 root 用户操作生产环境数据库是极大的安全隐患。因此,学会如何创建普通用户、分配最小必要权限,是每一位后端开发和 DBA 的必修课。

本文将带你系统地梳理 MySQL 的用户管理体系。

目录 (Table of Contents)

1.用户管理

1.1用户信息

1.2用户创建

1.3删除用户

1.4修改密码

2.数据库的权限

2.1给用户授权

3.总结


1.用户管理

MySQL的用户账号和信息都储存再系统数据库mysql的user表中,我们对用户管理的本质上实际是对这个表进行操作,但是官方推荐使用专用的SQL指令(如 CREATER USER)而非直接修改表数据,以确保数据的一致性。

1.1用户信息

要查看数据库中有哪些用户,以及他们允许登录的主机,我们需要查询myslq的user表。

核心的字段说明

  • User: 用户名。

  • Host: 允许登录的主机地址。

    • localhost: 仅允许本地登录。

    • %: 通配符,允许从任意远程主机登录(生产环境慎用)。

    • 192.168.1.%: 允许该网段登录。

这里我们可以对USER表直接进行查询,其中包括了用户名以及用户权限的一大批属性。

也可以直查询需要的信息,比如:

USE mysql;

SELECT User, Host FROM user;

1.2用户创建

创建用户的时候需要显示指定用户名,允许用户登录的主机以及用户密码。

基本语法:

CREATE USER 'username'@'host' IDENTIFIED BY 'password';

实战示例:

创建本地开发用户(只能在服务器本机登录):

创建远端登录用户(允许任意IP链接,实际生产环境不推荐)

查user表两个用户都已经创建成功了

用刚创建的用户进行登录:

1.3删除用户

当某个用户不需要的时候就可以删除了

基本语法:

DROP USER 'username'@'host';

1.4修改密码

出于安全策略(如定期轮换密码)或密码泄露风险,我们需要修改用户密码。在 MySQL 5.7 和 8.0+ 版本中,推荐使用 ALTER USER 命令。

基本语法:

ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';

修改当前用户登录的密码:

root修改用户密码:

2.数据库的权限

在数据库中某一个用户登录了mysql不代表着他能访问所有数据了,还需要root赋予他相应的权限才可以对数据库以及表做出相关操作,以下是MySQL数据库提高的权限列表:

刚创建的用户是没有任何权限的,需要root用户授权,否则它什么也干不了

2.1给用户授权

授权使用 GRANT 语句。你可以控制用户能访问哪些库、哪些表,甚至哪些列。

基本语法:

GRANT 权限列表 ON 数据库名.表名 TO 'username'@'host';

常用权限类型:

  • ALL PRIVILEGES: 所有权限(除 GRANT OPTION 外)。

  • SELECT, INSERT, UPDATE, DELETE: 数据操作权限。

  • CREATE, DROP, ALTER: 结构操作权限。

权限列表如果有多个权限需要用逗号分隔开。

1.授予只读权限 (适用于报表系统或分析员):

2.授予管理员权限(管理特定数据库),当前只有查看权限无法对数据库中的表做增删改的功能。

可以使用语法:

GRANT ALL PRIVILEGES ON test2.* TO 'toutie'@'localhost';

3.刷新权限:

虽然现代版 MySQL 在 GRANT 后通常立即生效,但习惯上我们会执行以下命令确保权限刷新到内存:

FLUSH PRIVILEGES;

2.2回收权限

如果某个用户权限过大,或者在业务需要调整,我们需要回收部分或者全部权限。可以使用REVOKE语句。

查看当前权限: 在回收之前,最好先看看用户当前有什么权限:

SHOW GRANTS FOR 'username'@'host'

回收权限语法:

REVOKE 权限列表 ON 数据库名.表名 FROM 'username'@'host';

3.总结

做好 MySQL 的用户管理是保障数据安全的第一道防线。请务必记住以下原则:

  • 严禁 在代码中硬编码 root 账号。

  • 区分 localhost 和 %,尽量限制特定 IP 访问。

  • 遵循最小权限原则 ,够用即可,不要滥用 ALL PRIVILEGES。

相关推荐
这个DBA有点耶21 分钟前
MySQL字符集与排序规则深入:索引失效的隐蔽场景与排查方法
数据库·mysql·代码规范
zl_dfq22 分钟前
Redis 之 【持久化 与 事务】
数据库·redis
闲云自留地1 小时前
从下载到登录:MySQL 在两大系统上的完整安装教程
数据库·mysql
SelectDB技术团队1 小时前
Apache Doris 高性能 Open Lake Variant 读写技术解析(含对比数据)
数据结构·数据库·clickhouse·日志·apache doris·selectdb·湖仓架构升级
一 乐2 小时前
博客管理系统|基于springboot + vue博客管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·毕设
茉莉玫瑰花茶2 小时前
GO [ 类型 ]
开发语言·数据库·golang
ClouGence2 小时前
开源数据库管理工具 CloudDM 4.3.0 发布,支持 SQL 收藏,多数据源语法支持大幅增强
数据库·oracle·sql server
Summer-Bright3 小时前
深度 | 壁仞1.74亿中标智算中心:国产GPU从能用跨进商用,但4.5亿的大单却因凑不齐三家废标了
数据库·ai·国产gpu
云安全助手3 小时前
自建接入VS聚合平台:企业 AI 调用的选型思路与迁移成本拆解
java·大数据·数据库·人工智能·ai大模型
白露与泡影3 小时前
Redis 的“单线程”与“多线程”:一场关于性能与简洁的权衡
数据库·redis·php