在MySQL生产环境中,直接使用root账户存在安全风险,应创建和管理普通用户。用户信息存储于mysql系统库,可通过SQL语句查看、创建、删除用户及修改密码。权限体系分为全局、数据库、表、列等级别,使用GRANT和REVOKE语句进行授权与回收。掌握精细化的权限管理是保障数据库安全与实现职责分离的关键。
SQL用户管理与权限详解
时间:2026-05-23
浏览:551
文章目录
许多开发者在学习MySQL时,习惯于直接使用root账户进行所有操作。这种方式虽然便捷,但在实际生产环境中,出于安全管控和职责分离的要求,管理员通常不会将root权限直接赋予普通开发者。因此,尽早熟悉并掌握普通用户的创建与管理流程,是走向专业数据库管理的关键一步。
MySQL用户管理基础操作
管理用户的第一步是了解如何查看现有用户信息,随后才能进行创建、删除等操作。
查看MySQL现有用户信息
use mysql;
select host,user,authentication_string from user;
执行以上两条指令即可查看用户信息。需要先切换到mysql数据库,因为MySQL将用户、权限等系统信息以数据表形式存储在该系统库中。
典型的查询结果示例如下:

图中展示了三个系统默认用户:
root@localhost:MySQL超级管理员,拥有全部权限,是日常管理的主账号。mysql.session@localhost:MySQL内部服务进程专用账号,用于系统通信,无法手动登录。mysql.sys@localhost:MySQL 5.7及以上版本引入,用于管理sys系统视图库,同样为内部专用账号。
各关键字段含义如下:
- host:允许登录的主机地址。
localhost表示仅限本机登录。 - user:用户名。
- authentication_string:用户密码加密后的密文。
- *_priv:一系列以
_priv结尾的字段,代表用户拥有的具体权限。
创建新的MySQL用户
create user '用户名'@'登陆主机/ip' identified by '密码';
使用此语句即可创建新用户。通常由root账户执行,但任何拥有CREATE USER权限的普通用户也可操作。
创建示例如下:

重要提示:root创建的新用户默认没有任何操作权限,无法查询数据或创建表,需后续单独授权。
@'登陆主机/ip'部分决定了登录范围:
@'localhost':仅允许从数据库服务器本机登录。@'192.168.1.100':允许从指定IP地址的主机登录。@'%':允许从任何主机登录(需谨慎使用)。
删除MySQL用户
drop user '用户名'@'主机名';
删除用户操作直接明了。执行上述命令即可删除指定主机上的对应用户,无需验证被删用户密码。

修改MySQL用户登录密码
密码修改分为两种情况:用户自行修改和管理员修改他人密码。
用户自行修改密码:
set password=password('新的密码');
执行此操作前,需先登录到该用户的会话中。
root用户修改其他用户密码:
set password for '用户名'@'主机名'=password('新的密码');
管理员可直接指定要修改密码的用户,无需登录其账号。
MySQL权限管理体系详解
权限是MySQL访问控制的核心。无论是查看数据、创建表还是管理用户,每项操作都需要对应权限。MySQL权限体系精细,主要分为以下几类:
全局权限(作用于所有数据库)
此类权限记录在mysql.user表中,授权时使用ON *.*指定。常见权限包括:
- ALL PRIVILEGES:除授权权限(GRANT OPTION)外的所有权限(若加上WITH GRANT OPTION则包含)。
- CREATE USER / DROP USER:创建/删除用户。
- SUPER:超级权限,如终止进程、修改全局变量。
- SHOW DATABASES:查看所有数据库列表。
- FILE:读写服务器本地文件。
数据库权限(作用于指定数据库)
记录在mysql.db表中,授权时使用ON 数据库名.*。这是最常用的权限级别,包括:
- CREATE / DROP / ALTER:创建/删除/修改数据库或表。
- SELECT / INSERT / UPDATE / DELETE:对表数据的增删改查。
- INDEX:创建/删除索引。
- EXECUTE:执行存储过程。
表权限(作用于指定表)
记录在mysql.tables_priv表中,授权时使用ON 数据库名.表名,可精确控制到单张表。
列权限(作用于表中指定列)
最细粒度的控制,记录在mysql.columns_priv表中,授权时需指定列名,如ON 库.表 (列1,列2),仅支持SELECT, INSERT, UPDATE操作。
存储对象权限
主要针对存储过程、函数和视图,例如EXECUTE(执行)、ALTER ROUTINE(修改)等。
为用户授予MySQL权限
授权使用GRANT语句,基本语法灵活:
-- 授予用户修改所有表的权限 GRANT ALTER ON *.* TO '用户名'@'登录位置'; -- 授予用户对某个库下所有对象的全部权限 grant all [privileges] on 库名.* to '用户名'@'登陆位置' [identified by '密码']; -- 授予用户对某个库下对象的特定权限列表 grant 权限列表 on 库名.对象名 to '用户名'@'登陆位置' [identified by '密码'];
说明:
identified by '密码'为可选项。用户存在时,授权同时修改其密码;用户不存在时,则先创建用户再授权。对象名可以是*(所有对象)、表名或视图名等。
回收MySQL用户权限
与授权对应,使用REVOKE语句可撤销已授予的权限。
revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置';
权限管理至关重要。合理的授权保障团队协作与数据安全,过度授权或权责不清则可能带来风险。熟练掌握用户与权限管理,是每位数据库使用者从“学习者”进阶为“管理者”的必经之路。
实用工具推荐
绿化、压缩、噪点和虚拟水印,自由调节做旧程度。
选择画质和输出格式,预览压缩前后的大小。