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

mysql笔记:14. 权限管理

文章目录

  • MySQL权限
  • 授予权限
  • 查看权限
  • 撤销权限
  • 权限生效机制
  • 访问控制的实现

在实际生产中,为了保证数据的安全,数据库管理人员需要为不同的操作人员分配不同的权限,限制登录MySQL服务器的用户只能在其权限范围内操作。同时管理员还可以根据不同的情况为用户授予权限或撤销权限,从而控制操作人员的权限。

MySQL权限

MySQL的权限系统分为以下三个不同的层级:

  • 全局性的权限:针对整个mysql实例。
  • 数据库级别的权限:针对某个具体的MySQL数据库。
  • 对象级别的权限:针对MySQL数据库中某个具体的数据库对象,如:表、表中的列、存储过程和存储函数等。

MySQL中的权限信息根据其作用范围分别存储在名称为mysql的数据库的不同表中。当MySQL启动时会自动加载这些权限信息,并且将这些权限信息读取到内存中。

系统表名称描述
user保存用户账号信息和全局权限信息
db保存数据库级别的权限信息
tables_priv保存表级别的权限信息
columns_priv保存列级别的权限信息
procs_priv保存存储过程和存储函数相关的权限信息
proxies_priv保存代理用户的权限信息

查看用户的权限:

mysql> show grants for username@hostname;

MySQL权限可以分为数据权限、结构权限、管理权限。管理员可以为用户授予或撤销权限。

分类权限名称权限级别描述
数据权限INSERT全局、数据库、表、列允许插入数据
数据权限DELETE全局、数据库、表允许删除数据
数据权限UPDATE全局、数据库、表、列允许更新数据
数据权限SELECT全局、数据库、表、列允许访问数据
数据权限SHOW DATABASES全局允许查看已存在的数据库
数据权限SHOW VIEW全局、数据库、表允许查看已有视图的视图定义
数据权限PROCESS全局允许查看正在运行的线程
结构权限CREATE全局、数据库、表允许创建数据库和表
结构权限DROP全局、数据库、表允许删除数据库、表和视图
结构权限CREATE ROUTINE全局、数据库允许创建存储过程
结构权限CREATE TABLESPACE全局允许创建、修改或删除表空间和日志组件
结构权限CREATE TEMPORARY TABLES全局、数据库允许创建临时表
结构权限CREATE VIEW全局、数据库、表允许创建和修改视图
结构权限ALTER全局、数据库、表允许修改数据表
结构权限ALTER ROUTINE全局、数据库、存储过程允许修改或删除存储过程
结构权限INDEX全局、数据库、表允许创建和删除索引
结构权限TRIGGER全局、数据库、表允许触发器的所有操作
结构权限REFERENCES全局、数据库、表、列允许创建外键
管理权限SUPER全局允许使用其他管理操作,如CHANGE MASTER TO等
管理权限CREATE USER全局CREATE USER、DROP USER、RENAME USER和REVOKE ALL PRIVILEGES
管理权限GRANT OPTION全局允许授予或删除用户权限
管理权限RELOAD全局FLUSH操作
管理权限PROXY与被代理的用户权限相同
管理权限REPLICATION CLIENT全局允许用户访问主服务器或从服务器
管理权限REPLICATION SLAVE全局允许复制从服务器读取主服务器二进制日志事件
管理权限SHUTDOWN全局允许使用mysqladmin shutdown
管理权限LOCK TABLES全局、数据库允许使用LOCK TABLES锁定拥有SELECT权限的数据库

权限级别指权限可以被应用在哪些数据库内容中。
例如,SELECT权限级别是指SELECT权限可以被授予到全局(任意数据库下的任意内容)、数据库(指定数据库下的任意内容)、表(指定数据库下的指定数据库表)、列(指定数据库下的指定数据表中的指定字段)。

授予权限

基本语法:

GRANT 权限名称[(字段列表)][, 权限名称[(字段列表)] ... ] ON 权限级别TO 'username'@'hostname' [, 'username'@'hostname' ... ] [WITH with_option]
  • 权限名称:上表中的权限名称
  • 字段列表:表示权限设置到哪些字段上。同时给多个字段设置同一个权限时,多个字段名之间使用逗号分隔。如果不指定字段,则设置的权限作用于整个表。
  • 权限级别:上表中的权限级别,可以使用下面四种写法
    • *.*:表示全局级别的权限,即授予的权限适用于所有数据库和数据库表。
    • *:如果当前未选择数据库,表示全局级别的权限;如果当前选择了数据库,则为当前选择的数据库授予权限。
    • 数据库名.*:表示数据库级别的权限,即授予的权限适用于指定数据库中的所有表。
    • 数据库名.表:表示表级别的权限。如果不指定将授予权限的字段,则授予的权限适用于指定数据库的指定表中的所有列。
  • TO子句用于指定一个或多个用户。
  • with_option的取值有5个:GRANT OPTION、MAX_QUERIES_PER_HOUR count、MAX_UPDATES_PER_HOUR count、MAX_CONNECTIONS_PER_HOUR count、MAX_USER_CONNECTIONS。

查看权限

tables_priv保存表级别的权限信息,columns_priv保存列级别的权限信息,管理员可以直接查询表看到用户的权限信息。也可以使用SHOW GRANTS语句查看用户权限。基本语法:


SHOW GRANTS FOR 'username'@'hostname';

撤销权限

为保证数据库的安全,对于用户一些不必要的权限应该及时撤销。MySQL提供了REVOKE语句用于撤销用户的权限,其基本语法:

REVOKE 权限名称[(字段列表)] [, 权限名称[(字段列表)] ...] ON 权限级别FROM 'username'@'hostname' [, 'username'@'hostname' ... ]

当撤销的权限比较多时,这种方式就比较烦琐。MySQL还提供了一次性撤销所有权限的功能,基本语法:

REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'username'@'hostname' [, 'username'@'hostname' ... ]

要使用REVOKE语句,必须拥有MySQL数据库的全局CREATE USER权限或UPDATE权限。
USAGE权限只能用于登录MySQL数据库,不能执行其他任何的操作;该权限不能被撤销。

权限生效机制

在MySQL中可以通过两种方式完成授权和撤销权限,但它们的生效机制却不一样。

  • 通过GRANT、REVOKE语句对用户进行授权、撤销的操作,权限的修改会立即生效。
  • 通过DML语句(insert、update和delete)直接修改权限系统表来完成授权和撤销,需要手动执行flush privileges语句让MySQL重装装载权限系统表或重启MySQL数据库后,修改才会生效。
    当MySQL生效新的权限信息时,对客户端会有以下影响:
  • 全局性的权限更改和新密码的设置会在下一次客户端连接时生效。
  • 数据库级别的权限更改会在下一次使用USE database_name语句时生效。
  • 对象级别的权限更改(如表和列),会在客户端下一次请求该对象时生效。

访问控制的实现

MySQL访问控制实际上由两个功能模块共同完成:用户管理模块、访问控制模块。
用户管理模块主要是验证用户的合法性,验证用户是否能够访问MySQL数据库;而访问控制模块则需要根据权限系统表中存储的权限信息来决定用户的权限。

访问控制模块
用户管理模块
逐个验证权限系统表
客户端请求执行SQL语句
SQL语句执行成功
匹配成功
SQL语句被拒绝
匹配失败
验证请求连接
客户端请求连接
权限系统表mysql.user
客户端连接被拒绝
验证失败
验证通过

相关文章:

mysql笔记:14. 权限管理

文章目录 MySQL权限授予权限查看权限撤销权限权限生效机制访问控制的实现 在实际生产中,为了保证数据的安全,数据库管理人员需要为不同的操作人员分配不同的权限,限制登录MySQL服务器的用户只能在其权限范围内操作。同时管理员还可以根据不同…...

无硫防静电手指套:高科技产业的纯净与安全新选择

随着科技的飞速发展,高科技产业对于生产环境的纯净度和产品的防静电要求日益严格。为了满足这一高标准的需求,无硫防静电手指套应运而生,以其独特的无硫特性和出色的防静电功能,迅速成为了高科技产业中的纯净与安全新选择。 无硫手…...

由浅到深认识C语言(10):字符串处理函数

该文章Github地址:https://github.com/AntonyCheng/c-notes 在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址:https://blog.csdn…...

防范服务器被攻击:查询IP地址的重要性与方法

在当今数字化时代,服务器扮演着重要的角色,为企业、组织和个人提供各种网络服务。然而,服务器也成为了网络攻击者的目标之一,可能面临各种安全威胁,例如DDoS攻击、恶意软件攻击、数据泄露等。为了有效地防范服务器被攻…...

3. ElasticSearch搜索技术深入与聚合查询实战

1. ES分词器详解 1.1 基本概念 分词器官方称之为文本分析器,顾名思义,是对文本进行分析处理的一种手段,基本处理逻辑为按照预先制定的分词规则,把原始文档分割成若干更小粒度的词项,粒度大小取决于分词器规则。 1.2 …...

【Linux】Shell编程【一】

shell是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。 Shell属于内置的…...

Windows10+tensorrt+python部署yolov5

一、安装cuda 打开NVIDIA控制面板 —>帮助—>系统信息—>组件,找到驱动版本新,我这边是11.2, 然后去CUDA Toolkit Archive | NVIDIA Developer下载对应版本的CUDA,根据查看的CUDA型号确定对应的cuda Toolhit版本&#…...

【前端框架的发展史详细介绍】

前端框架的发展史 前端框架的发展史可以追溯到1995年,当时微软推出了IE浏览器并开始支持CSS,随后,在1997年,W3C(万维网联盟)发布了CSS的第一个正式标准。 在2003年,苹果推出了Safari浏览器&am…...

[JAVAEE]—进程和多线程的认识

文章目录 什么是线程什么是进程进程的组成什么是pcb 进程概括线程线程与进程的关系线程的特点 创建线程创建线程方法创建线程的第二种方法对比 其他的方式匿名内部类创建线程匿名内部类创建Runable的子类lambda表达式创建一个线程 多线程的优势 什么是线程 什么是进程 首先想…...

sqllab第十九关通关笔记

知识点: 错误注入 最大长度为32位;如果目标长度>32时,需要利用截取函数进行分段读取referer注入 insert语句update语句 通过admin admin进行登录发现页面打印除了referer字段的信息 这应该是一个referer注入 首先进行测试一下 构造payl…...

张量维度改变总结

文章目录 一、view() 或 reshape()二、unsqueeze()三、squeeze()四、transpose()五、torch.expand_dims 一、view() 或 reshape() view() 或 reshape(): 这两个函数可以用于改变张量的形状,但保持元素总数不变。它们可以接受一个新的形状作为参数,并返回…...

C++ ezOptionParse的用法

在网上找了一下,发现并没有很多关于这个小型头文件的资料 只好自己上了 int main(int argc, const char * argv[]) {ezOptionParser opt;opt.overview "Demo of parsers features."; //概要说明,一般需要填写,简要介绍程序的作用opt.synta…...

MATLAB:一些杂例

a 2; b 5; x 0:pi/40:pi/2; %增量为pi/40 y b*exp(-a*x).*sin(b*x).*(0.012*x.^4-0.15*x.^30.075*x.^22.5*x); %点乘的意义 z y.^2; %点乘的意义 w(:,1) x; %组成w,第一列为x w(:,2) y; %组成w,第二列为y w(:,3) z; %组成w,第三列为z…...

使用OpenCV实现两张图像融合在一起

简单介绍 图像融合技术是一种结合多个不同来源或不同传感器捕获的同一场景的图像数据,以生成一幅更全面、更高质量的单一图像的过程。这种技术广泛应用于遥感、医学影像分析、计算机视觉等多个领域。常见的图像融合技术包括基于像素级、特征级和决策级的融合方法&a…...

PyTorch学习笔记之基础函数篇(十)

文章目录 6 张量操作6.1 torch.reshape()函数6.1 torch.transpose()函数6.1 torch.permute()函数6.1 torch.unsqueez()函数6.1 torch.squeeze()函数6.1 torch.cat()函数6.1 torch.stack()函数 6 张量操作 6.1 torch.reshape()函数 torch.reshape() 是 PyTorch 中的一个函数&a…...

kubernetes部署集群

kubernetes部署集群 集群部署获取镜像安装docker[集群]阿里仓库下载[集群]集群部署[集群]集群环境配置[集群]关闭系统Swap[集群]安装Kubeadm包[集群]配置启动kubelet[集群]配置master节点[master]配置使用网络插件[master]node加入集群[node]后续检查[master]测试集群 集群部署…...

软件工程师,该偿还一下技术债了

概述 在软件开发领域,有一个特殊的概念——“技术债”,它源于Ward Cunningham的一个比喻,主要用来描述那些为了短期利益而选择的快捷方式、临时解决方案或者未完成的工作,它们会在未来产生额外的技术成本。就像金融债务一样&#…...

HTML5、CSS3面试题(三)

HTML5、CSS3面试题(二) rem 适配方法如何计算 HTML 跟字号及适配方案?(必会) 通用方案 1、设置根 font-size:625%(或其它自定的值,但换算规则 1rem 不能小于 12px) 2…...

pytorch之诗词生成6--eval

先上代码: import tensorflow as tf from dataset import tokenizer import settings import utils# 加载训练好的模型 model tf.keras.models.load_model(r"E:\best_model.h5") # 随机生成一首诗 print(utils.generate_random_poetry(tokenizer, model)…...

Django自定义中间件

自定义中间件 传统方法的的五大钩子函数:(需要调用MiddlewareMixin类) process_request,请求刚到来,执行视图之前;正序 process_view,路由转发到视图,执行视图之前;正序…...

【JavaScript】JavaScript 运算符 ① ( 运算符分类 | 算术运算符 | 浮点数 的 算术运算 精度问题 )

文章目录 一、JavaScript 运算符1、运算符分类2、算术运算符3、浮点数 的 算术运算 精度问题 一、JavaScript 运算符 1、运算符分类 在 JavaScript 中 , 运算符 又称为 " 操作符 " , 可以实现 赋值 , 比较 > < , 算术运算 -*/ 等功能 , 运算符功能主要分为以下…...

掘根宝典之C++迭代器简介

简介 迭代器是一种用于遍历容器元素的对象。它提供了一种统一的访问方式&#xff0c;使程序员可以对容器中的元素进行逐个访问和操作&#xff0c;而不需要了解容器的内部实现细节。 C标准库里每个容器都定义了迭代器 迭代器的作用类似于指针&#xff0c;可以指向容器中的某个…...

DP-力扣 120.三角形最小路径和

给定一个三角形&#xff0c;找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点&#xff1a; 下标与上一层结点下标相同或者等于上一层结点下标 1 的两个结点。样例&#xff1a; 例如&#xff0c;给定三角形&#xff1a; [ [2], [3,4], [6,5,7], [4…...

【WEEK3】学习目标及总结【SpringMVC】【中文版】

学习目标&#xff1a; 三周完成SpringMVC入门——第三周 感觉这周很难完成任务了&#xff0c;大概率还会有第四周 学习内容&#xff1a; 参考视频教程【狂神说Java】SpringMVC最新教程IDEA版通俗易懂数据处理JSON交互处理 学习时间及产出&#xff1a; 第三周 MON~FRI 2024.…...

peft模型微调--Prompt Tuning

模型微调&#xff08;Model Fine-Tuning&#xff09;是指在预训练模型的基础上&#xff0c;针对特定任务进行进一步的训练以优化模型性能的过程。预训练模型通常是在大规模数据集上通过无监督或自监督学习方法预先训练好的&#xff0c;具有捕捉语言或数据特征的强大能力。 PEF…...

【算法训练营】周测1

清华大学驭风计划课程链接 学堂在线 - 精品在线课程学习平台 (xuetangx.com) 如果需要答案代码可以私聊博主 有任何疑问或者问题&#xff0c;也欢迎私信博主&#xff0c;大家可以相互讨论交流哟~~ 考题11-1 题目描述 有一个初始时为空的序列&#xff0c;你的任务是维护这个…...

PyTorch Dataset、DataLoader长度

pytorch 可以直接对 Dataset 对象用 len() 求数据集大小&#xff0c;而 DataLoader 对象也可以用 len()&#xff0c;不过求得的是用这个 loader 在一个 epoch 能有几多 iteration&#xff0c;容易混淆。本文记录几种情况的对比。 from torch.utils.data import Dataset, DataL…...

动态IP和静态IP

与静态 IP 地址不同&#xff0c;动态 IP 地址会定期更改。让我们来分析一下&#xff1a; 1. IP 地址基础知识&#xff1a; * IP 地址是一个数字标签&#xff0c;用于唯一标识网络上的每个设备。 * 当设备通过网络通信时&#xff0c;数据会在它们之间来回传输。每个数据包都标有…...

中电金信:技术实践|Flink维度表关联方案解析

导语&#xff1a;Flink是一个对有界和无界数据流进行状态计算的分布式处理引擎和框架&#xff0c;主要用来处理流式数据。它既可以处理有界的批量数据集&#xff0c;也可以处理无界的实时流数据&#xff0c;为批处理和流处理提供了统一编程模型。 维度表可以看作是用户来分析数…...

HQL 55 题【持续更新】

前言 今天开始为期一个多月的 HQL 练习&#xff0c;共 55 道 HQL 题&#xff0c;大概每天两道&#xff0c;从初级函数到中级函数。这次的练习不再是基础的 join 那种通用 SQL 语法了&#xff0c;而是引入了更多 Hive 的函数&#xff08;单行函数、窗口函数等&#xff09;。 我…...