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

MySQL 之权限与授权

MySQL 权限及授权系统用于控制数据库用户对数据库资源的访问和操作权限。它提供了一种细粒度的安全控制机制,确保只有被授权的用户才能执行特定的操作。MySQL 的权限控制体系非常灵活,支持多种权限类型及级别(数据库、表、列、存储过程等)。接下来,我将详细介绍 MySQL 的权限体系及其授权过程。

1. MySQL 权限的基本概念

权限等级

MySQL 权限可以分为不同的等级,具体如下:

  • 全局权限:这些权限适用于整个 MySQL 服务器,它们可以控制用户在所有数据库中的操作。全局权限通过 mysql.user 表管理。
  • 数据库级别权限:这些权限仅适用于某个数据库。可以控制用户在某个数据库中的所有操作。数据库级别的权限通过 mysql.db 表管理。
  • 表级别权限:这些权限仅适用于某个表,控制用户对某张表的操作。表级别权限通过 mysql.tables_priv 表管理。
  • 列级别权限:这些权限仅适用于某个表的特定列。它们允许用户在表的特定列上进行操作。列级别权限通过 mysql.columns_priv 表管理。
  • 存储过程/函数权限:这些权限用于控制用户对存储过程或函数的执行权限。通过 mysql.procs_priv 表管理。
常见的权限类型

MySQL 支持多种权限类型,下面列出了一些常用的权限:

  • SELECT:读取数据的权限。
  • INSERT:向表中插入数据的权限。
  • UPDATE:更新表中数据的权限。
  • DELETE:删除表中数据的权限。
  • CREATE:创建数据库和表的权限。
  • DROP:删除数据库或表的权限。
  • ALTER:修改表结构的权限。
  • INDEX:在表上创建或删除索引的权限。
  • GRANT OPTION:授予用户授予其他用户权限的能力。
  • FILE:读取和写入文件的权限(与服务器文件系统相关)。
  • EXECUTE:执行存储过程或函数的权限。
  • SHOW DATABASES:查看所有数据库的权限。
  • SHUTDOWN:关闭 MySQL 服务器的权限。
  • REPLICATION SLAVE:配置复制从服务器的权限。
  • REPLICATION CLIENT:查看复制相关状态的权限。

2. 用户管理与授权

MySQL 中的用户权限管理通过以下几个方面实现:

创建用户

使用 CREATE USER 语句可以创建新用户,并为用户设置密码。语法如下:

CREATE USER 'username'@'host' IDENTIFIED BY 'password';
  • username:要创建的用户名。
  • host:用户可以从哪些主机登录(例如 'localhost' 表示只能从本地访问,'%' 表示可以从任意主机访问)。
  • password:用户登录时需要使用的密码。

示例

CREATE USER 'alice'@'localhost' IDENTIFIED BY 'alice_password';
授予权限

使用 GRANT 语句为用户授予权限。语法如下:

GRANT 权限列表 ON 数据库.表 TO 'username'@'host';
  • 权限列表:要授予的权限,多个权限可以用逗号分隔。如果要授予所有权限,可以使用 ALL PRIVILEGES
  • 数据库.表:指定数据库和表名。如果要授予对所有数据库和表的权限,可以使用 *.*

示例:授予用户 alice 对数据库 testdbSELECTINSERT 权限:

GRANT SELECT, INSERT ON testdb.* TO 'alice'@'localhost';

如果希望授予用户将权限进一步分配给其他用户的能力,可以使用 GRANT OPTION

GRANT SELECT, INSERT ON testdb.* TO 'alice'@'localhost' WITH GRANT OPTION;
查看权限

可以使用 SHOW GRANTS 语句查看用户拥有的权限:

SHOW GRANTS FOR 'username'@'host';

示例:查看用户 alice 的权限:

SHOW GRANTS FOR 'alice'@'localhost';

输出可能是这样的:

GRANT SELECT, INSERT ON `testdb`.* TO 'alice'@'localhost'
收回权限

使用 REVOKE 语句可以收回用户的权限。语法如下:

REVOKE 权限列表 ON 数据库.表 FROM 'username'@'host';

示例:收回用户 alicetestdb 数据库上的 INSERT 权限:

REVOKE INSERT ON testdb.* FROM 'alice'@'localhost';
删除用户

使用 DROP USER 语句可以删除用户:

DROP USER 'username'@'host';

示例:删除用户 alice

DROP USER 'alice'@'localhost';

3. 权限管理的注意事项

  • 最小权限原则:为了安全性,应该只授予用户执行任务所需的最小权限。例如,如果用户只需要查询数据,那么只应该授予 SELECT 权限。
  • GRANT OPTION:具有此权限的用户可以将权限授予其他用户。应谨慎使用此权限,防止权限滥用。
  • 密码安全:确保使用强密码,并定期更换用户密码以提高安全性。
  • 审计和日志:通过启用 MySQL 的审计功能或日志记录,监控用户的行为,确保系统安全。

4. 示例:用户授权场景

假设我们有一个开发团队,其中的成员需要不同的数据库访问权限:

  1. 开发人员(dev1):只需要对 testdb 数据库进行读取和写入操作。

    CREATE USER 'dev1'@'%' IDENTIFIED BY 'dev1_password';
    GRANT SELECT, INSERT, UPDATE ON testdb.* TO 'dev1'@'%';
    
  2. 管理员(admin):需要对所有数据库拥有完全的控制权限。

    CREATE USER 'admin'@'%' IDENTIFIED BY 'admin_password';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
    
  3. 只读用户(readonly):只需要对 testdb 数据库进行读取操作。

    CREATE USER 'readonly'@'%' IDENTIFIED BY 'readonly_password';
    GRANT SELECT ON testdb.* TO 'readonly'@'%';
    

通过这些命令,可以为不同角色的用户提供精确的权限控制,以确保数据库的安全性和高效性。

5. MySQL 权限系统的底层实现

MySQL 权限系统的实现依赖于多个系统表,这些表存储在 mysql 数据库中:

  • user:存储用户的全局权限。
  • db:存储数据库级别的权限。
  • tables_priv:存储表级别的权限。
  • columns_priv:存储列级别的权限。
  • procs_priv:存储存储过程和函数的权限。

每当用户执行操作时,MySQL 会根据这些表检查用户是否具有相应权限。

总结

MySQL 权限及授权系统通过精细的权限控制,确保不同用户能够以安全的方式访问数据库资源。了解权限的等级、常见权限类型以及如何正确授予、查看和撤销权限是管理 MySQL 数据库安全的基础。

相关文章:

MySQL 之权限与授权

MySQL 权限及授权系统用于控制数据库用户对数据库资源的访问和操作权限。它提供了一种细粒度的安全控制机制,确保只有被授权的用户才能执行特定的操作。MySQL 的权限控制体系非常灵活,支持多种权限类型及级别(数据库、表、列、存储过程等&…...

解决方案:Pandas里面的loc跟iloc,有什么区别

文章目录 一、现象二、解决方案案例使用loc使用iloc 简单总结 一、现象 在用Pandas库处理数据的时候,久而久之不用loc跟iloc,难免会有些混乱记混 二、解决方案 在Pandas中,loc和iloc是两种常用的数据选择方法,它们的主要区别在…...

C# 和 C++ 混合编程

以下是一个关于 C# 和 C 混合编程 的教程详细目录,涵盖了混合编程中的各个重要方面: 目录 1. 引言 1.1 什么是混合编程? 1.2 为什么选择 C# 和 C 进行混合编程? 1.3 应用场景和优势 2. 基本概念 2.1 C# 和 C 的基础差异 2.…...

Vxe UI vue vxe-table 实现表格单元格选中功能

Vxe UI vue vxe-table 实现表格单元格选中功能 在表格中实现鼠标点击任意单元格,选取的功能,通过 mouse-config 配置就可以开启单选功能,多选单元格选取功能需安装插件支持。 代码 参数说明 mouse-config 鼠标配置项: selected&…...

组合模式详解

1、组合模式基本介绍 1) 组合模式(Composite Pattern),又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构以 表示“整体-部分”的层次关系。 2) 组合模式依据树形结构来组合对象,用来表示部…...

AltiumDesigner脚本开发-DIP封装制作

1.点击工具栏的运行工具(蓝色向右三角图标)可以执行脚本程序; 2.点击菜单栏Run->Run可以执行脚本程序; 3.在脚本编辑器中,按键盘的F9键可以执行脚本程序; 4.通过菜单栏执行脚本程序(需要将程序添加到菜单栏中&am…...

乌班图基础设施安装之Mysql8.0+Redis6.X安装

简介:云服务器基础设施安装之 Mysql8.0Redis6.X 安装 Docker安装 # 按照依赖 yum install -y yum-utils device-mapper-persistent data lvm2 Docker Mirror 从去年开始. hub.docker.com[1] 在国内的访问速度极慢. 当时大家主要还是依赖国内的一些镜像源: 如中科…...

【动态规划-最长递增子序列(LIS)】力扣673.最长递增子序列的个数

给定一个未排序的整数数组 nums , 返回最长递增子序列的个数 。 注意 这个数列必须是 严格 递增的。 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。 示例 2: 输入: [2,2,2,2,2] 输出: 5 解释:…...

SQL优化 where谓词条件is null优化

1.创建测试表及谓词条件中包含is null模拟语句 create table t641 as select * from dba_objects; set autot trace select SUBOBJECT_NAME,OBJECT_NAME from t641 where OBJECT_NAMEWRI$_OPTSTAT_SYNOPSIS$ and SUBOBJECT_NAME is null; 2.全表扫描逻辑读1237 3.创建等值谓词条…...

Starrocks 元数据恢复 failed to load journal type 10242

fe 启动异常 2024-10-08 09:24:57.66908:00 INFO (stateChangeExecutor|87) [DatabaseTransactionMgr.replayUpsertTransactionState():1702] remove expired transaction: TransactionState. txn_id: 189324, label: delete_031c5090-7e2d-11ef-bdd8-000c29967e13, db id: 100…...

《深度学习》神经语言模型 Word2vec CBOW项目解析、npy/npz文件解析

目录 一、关于word2vec 1、什么是word2vec 2、常用训练算法 1)CBOW 2)SkipGram 二、关于npy、npz文件 1、npy文件 1)定义 2)特性 3)用途 4)保存及读取 运行结果: 运行结果&#xf…...

黄粱一梦,镜花水月总是空

总有人间一两风,埋我十万八千梦 自古以来,梦在我们的生活中一直是一个神秘玄幻而又发人深省的存在,我们一生中有三分之一的时间都在睡觉,做过的梦也是丰富多彩数不胜数。 而从科学的角度来说,梦是我们潜意识里的生活…...

【分布式事务-01】分布式事务之2pc两阶段提交

redis系列整体栏目 内容链接地址【一】分布式事务之2pc两阶段提交https://zhenghuisheng.blog.csdn.net/article/details/142406325 分布式事务之2pc两阶段提交 一,分布式事务之2pc两阶段提交1,两阶段提交(2pc)2,2pc两阶段提交实现思路3&…...

docker 安装 rabbitMQ

第一步:准备工作 # 打开docker目录 [rootMuYu ~]# cd /usr/local/docker/ # 创建rabbitmq文件夹 [rootMuYu docker]# mkdir rabbitmq # 打开rabbitmq文件夹 [rootMuYu docker]# cd rabbitmq/ # 创建挂载目录 [rootMuYu rabbitmq]# mkdir data 第二步&#xff…...

知识改变命运 数据结构【java对象的比较】

0:前言 在基本数据类型中,我们可以直接使用号比较是否相等,还记的学堆哪里时候,插入一个数据,就会与其他数据进行比较,当时我们传入的是Integer类型,在Integer类里面已经实现了compare。 如果…...

01_23 种设计模式之《简单工厂模式》

文章目录 一、什么是设计模式二、设计模式类型简单工厂模式及应用场景定义抽象产品类和具体产品类实现工厂类客户端代码注意事项 一、什么是设计模式 设计模式:在软件研发过程中,经过实战验证,用于解决在特定环境下、重复出现的,…...

Android 12.0 关于定制自适应AdaptiveIconDrawable类型的动态日历图标的功能实现系列一

1.前言 在12.0的系统rom定制化开发中,在关于定制动态日历图标中,原系统是不支持动态日历图标的功能,所以就需要从新 定制动态时钟图标关于自适应AdaptiveIconDrawable类型的样式,就是可以支持当改变系统图标样式变化时,动态日历 图标的背景图形也跟着改变,所以接下来就来…...

【源码+文档+调试讲解】基于安卓的小餐桌管理系统springboot框架

摘 要 相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低运营人员成本,实现了小餐桌的标准化、制度化、程序化的管理,有效地防止了小餐桌的随意管理,提高了信息的处理速度和精确度,能够及时、准确地查询和修…...

C语言中的文件操作(二)

C语言中的文件操作&#xff08;一&#xff09;-CSDN博客https://blog.csdn.net/Xiaodao12345djs/article/details/142746010?spm1001.2014.3001.5501 四、文件的顺序读写 1、fputc (字符输出函数/写) 将一个字符写入文件中 #include <stdio.h>int main() {FILE* pf fo…...

【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则

文章目录 C 继承详解&#xff1a;初阶理解与实战应用前言第一章&#xff1a;继承的基本概念与定义1.1 继承的概念1.2 继承的定义 第二章&#xff1a;继承中的访问权限2.1 基类成员在派生类中的访问权限2.2 基类与派生类对象的赋值转换2.2.1 派生类对象赋值给基类对象2.2.2 基类…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

高考志愿填报管理系统---开发介绍

高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发&#xff0c;采用现代化的Web技术&#xff0c;为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## &#x1f4cb; 系统概述 ### &#x1f3af; 系统定…...