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
对数据库 testdb
的 SELECT
和 INSERT
权限:
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';
示例:收回用户 alice
在 testdb
数据库上的 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. 示例:用户授权场景
假设我们有一个开发团队,其中的成员需要不同的数据库访问权限:
-
开发人员(dev1):只需要对
testdb
数据库进行读取和写入操作。CREATE USER 'dev1'@'%' IDENTIFIED BY 'dev1_password'; GRANT SELECT, INSERT, UPDATE ON testdb.* TO 'dev1'@'%';
-
管理员(admin):需要对所有数据库拥有完全的控制权限。
CREATE USER 'admin'@'%' IDENTIFIED BY 'admin_password'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
-
只读用户(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)保存及读取 运行结果: 运行结果…...

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

【分布式事务-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 第二步ÿ…...

知识改变命运 数据结构【java对象的比较】
0:前言 在基本数据类型中,我们可以直接使用号比较是否相等,还记的学堆哪里时候,插入一个数据,就会与其他数据进行比较,当时我们传入的是Integer类型,在Integer类里面已经实现了compare。 如果…...
01_23 种设计模式之《简单工厂模式》
文章目录 一、什么是设计模式二、设计模式类型简单工厂模式及应用场景定义抽象产品类和具体产品类实现工厂类客户端代码注意事项 一、什么是设计模式 设计模式:在软件研发过程中,经过实战验证,用于解决在特定环境下、重复出现的,…...
Android 12.0 关于定制自适应AdaptiveIconDrawable类型的动态日历图标的功能实现系列一
1.前言 在12.0的系统rom定制化开发中,在关于定制动态日历图标中,原系统是不支持动态日历图标的功能,所以就需要从新 定制动态时钟图标关于自适应AdaptiveIconDrawable类型的样式,就是可以支持当改变系统图标样式变化时,动态日历 图标的背景图形也跟着改变,所以接下来就来…...

【源码+文档+调试讲解】基于安卓的小餐桌管理系统springboot框架
摘 要 相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低运营人员成本,实现了小餐桌的标准化、制度化、程序化的管理,有效地防止了小餐桌的随意管理,提高了信息的处理速度和精确度,能够及时、准确地查询和修…...

C语言中的文件操作(二)
C语言中的文件操作(一)-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 继承详解:初阶理解与实战应用前言第一章:继承的基本概念与定义1.1 继承的概念1.2 继承的定义 第二章:继承中的访问权限2.1 基类成员在派生类中的访问权限2.2 基类与派生类对象的赋值转换2.2.1 派生类对象赋值给基类对象2.2.2 基类…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...

宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...