【MySQL】——用户和权限管理(一)

💻博主现有专栏:

                C51单片机(STC89C516),c语言,c++,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux,基于HTML5的网页设计及应用,Rust(官方文档重点总结),jQuery,前端vue.js,Javaweb开发,Python机器学习等
🥏主页链接:

                Y小夜-CSDN博客

目录

🎯用户与权限

🎃user表

🎃bd表

🎃  tables_priv表和columns_priv表

🎃 procs_priv表

🎃访问控制过程

🎯用户管理

🎃添加普通用户

🎃普通用户修改自己的密码

🎃root用户修改自己的密码和普通用户的密码

🎃root用户修改自己的密码和普通用户的密码

🎃修改用户名

🎃删除普通用户

🎯 MySQL 8 中root用户密码丢失的解决办法    


🎯用户与权限

        数据库的安全性是指只允许合法用户进行其权限范围内的数据库相关操作,保护数据库以防止任何不合法的使用所造成的数据泄露、更改或破坏。

        MySQL提供了用户认证、授权等来实现和维护数据的安全,以避免用户恶意攻击或者越权访问数据库中的数据对象,并能根据不同用户分配在数据库中的权限。也就是说数据库安全性措施主要涉及用户认证和访问权限两个方面的问题。

        MySQL用户主要包括系统用户和普通用户

  • root用户是系统管理员,拥有操作MySQL数据库的所有权限。
  • 普通用户只拥有创建该用户时赋予它的权限。

        当MySQL服务启动时,会读取MySQL中的权限表,并将表中的数据加载到内存,当用户进行数据库访问操作时,MySQL会根据权限表中的内容对用户做相应的权限控制。

🎃user表

        MySQL中的所有用户信息都保存在user表中。user表是mysql数据库中最重要的一个表。它记录了允许连接到服务器的账号信息及一些全局级的权限信息。user表账号字段确定是拒绝还是允许传入连接。对于允许的连接,用户表中授予的任何权限都表示用户的全局权限。此表中授予的任何权限都适用于服务器上的所有数据库。

        MySQL 8.0.17中user表有51个字段,这些字段共分为4类,分别是账号字段、权限字段、安全字段和资源控制字段。可以通过“desc user;”命令来查看user表的结构

🎃bd表

        db表账号字段(Host、DB、User)三个字段组合成复合主键,来确定哪些用户可以从哪些主机访问哪些数据库。剩下的权限字段决定允许的操作。在数据库级别授予的权限适用于数据库和数据库中的所有对象,如表和存储程序。

        输入命令desc db;可以查看db表的结构。

🎃  tables_priv表和columns_priv表

        tables_priv和columns_priv表,与db表类似,但具有更小的粒度:它们应用于表和列级别,而不是数据库级别。在表级别授予的权限适用于表及其所有列。在列级别授予的权限仅适用于特定列。

        tables_priv表可以对单个表进行权限设置,tables_priv表包含8个字段,前4个字段Host、Db、User、Table_name分别表示主机名、数据库名、用户名和表名。后4个字段Grantor、Timestamp 、Table_priv和Column_priv。分别表示权限是谁设置的、修改权限的时间、对表进行操作的权限和对列的操作权限。

        columns_priv表可以对单个数据列进行权限设置,包含7个字段。前5个字段Host、Db、User、Table_name和Column_name分别表示主机名、数据库名、用户名、表名和列名。Timestamp和Column_priv表示修改权限的时间和对表中的数据列进行操作的权限。

🎃 procs_priv表

        procs_priv表适用于存储例程(存储过程和函数)。在例程级别授予的权限仅适用于单个过程或函数。

        输入命令:desc procs_priv;查看procs_pric表的结构。

        procs_priv表包含8个字段,分别是Host、Db、User、Routine_name、Routine_type、 Grantor 、Proc_priv 和Timestamp 。分别表示主机名、数据库名、用户名、例程的名称、例程的类型、存储权限是谁设置的、拥有的权限和更新的时间。

🎃访问控制过程

当客户端连接到MySQL服务器时,它会经历两个访问控制阶段:连接验证阶段和请求验证阶段。

1. 连接验证阶段

当用户尝试连接到MySQL服务器时,服务器会根据以下条件接受或拒绝连接:

(1)用户的身份以及是否可以通过提供正确的密码来验证其身份。

(2)用户的账号是锁定还是解锁。

        服务器首先检查凭证,然后检查账号锁定状态。任何一个步骤的失败都会导致服务器完全拒绝对用户的访问。否则,服务器接受连接,然后进入第2阶段并等待请求。

        使用三个执行凭证检查user表账号字段(Host,User和 authentication_string)。锁定状态记录在user表 account_locked列中。服务器仅在当某些user表行中的Host列和User列与客户端主机名和用户名匹配,客户端提供该行中指定的密码,并且account_locked值为“N”时,服务器才接受连接。

 2.请求验证阶段

        在请求验证阶段,服务器会检查用户是否有足够的权限执行每项操作。

        建立连接后,服务器进入访问控制的第2阶段。对于通过该连接发出的每个请求,服务器将确定要执行的操作,然后检查用户是否有足够的权限执行该操作。这就是权限表中的权限字段发挥作用的地方。这些权限可以来自user、db、tables_priv、columns_priv或procs_priv表中的任何一个。

🎯用户管理

        MySQL用户包括普通用户和系统用户。这两种用户的权限是不一样的。root用户是系统管理员,拥有所有的权限。
         从MySQL 8.0.16开始,MySQL引入了基于SYSTEM_USER权限的用户账号类别的概念 。

        结合用户账号类别的概念,根据系统用户和普通用户是否具有SYSTEM_USER权限来区分它们。

  • 系统用户:具有SYSTEM_USER权限的用户。
  • 普通用户:没有 SYSTEM_USER特权的用户。

🎃添加普通用户

        要使用CREATE USER,必须具有全局CREATE USER权限或mysql系统数据库的INSERT权限。启用只读系统变量时,CREATE USER还需要CONNECTION_ADMIN 或 SUPER权限。

        基本语法格式为:

CREATE USER [IF NOT EXISTS]

    user [auth_option] [, user [auth_option]] ...

    DEFAULT ROLE role [, role ] ...

    [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]

    [WITH resource_option [resource_option] ...]

    [password_option | lock_option] ...

其中:

(1)user:用户,由用户名和主机名组成,格式为 'user_name'@'host_name'。

(2)auth_option:用户身份验证选项,下面几种情况中选其一。

  •         IDENTIFIED BY ‘auth_string’:默认用户身份验证插件(caching_sha2_password。mysql_native_password
  •         IDENTIFIED WITH auth_plugin:使用指定的身份验证插件auth_plugin对空字符串(未设置用户密码)进行加密。
  •         IDENTIFIED WITH auth_plugin BY 'auth_string' IDENTIFIED WITH auth_plugin AS 'hash_string’

(3)DEFAULT ROLE :默认角色(无),role:角色。

(4)tls_option: 加密选项,默认是无。

1. 创建最简单的用户

  • 如果不指定主机地址,则将采用%(任意主机)。
  • 基本语法格式为:
  • create user '用户名'@'主机地址';

(注意:在创建用户时,若不指定主机地址、密码以及相关的用户选项,则表示此用户在访问MySQL服务器时,不限定客户端、不需要密码。)

2. 创建含有密码的用户

  • 创建含有密码的用户,需要用到IDENTIFIED BY子句。
  • 基本语法格式为:
  • create user '用户名'@'主机地址' identified [with ‘身份验证插件类型’] by '密码';

注意:创建用户时,用户主机名可以将引号省略。如果两个用户具有相同的用户名但主机不同,MySQL将其视为不同的用户,允许为这两个用户分配不同的权限集合。如果没有输入密码,那么MySQL允许相关的用户不使用密码登录。但是从安全的角度并不推荐这种做法。)

🎃普通用户修改自己的密码

如果以非匿名用户身份连接,则可以使用USER()函数更改自己的密码。

基本语法格式为:

  • ALTER USER USER() IDENTIFIED BY 'password';
  • 要查看服务器验证当前登录用户,可以调用CURRENT_USER()函数。

🎃root用户修改自己的密码和普通用户的密码

修改用户信息的基本语法格式为:

ALTER USER [IF EXISTS]

    user [auth_option] [, user [auth_option]] ...

    [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]

    [WITH resource_option [resource_option] ...]

    [password_option | lock_option] ...

        其中参数的含义与CREATE USER中的参数一样。使用ALTER USER语句可以修改用户身份验证插件、用户密码、角色、SSL/TLS、资源限制和密码管理属性,账号锁定。

🎃root用户修改自己的密码和普通用户的密码

1. 修改root账号密码 root用户修改自己的密码,有两种方法。

(1)使用ALTER USER USER()修改密码,

        基本语法格式为: ALTER USER USER() IDENTIFIED BY 'password';

(2)使用mysqladmin命令修改root用户密码

         基本语法为: mysqladmin -u username -h hostname -p password "newpassword"

         其中username通常是指root,password是关键字,"newpassword"是指新密码,此处只能用双引号。

2. 修改普通用户的密码

(1)使用root用户修改普通用户的密码,可以使用ALTER USER命令进行修改。

         基本语法格式为: ALTER USER 用户名 IDENTIFIED BY '明文密码';

(2)使用SET PASSWORD命令修改用户密码

        root用户也可以使用SET PASSWORD来修改普通用户的密码。

        基本语法格式为:

        SET PASSWORD FOR 用户=‘new_password’;

        其中,用户格式为用户名@主机名,new_password为用户设置的新密码。

🎃修改用户名

可以使用RENAME USER语句来修改一个已经存在的MySQL用户的名字。

基本语法格式: RENAME USER 老用户 TO 新用户 [, ... ]

说明:要使用RENAME USER,必须拥有全局CREATE USER权限或mysql数据库UPDATE权限。如果旧用户不存在或者新用户已存在,则会出现错误。 【例13-12】将用户test1的名字修改为test。

(注意:root用户也可以使用update来修改用户名。flush privileges;语句用来刷新权限,此处不可省。如果省略当我们下一次用新用户名test1登录时,会发现无法登陆,这是因为我们没有刷新权限。)

🎃删除普通用户

在MySQL数据库中,可以使用DROP USER语句来删除普通用户,也可以直接在mysql.user表中删除用户。

(1)使用DROP USER语句来删除普通用户

基本语法格式为: DROP USER [IF EXISTS] user [, user] ...

         注意:

  • DROP USER语句用于删除一个或多个MySQL用户,中间用逗号分隔,并取消其权限。
  • 要使用DROP USER,必须拥有mysql数据库的全局CREATE USER权限或DELETE权限。

(2)使用DELETE命令来删除普通用户

        注意:特别要提醒一点,DROP USER语句删除用户,底层是修改权限表,和DELETE语句直接修改权限表的效果是一样的。但是,采用封装好的语句肯定不会出错,如果直接修改权限表,难免会漏掉某些表(全局权限表user、数据库级权限表db……)。所以推荐使用DROP USER语句来删除用户。

🎯 MySQL 8 中root用户密码丢失的解决办法    

        在Windows操作系统中,使用以下过程重置MySQL数据库中“root”@“localhost”用户的密码。要更改具有不同主机名部分的root用户的密码,请修改主机名。

步骤如下:

(1)以管理员身份登录到系统。

(2)如果MySQL服务器正在运行,请停止它。对于作为Windows服务运行的服务器,请转到“服务管理器”:从“开始”菜单中,选择“控制面板”,然后选择“管理工具”,再选择“服务”。在列表中找到MySQL服务并停止它。 如果服务器未作为服务运行,则可能需要使用任务管理器强制其停止。

(3)在单行上创建包含密码分配语句的文本文件。语句如下: ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'; 将MyNewPass替换成要使用的密码。 (4)保存文件。假设将文件命名为C:\ mysql-init.txt。

(5)打开控制台窗口进入DOS命令提示符:从“开始”菜单中选择“运行”,然后输入cmd作为要运行的命令。

(6)启动MySQL服务器,并将init_file系统变量设置为文件名(请注意,选项值中的反斜杠是两个):

        在DOS命令提示符输入下面两条命令:

  • ① C:\> cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
  • ② C:\> mysqld --init-file=C:\\mysql-init.txt

         注意:

  •          如果将MySQL安装到其他位置,请相应的调整cd命令。
  •         服务器在启动时执行由init_file系统变量命名的文件的内容,并更改“root”@“localhost”用户密码。
  •         要使服务器输出显示在控制台窗口而不是日志文件中,请将--console选项添加到mysqld命令中,改为mysqld --console --init-file=C:\\mysql-init.txt
  •         如果是使用MySQL安装向导安装的MySQL,则可能需要指定--defaults-file文件选项。将之改为: C:\> mysqld --defaults-file="C:\\ProgramData\\MySQL\\MySQL Server 8.0\\my.ini"     --init-file=C:\\mysql-init.txt
  •         可以使用服务管理器找到--defaults-file设置:从“开始”菜单中,选择“控制面板”,然后选择“管理工具”,再选择“服务”。在列表中找到MySQL服务,右键单击它,然后选择“属性”选项。在“常规”选项卡下的“可执行文件路径”字段包含--defaults-file设置。

(7)服务器成功启动后,删除C:\ mysql-init.txt。 现在应该可以使用新密码以root身份连接到MySQL服务器。停止MySQL服务器并正常重启。


        root用户密码丢失,也可以使用--skip-grant-tables参数跳过授权表,重新设置root用户密码来解决,步骤如下:

(1)停止MySQL服务器

        首先, 关闭MySQL服务器,可以使用 net stop mysql80 关闭服务,也可以在本地服务中关闭。

(2)mysqld --skip-grant-tables启动MySQL服务

         以管理员权限打开DOS命令提示符,输入以下命令开启服务, 并绕过权限检查。 mysqld --console --skip-grant-tables --shared-memory

(3)mysql -u root命令重新登录

         启动另一个DOS命令提示符, 输入 mysql -u root 直接登陆, 接着输入以下命令, 将 root 密码置为空。 UPDATE mysql.user SET authentication_string='' WHERE user='root' and host='localhost';

(4)重新设置root用户密码

         关闭两个DOS命令提示符, 重新启动 MySQL 服务, 输入 mysql -u root 直接登陆, 通过以下命令设置 root 用户的密码。 ALTER USER 'root'@'localhost' IDENTIFIED BY 'your password'; 其中your password为要设置的密码。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

matplotlib绘图二

matplotlib版本:3.7.5 numpy版本:1.24.3 pandas版本:2.0.3 本文主要记录matplotlib对pandas的绘图,matplotlib的绘图技巧参考这里matplotlib基本绘图。 导包 import matplotlib.pyplot as plt import numpy as np import panda…

小程序的合同是怎么样写的

​很多商家找第三方做小程序都遭遇到了各种问题,如访问速度慢、服务器关闭、反复收费等。如果当初商家找的是正规的第三方服务商,双方签订了明确的合同条款,出现任何问题后,相信都能够进行解决。下面将具体介绍合同内容&#xff0…

照片不大于200K怎么压缩?一键压缩图片大小的技巧

现在办理很多事情的时候都会选择网上处理,然后有些需要提交照片或者图片的时候,就会被要求文件大小必须在200k以内,这对于很多人来说处理起来比较困难,所以小编今天专门找到了一款可以将图片压缩指定大小的图片处理工具&#xff0…

Parallels Desktop19虚拟机电脑版下载安装Windows详细图文教程2024最新

Parallels Desktop是一款Mac虚拟机软件,可以在Mac上运行Windows系统,它是Mac上最优秀的虚拟机软件之一。用户无需重启即可在Mac上同时运行Mac OS和Windows应用程序,且两者之间能够无缝切换,对此,用户甚至无需设置双系统…

吴恩达2022机器学习专项课程(一) 7.1 逻辑回归的成本函数第三周课后实验:Lab4逻辑回归的损失函数

问题预览/关键词 上节课回顾逻辑回归模型使用线性回归模型的平方误差成本函数单个训练样本的损失损失函数,成本函数,代价函数的区别线性回归损失函数和逻辑回归损失函数的区别逻辑回归模型的成本函数是什么?逻辑回归模型的损失函数实验逻辑回…

Orange3数据可视化(树查看器-决策树)

树视图 分类和回归树的可视化。 输入 树:决策树 输出 选中的数据:从树节点中选中的实例 数据:带有额外一列,显示每个点是否被选中 这是一个多功能的小部件,用于展示分类和回归树的2D可视化。用户可以选择一个节点…

小毛驴 40km 通勤上班:不一样的工作日!

从到公司上班之后因为距离变远了,也不能像之前一样小毛驴上下班了。 所以通勤方案就变成了: 上班:小毛驴 15min ----- 地铁 40min ----- 公交OR共享单车 12min 步行 5min下班:公交 12min ----- 地铁 40min ----- 小毛驴 15min通…

前端计算机网络之网络模型

什么是网络模型 对于前端开发者而言,理解网络模型的概念是非常重要的。网络模型是描述数据如何在网络中传输和处理的框架和规则,它有助于前端开发者更好地理解和优化应用程序与服务器之间的通信过程。 常用的两类模型 前端开发者需要了解的网络模型主…

2024腾讯游戏安全技术竞赛-机器学习赛道

决赛赛题链接https://gss.tencent.com/competition/2024/doc/2024%E8%85%BE%E8%AE%AF%E6%B8%B8%E6%88%8F%E5%AE%89%E5%85%A8%E6%8A%80%E6%9C%AF%E7%AB%9E%E8%B5%9B-%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0-%E5%86%B3%E8%B5%9B.zip 今年的题目是游戏跨语言恶意内容识别 ,题目比较…

Docker 入门篇(一)-- 简介与安装教程(Windows和Linux)

一、Docker简介 Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间没有任何接口(类似iPhon…

计算机服务器中了devicdata勒索病毒怎么办?Devicdata勒索病毒解密工具步骤

在这个网络飞速发展的时代,网络为企业的生产运营起到了关键性作用,利用网络可以开展各项工作业务,大大提高了企业生产效率与业务水平,在大家都为网络的便利感到欣慰时,网络数据安全问题,成为众多企业关心的…

河南各地市统计面板数据集(2010-2022年)

数据简介:《河南统计NJ》是一部全面反映河南省经济和社会发展情况的资料性年刊。河南统计年鉴包括行政区划资料、国民经济综合资料、基本单位资料和航空港区资料。 而本篇面板数据则反映了河南省各个地级市的经济、人口、就业、农业、工业、人民生活等等方面的发展…

【Linux系统编程】基础指令(三)

💞💞 前言 hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#x…

堆的介绍,实现(c语言实现)

目录 堆的概念 堆的性质: 堆的分类 父子结点的下标关系 堆的向下调整算法 ​编辑小堆 大堆 建堆 堆的向上调整算法 小堆 大堆 堆的基本操作 定义堆 初始化堆 销毁堆 打印堆 堆的插入 堆的删除 大堆(Max Heap)的向下调整算法…

白酒:香型创新在白酒市场竞争中的优势与策略

在香型创新方面展现出明显的市场竞争优势,香型创新不仅满足了消费者对口味多样化的需求,还为酒厂带来了差异化竞争优势。在白酒市场竞争中,实施进一步的香型创新策略对于提升品牌曝光度和市场份额至关重要。 首先,香型创新能够满足…

三篇多模态大模型进展综述

Modality Bridging 综述 多模态大型语言模型(MLLM)可实现基于图像撰写故事和无 OCR 的数学推理,在传统方法中很少见,这表明了通向通用人工智能的潜在路径。 通常人们会在 pair 数据上进行大规模(相对于 instruction t…

【千帆平台】AppBuilder工作流编排新功能体验之创建自定义组件

欢迎来到《小5讲堂》 这是《千帆平台》系列文章,每篇文章将以博主理解的角度展开讲解。 温馨提示:博主能力有限,理解水平有限,若有不对之处望指正! 目录 前言工作流编排组件 创建组件组件界面组件信息 组件画布操作节点…

探索项目管理系统:解析五大功能,洞悉项目成功的关键

项目管理新手往往喜欢埋头苦干,殊不知优秀的项目经理已经熟练运用项目管理系统,让项目规划条理清晰。项目管理系统具备的功能,好用的项目管理系统都有这5大功能。分别是项目WBS分解、项目图表和报表、工时管理、团队协作、任务流程自动化。 一…

(学习日记)2024.04.28:UCOSIII第五十二节:User文件夹函数概览(uC-LIB文件夹)第二部分

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

【中级软件设计师】上午题12-软件工程(1):软件工程模型、敏捷方法、软件需求、系统设计

上午题12-软件工程(1) 1 软件过程1.1 CMM 能力成熟度模型1.1 CMMI (建议直接看思维导图) 2 软件过程模型2.1 瀑布模型2.2 增量模型2.3 演化模型2.3.1 原型模型2.3.2 螺旋模型 2.5 喷泉模型 3 统一过程(UP)模型4 敏捷方…
最新文章