【MySQL】我在广州学Mysql 系列——MySQL用户管理详解

news2025/1/27 6:18:24

ℹ️大家好,我是练小杰,本博客是春节前最后一篇了,在此感谢大佬们今年的支持!!🙏🙏
接下来将学习MYSQL用户管理的相关概念以及命令~~
回顾:👉【MYSQL触发器的使用】
数据库专栏:👉【数据库专栏】~
想了解更多,主页: 【练小杰的CSDN】

在这里插入图片描述

文章目录

  • 权限表
    • 权限管理的基本原则
    • user表
    • db表和host表
    • tables_priv表和columns_priv表
    • procs_priv表
  • 账户管理
    • 登录和退出MySQL服务器
    • 新建普通用户
    • 删除普通用户
      • 1. 使用DROP USER语句删除用户
      • 2. 使用DELETE语句删除用户
    • root用户修改自己的密码
    • root用户修改普通用户密码
    • 普通用户修改密码
      • 示例:假设用户lxj 想要修改自己的密码。
    • ⚠️注意
    • root用户密码丢失的解决办法
    • ⚠️注意事项
  • 权限管理
    • 授权
    • 收回权限
    • 查看权限
  • 访问控制
    • 连接核实阶段
    • 请求核实阶段

在这里插入图片描述

权限表

权限管理是通过一系列的权限表来实现的,这些表存储在mysql系统数据库中。理解这些权限表对于我们更高效地管理数据库安全性和用户权限至关重要。

权限管理的基本原则

  • 最小权限原则:为用户分配完成其任务所需的最小权限,避免过度授权。

  • 定期审查:定期检查和更新用户权限,确保权限的合理性和安全性。

  • 使用角色:利用数据库角色(Roles)来简化权限管理,将一组权限分配给一个角色,然后将角色分配给用户。

user表

User表是MySQL中最重要的一个权限表,记录允许连接到服务器的帐号信息,里面的权限是全局级的。

  • 主要字段如下:

Host:允许连接的主机名或IP地址。
User:用户名。
Password:用户密码(以哈希形式存储)。
Select_priv、Insert_priv、Update_priv等:各种全局权限,如SELECT、INSERT、UPDATE等。
Grant_priv:是否允许用户授予权限给其他用户。
Max_questions、Max_updates、Max_connections等:限制用户在一小时内可以执行的查询、更新和连接次数。

  • 示例:查看mysql数据库权限表的信息
SELECT Host, User, Select_priv, Insert_priv FROM mysql.user;
+-----------+------------------+-------------+-------------+
| Host      | User             | Select_priv | Insert_priv |
+-----------+------------------+-------------+-------------+
| localhost | lxj              | Y           | Y           |
| localhost | mysql.infoschema | Y           | N           |
| localhost | mysql.session    | N           | N           |
| localhost | mysql.sys        | N           | N           |
| localhost | root             | Y           | Y           |
+-----------+------------------+-------------+-------------+
5 rows in set (0.00 sec)

db表和host表

db表和host表都是MySQL数据中非常重要的权限表。

  • db表中存储了用户对某个数据库的操作权限,决定用户能从哪个主机存取哪个数据库。

  • host表中存储了某个主机对数据库的操作权限,配合db权限表对给定主机上数据库级操作权限做更细致地控制。

  • 示例:

SELECT Host, Db, User, Select_priv, Insert_priv FROM mysql.db;
+-----------+--------------------+---------------+-------------+-------------+
| Host      | Db                 | User          | Select_priv | Insert_priv |
+-----------+--------------------+---------------+-------------+-------------+
| localhost | performance_schema | mysql.session | Y           | N           |
| localhost | sys                | mysql.sys     | N           | N           |
+-----------+--------------------+---------------+-------------+-------------+
2 rows in set (0.00 sec)

其中,Host、Db、User:分别表示主机名、数据库名和用户名。

tables_priv表和columns_priv表

tables_priv表: 用来对表设置操作权限。
columns_priv表: 用来对表的某一列设置权限。

  • 主要字段
  • Host、Db、User、Table_name:分别表示主机名、数据库名、用户名和表名。
  • Column_name:表示列名
  • Grantor:授予权限的用户。
  • Timestamp:权限授予的时间戳。
  • Table_priv:表级别的权限,如SELECT、INSERT、UPDATE、DELETE等。
  • Column_priv:列级别的权限,如SELECT、INSERT、UPDATE等。
  • 示例如下:
SELECT Host, Db, User, Table_name, Table_priv FROM mysql.tables_priv;
+-----------+-------+---------------+------------+------------+
| Host      | Db    | User          | Table_name | Table_priv |
+-----------+-------+---------------+------------+------------+
| localhost | mysql | mysql.session | user       | Select     |
| localhost | sys   | mysql.sys     | sys_config | Select     |
+-----------+-------+---------------+------------+------------+
2 rows in set (0.00 sec)


SELECT Host, Db, User, Table_name, Column_name, Column_priv FROM mysql.columns_priv;

procs_priv表

procs_priv表可以对存储过程和存储函数设置操作权限。

  • 主要字段:
  • Host、Db、User、Routine_name、Routine_type:分别表示主机名、数据库名、用户名、存储过程/函数名和类型(FUNCTIONPROCEDURE)。
  • Proc_priv:存储过程/函数级别的权限,如EXECUTE、ALTER ROUTINE等。
  • 示例如下:
SELECT Host, Db, User, Routine_name, Routine_type, Proc_priv FROM mysql.procs_priv;

账户管理

登录和退出MySQL服务器

我们利用常用参数登录mysql服务器,通常用mysql命令行登录客户端,基本格式如下:

mysql -u [用户名] -p [数据库名] -h [主机名] -P [端口号]
  • 说明:

-u [用户名] 或 --user=[用户名]:指定要登录的MySQL用户名。例如,-u root


-p--password:提示输入密码。
若是在-p后面直接输入密码(例如-p123456),密码会以明文形式显示在命令行中,存在安全风险,因此推荐只使用-p,然后在提示时输入密码。


[数据库名]:可选参数,指定要连接的数据库。如果不指定,将连接到默认数据库。


-h [主机名]--host=[主机名]:指定要连接的主机名或IP地址。默认是localhost,表示连接到本地MySQL服务器。


-P [端口号]--port=[端口号]:指定要连接的端口号,默认为3306端口。

  • 登录Mysql服务器示例:
  1. 以root用户身份登录本地MySQL服务器:
 mysql -u root -p

执行后,系统会提示输入密码:

Enter password:

输入正确的密码后,即可登录成功。

2.以指定用户身份登录远程MySQL服务器:

mysql -u lianxiaojie -p -h 192.168.1.100  -P 3306

由以上命令可知,将登录到IP地址为192.168.1.100的远程MySQL服务器,端口号为3306,使用用户名为lianxiaojie的用户。

3.登录并连接到特定数据库:

mysql -u username -p database_name

将登录并连接到名为database_name的数据库。

  • 退出MySQL服务器

退出MySQL客户端一般使用EXIT命令或者 QUIT命令,最后分号可加也可不加!!!

EXIT;  
//或者exit

QUIT;
//或者quit

新建普通用户

  • 使用CREATE USERGRANT语句。在更改用户权限后,需要使用 FLUSH PRIVILEGES 语句来使更改生效。
-- 创建一个新用户
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

-- 授予数据库级别的SELECT和INSERT权限
GRANT SELECT, INSERT ON database_name.* TO 'username'@'localhost';

-- 刷新权限
FLUSH PRIVILEGES;

删除普通用户

1. 使用DROP USER语句删除用户

若需要删除一个用户,可以使用 DROP USER 语句。

DROP USER 'username'@'host';

2. 使用DELETE语句删除用户

DROP USER 语句用于删除一个或多个MySQL账户及其所有权限。

DROP USER 'username'@'host';
  • 示例如下:
-- 删除特定主机上的用户
DROP USER 'lxj'@'localhost';

-- 删除允许从任何主机连接的用户
DROP USER 'lxj'@'%';

-- 删除多个用户
DROP USER 'lxj'@'localhost', 'gem'@'192.168.1.%';

root用户修改自己的密码

  1. 使用 ALTER USER 语句(推荐)
  • 如果你当前已经以root用户登录,可以直接执行以下命令:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

当你使用的是不同的主机名(例如远程主机),请将 'localhost' 替换为相应的主机名或IP地址。

  1. 使用mysqladmin命令在命令行指定新密码

适用于所有版本的MySQL,并且可以在不登录MySQL服务器的情况下修改密码。

mysqladmin -u root -p'current_password' password 'new_password'

⚠️在-p选项和current_password 之间不要有空格。

  1. 直接修改mysql数据库的user表(不推荐,容易出错)

利用UPDATE 语句直接修改 mysql.user 表

USE mysql;
UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root' AND Host='localhost';

FLUSH PRIVILEGES;

  1. 使用SET语句修改root用户的密码
SET PASSWORD FOR 'root'@'localhost' = 'new_password';

-- 刷新权限(可选)
FLUSH PRIVILEGES;

root用户修改普通用户密码

  1. 使用SET语句修改普通用户的密码
SET PASSWORD FOR 'john'@'localhost' = 'NewSecureP@ssw0rd!';

FLUSH PRIVILEGES;

这里是修改普通用户john的密码并刷新权限

  1. 使用UPDATE语句修改普通用户的密码
USE mysql;
UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='lianxiaojie' AND Host='host';
  1. 使用GRANT语句修改普通用户密码
-- 以root用户登录
mysql -u root -p

-- 修改用户john的密码
GRANT USAGE ON *.* TO 'john'@'localhost' IDENTIFIED BY 'NewSecureP@ssw0rd!';

-- 刷新权限
FLUSH PRIVILEGES;
  • 命令说明:

USAGE 权限:表示不授予任何新的权限,仅用于修改用户属性(如密码)。
*.*: 表示全局级别,适用于所有数据库和表。
'username'@'host': 指定要修改密码的用户和主机。
IDENTIFIED BY 'new_password':设置新的密码。

普通用户修改密码

普通用户登录MySQL服务器后,通过SET语句设置自己的密码。
登录后,可以使用以下两种形式的 SET PASSWORD 语句来设置或修改密码。

  • 设置当前用户密码:
SET PASSWORD = 'new_password';
  • 为特定用户设置密码:

若需要为其他用户设置密码(前提是当前用户有足够的权限),才能使用。

SET PASSWORD FOR 'username'@'host' = 'new_password';

示例:假设用户lxj 想要修改自己的密码。

  • 登录mysql
mysql -u lxj -p

输入当前密码后登录。

  • 修改密码
SET PASSWORD = 'sheniankuaile!';
  • 然后,使用新密码重新登录,测试密码是否修改。
mysql -u lxj -p

输入 sheniankuaile! 以确认更改。

⚠️注意

  • 使用 SET PASSWORD 语句后,MySQL会自动刷新权限,无需手动执行 FLUSH PRIVILEGES;

root用户密码丢失的解决办法

  1. 使用--skip-grant-tables选项启动MySQL服务
  2. 使用root用户登录和重新设置密码
  3. 加载权限表

⚠️注意事项

  • 安全性:确保在安全的环境下修改密码,避免密码泄露。
  • 权限:修改root密码需要当前root用户具有足够的权限。
  • 备份:在进行密码修改前,建议备份相关的系统表,以防止意外情况发生。
  • 远程访问:如果需要远程访问MySQL服务器,确保防火墙和网络配置允许相应的连接。
  • 避免直接操作 mysql.user 表,除非在特殊情况下并明确了解受到的影响。

权限管理

MySQL的各种账户权限信息被存储在mysql数据库的userdbhosttables_privcolumns_privprocs_priv表中。在MySQL启动时,服务器将这些数据库表内容读入内存。

授权

授权就是为某个用户授于权限。合理的授权可以保证数据库的安全。
MySQL中可以使用GRANT语句为用户授于权限。

收回权限

收回权限就是取消已经赋于用户的某些权限。收回用户不必要的权限可以在一定程度上保证系统的安全性。
MySQL中使用REVOKE语句取消用户的某些权限。

// 撤销数据库级别的INSERT权限
REVOKE INSERT ON database_name.* FROM 'username'@'localhost';

// 刷新权限
FLUSH PRIVILEGES;

查看权限

SHOW GRANTS语句可以显示指定用户的权限信息。
而使用SHOW GRANT语句查看当前账户信息。

  • 基本语法:
SHOW GRANTS FOR 'user'@'host';

访问控制

连接核实阶段

当连接MySQL服务器时,服务器基于用户的身份以及用户是否能通过正确的密码验证身份来接受或拒绝连接。

  • 验证user表中是否存在该用户。
  • 验证3个字段(Host,User和Password)

请求核实阶段

建立了连接之后,对在此连接上进来的每个请求,服务器检查用户要执行的操作,然后检查是否有足够的权限来执行它。

  • 核实user、db、host、tables_priv或columns_priv表的权限信息

  • Mysql请求核实的过程如下:
    在这里插入图片描述

本文有关Mysql数据库用户管理相关内容已经讲完了,年后再见啦👋
主页:【练小杰的CSDN】😆
ℹ️欢迎各位在评论区踊跃讨论,积极提出问题,解决困惑!!!
⚠️若博客里的内容有问题,欢迎指正,我会及时修改!!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2283254.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2025年数学建模美赛 A题分析(3)楼梯使用方向偏好模型

2025年数学建模美赛 A题分析(1)Testing Time: The Constant Wear On Stairs 2025年数学建模美赛 A题分析(2)楼梯磨损分析模型 2025年数学建模美赛 A题分析(3)楼梯使用方向偏好模型 2025年数学建模美赛 A题分…

Spring Security(maven项目) 3.0.2.7版本

通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识,又从理性认识而能动地指导革命实践,改造主观世界和客观世界。实践、认识、再实践、再认识,这种形式,循环往复以至无穷&#xf…

【二叉树】4. 判断一颗二叉树是否是平衡二叉树。5. 对称二叉树。6. 二叉树的构建及遍历 7. 二叉树的分层遍历 。

判断一颗二叉树是否是平衡二叉树。OJ链接 可以在求树高度的过程中判断树是否平衡 对称二叉树。OJ链接 二叉树的构建及遍历。OJ链接 注意:public static int i最好把static去掉 否则当有多个测试用例时 i无法重新为0二叉树的分层遍历 。OJ链接 但此题要求返回List…

Java如何实现反转义

Java如何实现反转义 前提 最近做的一个需求,是热搜词增加换一批的功能。功能做完自测后,交给了测试伙伴,但是测试第二天后就提了一个bug,出现了未知词 levis。第一眼看着像公司售卖的一个品牌-李维斯。然后再扒前人写的代码&…

“大模型横扫千军”背后的大数据挖掘--浅谈MapReduce

文章目录 O 背景知识1 数据挖掘2 邦费罗尼原则3 TF.IDF4 哈希函数5 分布式文件系统 一、MapReduce基本介绍1. Map 任务2. 按键分组3. Reduce 任务4. 节点失效处理5.小测验:在一个大型语料库上有100个map任务和若干reduce任务: 二、基于MapReduce的基本运…

蓝桥杯3519 填充 | 分类讨论

题目传送门 很简单&#xff0c;遍历一次字符串&#xff0c;将‘?’作为0或1处理&#xff0c;发现00和11统计次数即可。 s str(input()) cnt 0 arr [00, 11, 0?, ?0, 1?, ?1, ??] i0 while i < len(s)-1:if s[i:(i2)] in arr:i 2cnt 1else:i 1 print(cnt)END✨

嵌入式知识点总结 ARM体系与架构 专题提升(一)-硬件基础

嵌入式知识点总结 ARM体系与架构 专题提升(一)-硬件基础 目录 1.NAND FLASH 和NOR FLASH异同 ? 2.CPU,MPU,MCU,SOC,SOPC联系与差别? 3.什么是交叉编译&#xff1f; 4.为什么要交叉编译&#xff1f; 5.描述一下嵌入式基于ROM的运行方式和基于RAM的运行方式有什么区别? 1…

EchoMimicV2的部署使用

最近有一个录课的需要&#xff0c;我不想浪费人力&#xff0c;只想用技术解决。需求很简单&#xff0c;就是用别人现成的录课视频中的形象和声线&#xff0c;再结合我提供的讲稿去生成一个新的录课视频。我觉得应该有现成的技术了&#xff0c;我想要免费大批量生产。最近看到这…

迅为RK3568开发板篇OpenHarmony实操HDF驱动控制LED-添加内核编译

编译内核时将该 HDF 驱动编译到镜像中&#xff0c;接下来编写驱动编译脚本 Makefile&#xff0c;代码如下所示&#xff1a; 加入编译体系&#xff0c;填加模块目录到 drivers/hdf_core/adapter/khdf/linux/Makefile 文件 更多内容可以关注&#xff1a;迅为RK3568开发板篇OpenHa…

期权帮|在股指期货中超过持仓限额怎么办?

锦鲤三三每日分享期权知识&#xff0c;帮助期权新手及时有效地掌握即市趋势与新资讯&#xff01; 在股指期货中超过持仓限额怎么办&#xff1f; 一、立即平仓或减仓&#xff1a; &#xff08;1&#xff09;最直接且有效的方法是立即平仓或减仓&#xff0c;以降低持仓量至限额…

Linux 高级路由与流量控制-用 tc qdisc 管理 Linux 网络带宽

大家读完记得觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 此分享内容比较专业&#xff0c;很多与硬件和通讯规则及队列&#xff0c;比较底层需要有技术功底人员深入解读。 Linux 的带宽管理能力 足以媲美许多高端、专用的带宽管理系统。 1 队列&#xff0…

openstack单机安装

openstack单机安装 网卡配置安装依赖开启虚拟环境修改配置文件 部署openstack部署openstack客户端访问可视化界面Horizon补充 本篇主要讲述Ubuntu2204单机安装openstackstable/2024.2。其他版本的Linux系统或者openstack版本&#xff0c;请参考openstack官网。 网卡配置 需要配…

计算机视觉-卷积

卷积-图像去噪 一、图像 二进制 灰度 彩色 1.1二进制图像 0 1 一个点可以用一个bit&#xff08;0/1&#xff09;来表示 1.2灰度图像 0-255 一个点可以用一个byte来表示 1.3彩色图像 RGB 表达一个彩色图像先说它的分辨率p/w&#xff08;宽&#xff09;和q/h&#xff08;高…

贵州端午黔粽探源:贵州味道与黔味文化与糯米的融合?

黔粽的由来? 黔粽的贵州味道?探索贵州“黔味文化”找寻答案! 黔粽的特色由来与贵州味道 贵州粽,简称黔粽。黔粽的主要特色是“酸辣”,以其独特的“酸辣”口味和地域特色,与浙粽、京粽、粤粽、川粽、云粽、闽粽、台湾粽并列为“全国八大粽子派别”之一,并与甜味粽、咸味粽共…

使用python-docx包进行多文件word文字、字符批量替换

1、首先下载pycharm。 2、改为中文。 3、安装python-docx包。 搜索包名字&#xff0c;安装。 4、新建py文件&#xff0c;写程序。 from docx import Documentdef replace1(array1):# 替换词典&#xff08;标签值按实际情况修改&#xff09;dic {替换词1: array1[0], 替换…

Excel 技巧17 - 如何计算倒计时,并添加该倒计时的数据条(★)

本文讲如何计算倒计时&#xff0c;并添加该倒计时的数据条。 1&#xff0c;如何计算倒计时 这里也要用公式 D3 - TODAY() 显示为下面这个样子的 然后右键该单元格&#xff0c;选 设置单元格格式 然后点 常规 这样就能显示出还书倒计时的日数了。 下拉适用到其他单元格。 2&a…

2025.1.21——八、[HarekazeCTF2019]Avatar Uploader 2(未完成) 代码审计|文件上传

题目来源&#xff1a;buuctf [HarekazeCTF2019]Avatar Uploader 2 一、打开靶机&#xff0c;整理信息 跟Avatar Uploader 1 题目长得一样&#xff0c;先上传相同文件看看情况&#xff0c;另外这道题还有源码&#xff0c;可以看看 二、解题思路 step 1&#xff1a;上传同类…

ChatGPT接入苹果全家桶:开启智能新时代

最近&#xff0c;科技界最重磅的消息莫过于ChatGPT正式接入苹果iOS生态系统&#xff01;这意味着苹果用户将能够直接在iPhone、iPad和Mac上体验到这款强大的AI代码生成器带来的便利&#xff0c;开启一个全新的智能时代。这篇文章将深入探讨ChatGPT与苹果生态的整合&#xff0c;…

易语言模拟真人鼠标轨迹算法 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…

一部手机如何配置内网电脑同时访问内外网

做过运维的朋友都知道&#xff0c;最麻烦的是运维电脑不能远程&#xff0c;每次都得现场进行维护&#xff0c;明明客户那边有可以访问内网的电脑&#xff0c;怎么操作能将这台电脑能访问跟到外网呢&#xff0c;这样不就能通过远程软件远程了吗&#xff1f;嘿嘿。按以下步骤试试…