首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【MySQL】用户和权限管理

【MySQL】用户和权限管理

原创
作者头像
lirendada
发布2026-05-10 09:42:46
发布2026-05-10 09:42:46
120
举报
文章被收录于专栏:MySQLMySQL

查看用户

MySQL 中的用户都存储在系统数据库 mysqluser 表中,如下所示:

代码语言:javascript
复制
select host,user,authentication_string from user;

创建用户

代码语言:javascript
复制
create user [if not exists] '用户名'@'主机名' identified by '密码';

可能实际在设置密码的时候,因为 mysql 本身的认证等级比较高,一些简单的密码无法设置,会爆出如下报错:ERROR 1819 (HY000): Your password does not satisfy the current policyrequirements 解决方案:https://blog.csdn.net/zhanaolu4821/article/details/93622812 查看密码设置相关要求:show variables like 'validate_password%';

注意事项:

  • 如果不指定【主机名】,则相当于 'user_name'@'%'% 表示所有主机都可以连接到数据库,但是强烈建议不要这样设置,因为会导致严重的安全问题。
  • 【主机名】可以通过子网掩码设置主机范围
    • 198.0.0.0/255.0.0.0:表示 A 段网络中的任意一台主机
    • 198.51.0.0/255.255.0.0:198.51:表示 B 段网络中的任意一台主机
    • 198.51.100.0/255.255.255.0:198.51.100:表示 C 段网络中的任意一台主机
    • 198.51.100.1:只包含特定 IP 地址的主机
  • MySQL8.0.23 开始,指定为 IPv4 地址的主机值可以使用 CIDR 表示法写入,例如 198.51.100.44/24
  • 允许在 IP 地址中使用 % 通配符,比如主机值 % 匹配任何主机名,198.51.100.% 匹配 198.51.100 表示 C 段网络中的任何主机。但是 MySQL8.0.35 中已弃用,以后可能会删除。

修改密码

代码语言:javascript
复制
# root使用的指令
alter user '用户名'@'主机名' identified BY '新密码';

# 普通用户使用的指令
set password = password('新密码');

删除用户

代码语言:javascript
复制
drop user '用户名'@'主机名';

MySQL 内置权限

下图是 MySQL 内置支持的权限列表:

查看用户现有权限

代码语言:javascript
复制
show grants for '用户名'@'主机名';
或
select * from information_schema.USER_PRIVILEGES where GRANTEE = "'用户名'@'主机名'";

授予权限

代码语言:javascript
复制
grant 权限类型 on 权限层级 to '用户名'@'主机名' [WITH GRANT OPTION];
  • 权限类型:指要授予的具体权限,比如 SELECT(查询)、INSERT(插入)、UPDATE(更新)、DELETE(删除)等,也可以是 ALL PRIVILEGES(所有权限)。
  • ON 权限层级:指定权限的作用范围,可以是:
    • 数据库级别:database.*,表示对指定数据库的所有表。
    • 表级别:database.table,表示对指定数据库中的特定表。
    • 列级别:database.table(column),表示对指定表的特定列。
  • TO '用户名'@'主机名'
    • '用户名':指定要授予权限的用户。
    • '主机名':指定用户可以从哪些主机连接到数据库。可以是具体的主机名(如localhost)、IP地址(如192.168.1.1),也可以是%(表示任何主机)。
  • [WITH GRANT OPTION](可选部分):
    • 如果加上WITH GRANT OPTION,表示被授权的用户不仅可以使用这些权限,还可以将这些权限授予其他用户。

权限名称

描述

SELECT

允许用户从表中检索数据

INSERT

允许用户向表中插入数据

UPDATE

允许用户更新表中的数据

DELETE

允许用户删除表中的数据

CREATE

允许用户创建新的数据库、表、视图等

DROP

允许用户删除数据库、表、视图等

ALTER

允许用户修改表的结构,如添加、删除或修改列

INDEX

允许用户创建或删除索引

ALTER ROUTINE

允许用户修改存储过程或函数

CREATE ROUTINE

允许用户创建存储过程或函数

EXECUTE

允许用户执行存储过程或函数

FILE

允许用户读取或写入服务器上的文件

GRANT OPTION

允许用户将自己拥有的权限授予其他用户

REFERENCES

允许用户创建外键约束

RELOAD

允许用户重新加载MySQL服务器的配置文件

SHUTDOWN

允许用户关闭MySQL服务器

PROCESS

允许用户查看当前运行的线程和查询

SUPER

允许用户执行一些高级操作,如杀死线程、更改全局变量等

REPLICATION SLAVE

允许用户从主服务器复制数据

REPLICATION CLIENT

允许用户查看主从复制的配置信息

举个例子:假设有一个数据库叫mydb,一个用户叫user1,主机名是localhost,要授予user1mydb数据库的所有权限,并且允许他将权限授予其他用户,代码如下所示:

代码语言:javascript
复制
GRANT ALL PRIVILEGES ON mydb.* TO 'user1'@'localhost' WITH GRANT OPTION;

回收权限

这里的权限类型和权限层级和上面是一样的!

代码语言:javascript
复制
revoke 权限类型 on 权限层级 from '用户名'@'主机名';

刷新指令

代码语言:javascript
复制
flush privileges;

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 查看用户
  • 创建用户
  • 修改密码
  • 删除用户
  • MySQL 内置权限
  • 查看用户现有权限
  • 授予权限
  • 回收权限
  • 刷新指令
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档