当前位置: 首页 > news >正文

【MySQL 数据库】MySQL用户管理

请添加图片描述

文章目录

  • 一、用户管理
    • 1.1 关于用户
    • 1.2 创建用户
    • 1.3 修改密码
    • 1.4 删除用户
  • 二、数据库权限
    • 2.1 关于权限
    • 2.2 给用户权限
    • 2.3 移除用户权限
  • 🚩总结


一、用户管理

如果我们只能使用root用户,这样存在安全隐患。这时,就需要使用MySQL的用户管理。
在这里插入图片描述

1.1 关于用户

如果我们只能使用 root 用户,这样存在安全隐患。这时,就需要使用 MySQL 的用户管理 —— 通过创建不同权限的普通用户,分配对应操作范围,既能满足业务需求,又能避免 root 权限泄露导致的风险。
在这里插入图片描述
MYSQL的账号管理以表形式构建管理,刚安装的时候,会默认创建一些库,这里面这个库叫mysql
在这里插入图片描述
库中的一个表叫user表
在这里插入图片描述
该表存储的是MySQL的用户相关信息
在这里插入图片描述
在这里插入图片描述

  • 用户名:用于身份识别,如 “Lihua”“zhs”;
  • 主机名:限制用户的登录来源,常见取值及含义如下:
  • localhost:仅允许从 MySQL 所在服务器本地登录(比如通过服务器终端登录);

%:允许从任意主机登录(包括本地和远程,适合需要远程连接的场景,如开发机连接服务器 MySQL);
具体 IP(如192.168.1.100):仅允许从指定 IP 地址登录(安全性最高,适合固定设备访问)。

1.2 创建用户

创建用户必须通过 root 用户 执行(普通用户无创建权限),完整步骤如下:
步骤 1:登录 root 用户
打开服务器终端或 MySQL 客户端,输入以下指令登录 root(需输入 root 密码):

mysql -u root -p

若登录成功,会进入 MySQL 交互界面(显示 mysql> 提示符)。
步骤 2:执行创建用户指令

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

在这里插入图片描述
步骤 3:验证用户是否创建成功
切换到 MySQL 系统数据库(存储用户信息的核心库),查询user表确认:

-- 切换到mysql系统库
USE mysql;
-- 查询指定用户的信息(用户名和主机名需加引号)
SELECT user, host FROM user WHERE user = 'Lihua' AND host = '%';

在这里插入图片描述
在这里插入图片描述

1.3 修改密码

自己改自己密码

set password=password('新的密码');

root用户修改指定用户的密码

set password for '用户名'@'主机名'=password('新的密码')

是的,在 MySQL 8.0 及之后的版本中,PASSWORD() 函数已被正式移除,且不再推荐使用旧的密码设置方式。这是因为 MySQL 8.0 引入了更安全的默认认证插件(caching_sha2_password),同时对用户密码管理进行了规范化,推荐使用 ALTER USER 语句来修改密码。

MySQL 8.0 及以上版本修改密码的正确方式

  1. root 用户修改自己的密码
-- 方式1:使用 ALTER USER(推荐)
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';-- 方式2:如果当前已登录 root,可简化为
ALTER USER CURRENT_USER() IDENTIFIED BY '新密码';
  1. root 用户修改指定用户的密码
-- 语法:ALTER USER '用户名'@'主机名' IDENTIFIED BY '新密码';
ALTER USER 'testuser'@'localhost' IDENTIFIED BY 'new_password123';

关键说明

  1. 主机名的重要性
    MySQL 用户是由 用户名 + 主机名 共同标识的(例如 'root'@'localhost' 表示只能从本地登录的 root,'root'@'%' 表示可从任意主机登录的 root)。修改时需明确用户对应的主机名(可通过 SELECT user, host FROM mysql.user; 查看)。

  2. 认证插件兼容问题
    如果旧版本用户使用 mysql_native_password 插件,修改密码时可指定插件(可选):

    ALTER USER 'testuser'@'localhost' 
    IDENTIFIED WITH mysql_native_password BY 'new_password';
    
  3. 生效方式
    修改后通常立即生效,若未生效可执行 FLUSH PRIVILEGES; 刷新权限。

为什么移除 PASSWORD() 函数?

  • PASSWORD() 函数生成的密码哈希算法较旧(基于 SHA1),安全性较低。
  • MySQL 8.0 主推更安全的 caching_sha2_password 插件,其密码哈希生成逻辑不依赖 PASSWORD() 函数,因此移除该函数以强制使用更规范的 ALTER USER 语句管理密码。

在这里插入图片描述

1.4 删除用户

在这里插入图片描述
在这里插入图片描述

二、数据库权限

2.1 关于权限

权限上下文
CREATECreate_priv数据库、表或索引
DROPDrop_priv数据库或表
GRANT OPTIONGrant_priv数据库、表或保存的程序
REFERENCESReferences_priv数据库或表
ALTERAlter_priv
DELETEDelete_priv
INDEXIndex_priv
INSERTInsert_priv
SELECTSelect_priv
UPDATEUpdate_priv
CREATE VIEWCreate_view_priv视图
SHOW VIEWShow_view_priv视图
ALTER ROUTINEAlter_routine_priv保存的程序
CREATE ROUTINECreate_routine_priv保存的程序
EXECUTEExecute_priv保存的程序
FILEFile_priv服务器主机上的文件访问
CREATE TEMPORARY TABLESCreate_tmp_table_priv服务器管理
LOCK TABLESLock_tables_priv服务器管理
CREATE USERCreate_user_priv服务器管理
PROCESSProcess_priv服务器管理
RELOADReload_priv服务器管理
REPLICATION CLIENTRepl_client_priv服务器管理
REPLICATION SLAVERepl_slave_priv服务器管理
SHOW DATABASESShow_db_priv服务器管理
SHUTDOWNShutdown_priv服务器管理
SUPERSuper_priv服务器管理

2.2 给用户权限

语法:

 grant 权限列表 on 库.对象名 to '用户名'@'登陆位置' [identified by '密码']

说明:
权限列表,多个权限用逗号分开

 grant select on ...grant select, delete, create on ....grant all [privileges] on ... -- 表示赋予该用户在该对象上的所有权限
  • *.*:代表本系统中的所有数据库的所有对象((表,视图,存储过程等)
  • 库.*:表示某个数据库中的所有数据对象(表,视图,存储过程等)
  • identified by可选。如果用户存在,赋予权限的同时修改密码,如果该用户不存在,就是创建用户

在root用户下创建用户Lihua:
在这里插入图片描述
然后,在root用户下创建一个库,插入一些数据:

mysql> create database rootData;
Query OK, 1 row affected (0.02 sec)mysql> use rootData;
Database changed
mysql> create table user(-> id int primary key,-> name varchar(20) not null-> );
Query OK, 0 rows affected (0.05 sec)mysql> insert into user values(1, '张三');
Query OK, 1 row affected (0.03 sec)mysql> insert into user values(2, '李四');
Query OK, 1 row affected (0.00 sec)

插入数据后,然后我们给Lihua权限
在这里插入图片描述
在这里插入图片描述
这时我们登录Lihua用户
一开始登录授权前:
在这里插入图片描述
在这里插入图片描述

  1. 第一次查询结果(初始状态)
+-----------------------------------+
| Grants for Lihua@%                |
+-----------------------------------+
| GRANT USAGE ON *.* TO `Lihua`@`%` |
+-----------------------------------+
  • GRANT USAGE ON *.*USAGE 是 MySQL 中的一种“默认空权限”,表示该用户可以登录 MySQL 服务器,但没有任何实际操作权限(不能查询、创建、修改任何数据库/表)。
  • ON *.**.* 表示“所有数据库.所有表”,但结合 USAGE 来看,这里仅表示“权限范围覆盖所有库表”,但实际没有权限。
  1. 第二次查询结果(授权后)
    在这里插入图片描述
+-----------------------------------------------------+
| Grants for Lihua@%                                  |
+-----------------------------------------------------+
| GRANT USAGE ON *.* TO `Lihua`@`%`                   |
| GRANT ALL PRIVILEGES ON `rootData`.* TO `Lihua`@`%` |
+-----------------------------------------------------+
  • 新增了一行 GRANT ALL PRIVILEGES ON rootData.* TO Lihua@%`:
    • ALL PRIVILEGES:表示授予所有可用权限(包括 SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、ALTER 等)。
    • ON rootData.*:权限范围限定在 rootData 数据库下的所有表(rootData.* 表示“rootData 数据库中的所有表”)。

在这里插入图片描述

总结

  • 授权前,Lihua 只能登录 MySQL,但看不到 rootData 数据库,也不能对任何数据进行操作。
  • 授权后,Lihua 除了能登录外,还可以对 rootData 数据库执行所有操作(例如查询 user 表、插入数据、修改表结构等),但对其他数据库(如 db1test1 等)仍无权限。

此时用 Lihua 登录后,执行 show databases; 会看到 rootData 数据库,且能正常操作其中的表。

2.3 移除用户权限

语法:

revoke 权限列表 on 库.对象名 from '用户名'@'登陆位置'

在这里插入图片描述
在这里插入图片描述

mysql> REVOKE ALL PRIVILEGES ON rootData.* FROM 'Lihua'@'%';
Query OK, 0 rows affected (0.01 sec)mysql> 

在这里插入图片描述


🚩总结

一、用户管理指令

操作语法示例说明
创建用户CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';CREATE USER 'Lihua'@'%' IDENTIFIED BY '123456';%表示允许从任意主机登录,localhost仅允许本地登录
删除用户DROP USER '用户名'@'主机名';DROP USER 'zhs'@'%';删除指定用户(需root权限)
查看所有用户信息USE mysql; SELECT user, host, authentication_string FROM user;-需先切换到mysql系统数据库,查看用户、主机和密码哈希

二、权限授予指令
基本语法GRANT 权限 ON 范围 TO '用户名'@'主机名';
(需root权限执行,授予后建议执行FLUSH PRIVILEGES;刷新权限)

权限范围示例指令说明
全局权限(所有库表)GRANT ALL PRIVILEGES ON *.* TO 'Lihua'@'%';授予对所有数据库、所有表的全部权限
数据库级权限GRANT ALL PRIVILEGES ON rootData.* TO 'Lihua'@'%';授予对rootData数据库所有表的全部权限
表级权限GRANT INSERT, SELECT ON rootData.user TO 'Lihua'@'%';仅授予对rootData.user表的插入和查询权限
单个权限(如查看数据库)GRANT SHOW DATABASES ON *.* TO 'Lihua'@'%';允许用户执行show databases;

三、权限撤销指令
基本语法REVOKE 权限 ON 范围 FROM '用户名'@'主机名';
(核心注意:撤销的范围必须与授予时完全一致,否则会报错)

场景示例指令说明
撤销数据库级全部权限REVOKE ALL PRIVILEGES ON rootData.* FROM 'Lihua'@'%';对应之前授予的rootData.*权限
撤销数据库级单个权限(如插入)REVOKE INSERT ON rootData.* FROM 'Lihua'@'%';撤销对rootData数据库所有表的插入权限
撤销表级权限REVOKE ALL PRIVILEGES ON rootData.user FROM 'Lihua'@'%';需先单独授予过rootData.user表级权限,否则报错

四、权限查看指令

操作语法示例说明
查看用户当前权限SHOW GRANTS FOR '用户名'@'主机名';SHOW GRANTS FOR 'Lihua'@'%';显示用户拥有的所有权限及范围

五、常见错误及原因

  1. ERROR 1064(语法错误)
    REVOKE INSERT rootData.user ...缺少ON关键字,正确应为REVOKE INSERT ON rootData.user ...

  2. ERROR 1147(无对应权限定义)
    撤销的范围与授予时不一致(如授予的是rootData.*,却试图撤销rootData.user),需保证范围完全匹配。

  3. ERROR 1142(权限不足)
    普通用户(如Lihua)试图执行GRANTREVOKE,此类操作需root或拥有GRANT OPTION权限的用户执行。

  4. USAGE权限
    新用户默认仅有USAGE权限(仅能登录,无实际操作权限),需手动授予具体权限。

请添加图片描述


http://www.dtcms.com/a/511948.html

相关文章:

  • EXPLAIN执行计划详解
  • 【文档】配置 prometheus-webhook-dingtalk + alertmanager 细节
  • higress开通tcp和websocket网关
  • 国外优秀网站建设什么样的网站可以做外链
  • 【JavaWeb|第一篇】Maven篇
  • 如何上传网页到网站好玩网页传奇
  • 打造专属Spring Boot Starter
  • Elasticsearch面试精讲 Day 30:Elasticsearch面试真题解析与答题技巧
  • 单一key-value对象工具-org.apache.commons.lang3.tuple.Pair
  • h5游戏免费下载:3D小车车
  • 分布式事务详解
  • Flink重启策略有啥用
  • 怎样做好物流网站建设免费商业wordpress主题
  • 怎么把qq空间做成企业网站网站用ps下拉效果怎么做
  • 输电线路绝缘子污秽度在线监测装置工作原理及优势解析
  • MOSHELL (7) : 构建3G RNC端到端性能可观测性体系
  • UE5 使用Lyra地图加载插件完成简易Loading
  • 最好的家:干净、烟火与书香
  • 普集网站开发湛江有哪些网站建设公司
  • 青岛开发区做网站海外服务器ip免费
  • 华为OD-23届转行-C++面经
  • 做腰椎核磁证网站是 收 七php如何制作网页
  • tail-f
  • 卸载Python3.12.6报错0x80070643安装时发生严重错误
  • 『 数据库 』MySQL复习 - 内置函数详解
  • Linux中Expect脚本和Shell的脚本核心特点解析、以及比对分析和应用场景
  • 网站建设公司未来发展方向傻瓜式php网站开发
  • Redis缓存--Jedis
  • 三点式振荡器(Colpitts/Hartley)的相关问题
  • 西安淘宝网站建设公司ui设计需要学哪些课程