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

MySQL 基础知识(八)之用户权限管理

目录

1 MySQL 权限管理概念

2 用户管理

2.1 创建用户

2.2 查看当前登录用户

2.3 修改用户名

2.4 删除用户

3 授予权限

3.1 授予用户管理员权限

3.2 授予用户数据库权限

3.3 授予用户表权限

3.4 授予用户列权限

4 查询权限

5 回收权限


1 MySQL 权限管理概念

        关于 MySQL 的权限简单的理解就是 MySQL 允许你做你权利以内的事情,不可以越界。比如只允许你执行 select 操作,那么你就不能执行 update 操作。存储账户权限信息的表主要有四个:user 表、db 表、tables_priv  表、columns_priv 表。

用户权限信息表:

  • user 表:user 表存储了允许连接到服务器的用户信息,并且它指定这些用户有哪种全局(超级用户、管理员)权限。在 user 表启用的任何权限均是全局权限,并适用于所有数据库。例如,如果你启用了 DELETE 权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。
  • db 表:db 表存储了用户对某个数据库的操作权限,在这里指定的权限适用于一个数据库中的所有表。
  • tables_priv 表:tables_priv 表存储了用户对某个表的操作权限,在这里指定的一个权限适用于一个表的所有列。
  • columns_priv 表:columns_priv 表存储了用户对表中某列的操作权限,在这里指定的权限适用于一个表的特定列。

MySQL 用户权限管理主要有以下作用:

  • 可以限制用户访问哪些库、哪些表
  • 可以限制用户对哪些表执行 SELECT、CREATE、DELETE、DELETE、ALTER 等操作
  • 可以限制用户登录的 IP 或域名
  • 可以限制用户自己的权限是否可以授权给别的用户

MySQL 权限信息表的验证过程分为两个阶段:连接权限验证和执行权限验证

  • 先从 user 表中的 Host、User、Password (MySQL 8.0 版本没有 Password,有 authentication_string,它是对密码加密后得到的密文)这 3 个字段中判断连接的 IP、用户名、密码是否存在,存在则通过验证

  • 通过连接权限验证后,进行权限分配,按照 user、db、tables_priv、columns_priv 的顺序进行验证

    • 校验 user 表,对于全局权限是 ok → 直接执行
    • 检验 db 表,对于某个特定的数据库有权限 → 执行
    • 检验 tables_priv 表,对于特定数据库下的某些表是有权限 → 执行
    • 检验 columns_priv 表,对于特定表中的某些列有权限 → 执行 

 MySQL 的权限分布,权限分布就是针对表可以设置什么权限,针对列可以设置什么权限等等

权限分布

可能的设置的权限

表权限

'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter'

列权限

'Select', 'Insert', 'Update', 'References'

过程权限

'Execute', 'Alter Routine', 'Grant'

2 用户管理

2.1 创建用户

创建用户的格式

create user [用户名]@[访问地址] identified by [密码]

       访问地址(登录主机名)表示可以在哪些网络地址上登录账户连接(访问)数据库,可以为 'localhost'、'%' 或 '196.68.%' 这个网络下的地址等

  • 'localhost' 表示本机,IPv4 中 localhost 的地址为 '127.0.0.1'
  • '%' 通配符表示任何主机都可以连接

        设置相同的用户名,不同的访问地址(主机名),这样我们可以在不同的主机(网络地址)上登录账户连接数据。根据本文 1 MySQL 权限管理概念中的连接权限验证,只有当访问地址、用名名、密码验证通过后才能登录账户连接数据库。

# 创建本地登录的用户 test1,密码为 123456
create user 'test1'@'localhost' identified by '123456';# 创建任何主机都可以连接的用户 test2,密码为 123456
create user 'test2'@'%' identified by '123456';# 创建访问地址为'127.0.0.2' 的用户 test3,密码为 123456
create user 'test3'@'127.0.0.2' identified by '123456';# 查看账号、访问地址、密码
select user, host, authentication_string from mysql.user;

在本地登录 test3 ,结果是:拒绝连接,因为没有 'test'@'localhost'

2.2 查看当前登录用户
# 查看当前登录的用户
select user();select current_user();

2.3 修改用户名

rename 除了用来更改用户名外,还可以更改访问地址

# 更改用户名和访问地址
rename user 'test1'@'localhost' to 'test'@'%';#查看用户名和访问地址
select user, host from mysql.user;

2.4 删除用户
# 删除用名为 test2、访问地址为 '%' 的用户
drop user 'test2'@'%';

3 授予权限

授权格式

grant [权限1,权限2,权限3] on [数据库].[表名] to [用户名]@[访问地址]
3.1 授予用户管理员权限
# 授予 'test1'@'localhost' 管理员权限
grant all privileges on *.* to 'test1'@'localhost' with grant option;

  • all privileges:表示将所有权限授予给用户。也可指定具体的权限,如SELECT、CREATE、DROP 等。
  • on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写 “*” 表示当前数据库的所有表,“*.*” 表示所有数据库的所有表。如果要指定将权限应用到 test1 库的 user 表中,可以这么写:test1.user
  • to:将权限授予哪个用户
  • with grant option:允许被授权的用户把得到的权限继续授给其它用户
3.2 授予用户数据库权限
数据库权限说明
select表示授予用户可以使用 select 语句访问特定数据库中所有表和视图的权限
insert表示授予用户可以使用 insert 语句向特定数据库中所有表添加数据行的权限
delete表示授予用户可以使用 delete 语句删除特定数据库中所有表的数据行的权限
update表示授予用户可以使用 update 语句更新特定数据库中所有数据表的值的权限
create表示授权用户可以使用 create table 语句在特定数据库中创建新表的权限
alter表示授予用户可以使用 alter table 语句修改特定数据库中所有数据表的权限
drop表示授予用户可以删除特定数据库中所有表和视图的权限
create view表示授予用户可以在特定数据库中创建新的视图的权限
show view表示授予用户可以查看特定数据库中已有视图的视图定义的权限
references表示授予用户可以创建指向特定的数据库中的表外键的权限
create routine表示授予用户可以为特定的数据库创建存储过程和存储函数的权限
alter routine表示授予用户可以更新和删除数据库中已有的存储过程和存储函数的权限
execute routine表示授予用户可以调用特定数据库的存储过程和存储函数的权限
index表示授予用户可以在特定数据库中的所有数据表上定义和删除索引的权限
create temporary tables表示授予用户可以在特定数据库中创建临时表的权限
lock tables表示授予用户可以锁定特定数据库的已有数据表的权限
all 或 all privileges表示以上所有权限
# 创建用户 test
create user 'test'@'localhost' identified by '123456';# 授予用户 test 在 study 数据库中查询、创建、修改、删除表的权限以及创建视图的权限
grant select, create, alter, drop, create view on study.* to 'test'@'localhost';# 查询用户 test 权限
show grants for 'test'@'localhost';

3.3 授予用户表权限
表权限说明
select表示授予用户可以使用 select 语句访问特定表的权限
insert表示授予用户可以使用 insert 语句向一个特定表中添加数据行的权限
delete表示授予用户可以使用 delete 语句从一个特定表中删除数据行的权限
update表示授予用户可以使用 update 语句更新特定数据表的权限
create表示授予用户可以使用特定的名字创建一个数据表的权限
alter表示授予用户可以使用 alter table 语句修改数据表的权限
drop表示授予用户可以删除数据表的权限
references表示授予用户可以创建一个外键来参照特定数据表的权限
index表示授予用户可以在表上定义索引的权限
all 或 all privileges表示以上所有权限
# 创建用户 learn1
create user 'learn1'@'localhost' identified by '123456';# 授予用户 learn1 查询、创建、修改 study 数据库的 goods 表的权限
grant select, create, alter on study.goods to 'learn1'@'localhost';# 查询用户 learn1 权限
show grants for 'learn1'@'localhost';

3.4 授予用户列权限
列权限说明
select(字段)表示授予用户可以使用 select 语句访问特定列的权限
insert(字段)表示授予用户可以使用 insert 语句向一个特定列插入数据的权限
update(字段)表示授予用户可以使用 update 语句更新特定列的权限
# 创建用户 learn2
create user 'learn2'@'localhost' identified by '123456';# 授予用户 learn2 查询、插入、更新 study 数据库的 goods 表的 name 列的权限
grant select(name), insert(name), update(name) on study.goods to 'learn2'@'localhost';# 查询用户 learn2 权限
show grants for 'learn2'@'localhost';

4 查询权限

使用 show grants; 查询 root 的权限时会出错

# 查询当前用户权限
# show grants();# 查询特定用户权限,如 learn2
show grants for 'learn2'@'localhost';

5 回收权限

回收权限格式

revoke [权限1,权限2,权限3] on [数据库].[表名] from [用户名]@[访问地址]

注意回收权限是回收已经授予用户的权限,不能回收用户没有的权限

# 回收用户 learn2 插入、更新 study 数据库的 goods 表的 name 列的权限
revoke insert(name), update(name) on study.goods from 'learn2'@'localhost';# 查询你 用户 learn2 的权限
show grants for 'learn2'@'localhost';

相关文章:

MySQL 基础知识(八)之用户权限管理

目录 1 MySQL 权限管理概念 2 用户管理 2.1 创建用户 2.2 查看当前登录用户 2.3 修改用户名 2.4 删除用户 3 授予权限 3.1 授予用户管理员权限 3.2 授予用户数据库权限 3.3 授予用户表权限 3.4 授予用户列权限 4 查询权限 5 回收权限 1 MySQL 权限管理概念 关于 M…...

QT编写工具基本流程(自用)

以后有人让你写工具的时候,可以方便用这个模版及时提高工作效率,可以争取早点下班。包含库目录,头文件目录,输出目录以及翻译和部署,基本上都全了,也可以做收藏用用。 文章目录 1、创建项目Dialog Widget都…...

代码随想录算法训练营第三六天 | 无重叠区间、划分字母区间、合并区间

目录 无重叠区间划分字母区间合并区间 LeetCode 435. 无重叠区间 LeetCode 763.划分字母区间 LeetCode 56. 合并区间 无重叠区间 给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠…...

DP读书:《openEuler操作系统》(十)套接字 Socket 数据传输的基本模型

10min速通Socket 套接字简介数据传输基本模型1.TCP/IP模型2.UDP模型 套接字类型套接字(Socket)编程Socket 的连接1.连接概述(1)基本概念(2)连接状态(3)连接队列 2.建立连接3.关闭连接 socket 编程接口介绍数据的传输1. 阻塞与非阻塞2. I/O复用 数据的传输…...

抓住母亲节销售机会:Shopee 平台选品策略大揭秘

母亲节,作为一个重要的购物节日,为卖家带来了巨大的销售机会。在Shopee这样的电商平台上,如何通过有效的选品策略吸引消费者、提高销量呢?下面将介绍一些关键策略,帮助卖家在母亲节期间实现销售突破。 先给大家推荐一…...

Mysql如何优化数据查询方案

mysql做读写分离 读写分离是提高mysql并发的首选方案。 Mysql主从复制的原理 mysql的主从复制依赖于binlog,也就是记录mysql上的所有变化并以二进制的形式保存在磁盘上,复制的过程就是将binlog中的数据从主库传输到从库上。 主从复制过程详细分为3个阶段…...

SwiftUI 更自然地向自定义视图传递参数的“另类”方式

概览 在 SwiftUI 中,正是自定义视图让我们的 App 变得与众不同!然而,除了传统的视图接口定义方式以外,我们其实还可以有更“银杏化”的选择。 如上图所示:对于 SubView 子视图所需的参数我们一开始并没有操之过急&…...

Word第一课

文章目录 1. 文件格式1.1 如何显示文件扩展名1.2 Word文档格式的演变1.3 常见的Word文档格式 3. 文档属性理解文档属性查看文档属性 1. 文件格式 1.1 如何显示文件扩展名 文档格式指的是文件的扩展名,例如下图 对于该文件,.docx就是文件扩展名&#x…...

【Vue3】路由传参的几种方式

路由导航有两种方式&#xff0c;分别是&#xff1a;声明式导航 和 编程式导航 参数分为query参数和params参数两种 声明式导航 query参数 一、路径字符串拼接(不推荐) 1.传参 在路由路径后直接拼接?参数名:参数值 &#xff0c;多组参数间使用&分隔。 <RouterLink …...

突破编程_C++_面试(高级特性(1))

面试题1&#xff1a;什么是线程以及它在并发编程中的作用是什么 线程&#xff08; Thread &#xff09;是操作系统能够进行运算调度的最小单位&#xff0c;它被包含在进程之中&#xff0c;是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流&#xff0c;一个进…...

django请求生命周期流程图,路由匹配,路由有名无名反向解析,路由分发,名称空间

django请求生命周期流程图 浏览器发起请求。 先经过网关接口&#xff0c;Django自带的是wsgiref&#xff0c;请求来的时候解析封装&#xff0c;响应走的时候打包处理&#xff0c;这个wsgiref模块本身能够支持的并发量很少&#xff0c;最多1000左右&#xff0c;上线之后会换成u…...

@ 代码随想录算法训练营第8周(C语言)|Day54(动态规划)

代码随想录算法训练营第8周&#xff08;C语言&#xff09;|Day54&#xff08;动态规划&#xff09; Day53、动态规划&#xff08;包含题目 ● 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV &#xff09; 123.买卖股票的最佳时机III 题目描述 给定一个数组&#…...

Flask 学习100-Flask-SocketIO 结合 xterm.js 实现网页版Xshell

前言 xterm.js 是一个使用 TypeScript 编写的前端终端组件,可以直接在浏览器中实现一个命令行终端应用。 可以实现 web-terminal 功能,类似于Xshell 操作服务器。 Flask-SocketIO 快速入门与使用基础参考前面这篇https://www.cnblogs.com/yoyoketang/p/18022139 前后端交互…...

Springboot AOP开发

Springboot AOP开发 一 AOP概述 AOP&#xff0c;即面向切面编程&#xff0c;简言之&#xff0c;面向方法编程。 针对方法&#xff0c;在方法的执行前或执行后使用&#xff0c;用于增强方法&#xff0c;或拓展。 二 AOP开发 1.引入 spring-boot-starter-aop 在SpringBoot项…...

office的excel中使用,告诉我详细的解决方案,如何变成转化为金额格式

在Office的Excel中&#xff0c;如果你想将名为"MEREFIELD"的公式结果转换为金额格式&#xff0c;你可以遵循以下详细步骤来实现&#xff1a; 书写MEREFIELD公式&#xff1a; 首先&#xff0c;在Excel中输入或确认你的MEREFIELD公式。例如&#xff0c;假设这个公式是用…...

灾后重建中GIS技术的关键作用与案例分析

地质灾害是指全球地壳自然地质演化过程中&#xff0c;由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下&#xff0c;地质灾害在世界范围内频繁发生。我国除滑坡灾害外&#xff0c;还包括崩塌、泥石流、地面沉…...

java环境安装

java环境安装 一、官网下载&#xff1a; jdk&#xff0c;下载jdk&#xff0c;解压到D:\JAVA\Java\jdk目录下。 二、配置&#xff1a; 配置环境变量 鼠标右键我的电脑->属性->高级系统设置->环境变量->系统变量新建变量名JAVA_HOME&#xff0c;变量值为刚才解压的…...

如何在iStoreOS软路由系统中安装cpolar实现公网远程本地电脑桌面

文章目录 简介一、配置远程桌面公网地址二、家中使用永久固定地址 访问公司电脑**具体操作方法是&#xff1a;** 简介 软路由是PC的硬件加上路由系统来实现路由器的功能&#xff0c;也可以说是使用软件达成路由功能的路由器。 使用软路由控制局域网内计算机的好处&#xff1a…...

appium实现自动化测试原理

目录 1、Appium原理 1.1、Android Appium原理图文解析 1.1.2、原理详解 1.1.2.1、脚本端 1.1.2.2、appium-server 1.1.2.3、中间件bootstrap.jar 1.1.2.4、驱动引擎uiautomator 1.2、 IOS Appium原理 1、Appium原理 1.1、Android Appium原理图文解析 执行测试脚本全过…...

Linux:docker搭建redis集群(3主3从扩容缩容 哈希槽分配)

操作系统&#xff1a;centos7 docker-ce版本&#xff1a;24.0.7 1.准备redis镜像 我这里使用redis 6.0.8 镜像进行操作&#xff0c;如果你也需要镜像&#xff0c;在网络正常情况下直接使用 docker pull redis:6.0.8 即可进行下载&#xff0c;如果你没配置国内加速器&#x…...

Linux程序性能分析60秒+

Linux性能分析大师Brendan Gregg有一篇非常著名的博客&#xff0c;介绍在性能分析开始的60秒内&#xff0c;利用标准的Linux命令行工具&#xff0c;执行一次充分的性能检查&#xff0c;获得系统资源利用率和进程运行情况的整体概念&#xff0c;查看是否存在异常、评估饱和度。本…...

mmap映射文件使用示例

mmap 零拷贝技术可以应用于很多场景&#xff0c;其中一个典型的应用场景是网络文件传输。 假设我们需要将一个大文件传输到远程服务器上。在传统的方式下&#xff0c;我们可能需要将文件内容读入内存&#xff0c;然后再将数据从内存复制到网络协议栈中&#xff0c;最终发送到远…...

Linux命令:stat命令

目录 1 简介2 说明3 实例-L&#xff1a;显示链接指向的文件的信息-f&#xff1a;显示文件系统信息-t&#xff1a;以简洁的形式输出 1 简介 stat命令&#xff1a;显示文件或文件系统的状态 2 说明 使用&#xff1a;stat [OPTION]… FILE 常用选项&#xff1a; -L, --derefer…...

学会自幂数

学会自幂数 题目描述&#xff1a; 写⼀个代码打印1~100000之间的所有的自幂数&#xff0c;中间用空格分隔。 解法思路&#xff1a; 自幂数是又称自客单位数&#xff0c;是指一个整数各个位的立方和等于该整数本身的数。例如&#xff0c;153是自幂数&#xff0c;因为 1^35 ^…...

支付宝支付

文章目录 支付宝介绍接入条件支付宝开发支付流程关于回调 支付测试第三方库的sdk接口加密的两种方式第三方支付宝sdk支付宝支付封装 支付宝介绍 -https://open.alipay.com/develop/manage 扫码登录 -网站支付&#xff1a;https://opendocs.alipay.com/open/270/105899 扫码登录…...

qt中读写锁与互斥锁的区别

在Qt中&#xff0c;读写锁&#xff08;QReadWriteLock&#xff09;和互斥锁&#xff08;QMutex&#xff09;都是用于多线程编程时控制共享资源访问的工具&#xff0c;但它们在实现上有一些重要的区别。 QMutex&#xff08;互斥锁&#xff09;&#xff1a; QMutex是最基本的锁…...

Why Not Http?

游戏服务器开发主要是基于socket&#xff0c;或者websocket&#xff0c;很少采用http&#xff08;可能有部分非常轻量级的服务器选择http&#xff09;。这是什么原因呢&#xff1f;我们先来看看socket与http之间的区别。 socket与http之间的区别 socket与http对比 sockethttpT…...

基于JAVA的停车场收费系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 停车位模块2.2 车辆模块2.3 停车收费模块2.4 IC卡模块2.5 IC卡挂失模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 停车场表3.2.2 车辆表3.2.3 停车收费表3.2.4 IC 卡表3.2.5 IC 卡挂失表 四、系统实现五、核心代码…...

在PyTorch中,如何查看深度学习模型的每一层结构?

这里写目录标题 1. 使用print(model)2. 使用torchsummary库3.其余方法&#xff08;可以参考&#xff09; 在PyTorch中&#xff0c;如果想查看深度学习模型的每一层结构&#xff0c;可以使用print(model)或者model.summary()&#xff08;如果你使用的是torchsummary库&#xff0…...

洛谷-P1478-陶陶摘苹果(升级版)(贪心)

陶陶摘苹果&#xff08;升级版&#xff09; 题目描述 又是一年秋季时&#xff0c;陶陶家的苹果树结了 n n n 个果子。陶陶又跑去摘苹果&#xff0c;这次他有一个 a a a 公分的椅子。当他手够不着时&#xff0c;他会站到椅子上再试试。 这次与 NOIp2005 普及组第一题不同的…...