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

使用Shell脚本进行MySql权限修改

背景:原先数据配置文件中有bind-address=127.0.0.1,注释掉此配置后,原数据库中默认带%root的权限,现在需要通过脚本实现白名单列表中的ip添加权限允许访问数据库,白名单之外的ip没有权限访问数据库。
以下是过程中记录的一些问题。

1、能否直接通过将%@root替换成白名单中ip@root权限?

答:不能。

在 MySQL 中,无法将 %@root 直接更新为 whitelisted_ip@root 的权限。权限授予是基于用户和主机的,而不是根据特定的用户和权限项。这意味着不能直接更改权限项的主机部分。
相反,应该创建一个新的用户,并仅授予该用户特定主机的访问权限。然后,撤销原始的 %@root 用户的权限,以确保只有指定白名单中的 IP 地址能够访问数据库。
因此,在 MySQL 中创建新用户并设置仅限白名单 IP 地址访问数据库,然后删除默认的 %root 用户权限,是最安全和推荐的做法。

2、WITH GRANT OPTION 参数使用

WITH GRANT OPTION 是 MySQL 权限系统中的一种选项,它允许授予的用户将他们拥有的权限授予其他用户,即委派权限。具体而言,当你向用户授予权限时,可以选择是否包括 WITH GRANT OPTION,其含义如下:

授予权限:授予权限意味着该用户可以执行被授予的操作(例如 SELECT、INSERT、UPDATE 等)。
WITH GRANT OPTION:如果同时指定了 WITH GRANT OPTION,则被授予权限的用户除了可以执行这些操作外,还可以将相同的权限授予其他用户,即委派权限。

换句话说,具有 WITH GRANT OPTION 权限的用户可以再次使用 GRANT 命令将他们拥有的权限授予给其他用户,而不需要直接访问权限的所有者。这样的设置可以在需要委派权限给其他用户时非常有用。但同时也要注意,授予 WITH GRANT OPTION 权限可能增加安全风险,因为权限可能会被滥用或误用。
因此,在为用户分配权限时,应谨慎考虑是否使用 WITH GRANT OPTION,并确保了解委派权限可能带来的安全影响。

3、执行 REVOKE ALL PRIVILEGES ON . FROM ‘root’@‘%’;后,为什么查询user表依然包含此用户信息?

当使用 REVOKE ALL PRIVILEGES ON *.* FROM 'root'@'%'; 命令来撤销 root@% 用户的所有权限时,这只是取消了该用户对数据库的访问权限,并没有删除该用户的账户信息。因此,即使撤销了 root@% 的权限,仍然可以在 mysql.user 表中查询到该用户的记录。
要完全删除 root@% 用户的账户信息,可以使用以下步骤:

-- 使用 REVOKE 命令撤销 root@% 用户的所有权限:
REVOKE ALL PRIVILEGES ON *.* FROM 'root'@'%';
FLUSH PRIVILEGES;
--- 删除 root@% 用户的账户:
DROP USER 'root'@'%';

通过上述步骤,可以撤销 root@% 用户的所有权限,并从 mysql.user 表中删除该用户的账户信息。
请注意,删除 root@% 用户可能会影响到数据库的管理和维护,因此在执行此操作之前,请确保有其他具备管理员权限的用户账户。

4、部分细节参考

添加用户权限时如果用户权限不存在才添加;
删除用户权限时如果用户权限存在则删除;
不做添加删除判断,可能会执行报错。
数据连接相关信息存储在一个配置文件中test_config.sh;

test_config.sh文件参考

#!/bin/bashexport DBCMD=/usr/local/Test/database/bin/mysql
export DBUSER=root
export DBPWD=123456
export DBHOST=127.0.0.1
export DBPORT=3306
export WHITEIP=192.168.22.1

test_permission.sh文件参考

#!/bin/bash
pushd `dirname $0` >/dev/null 2>&1. test_config.sh# 检查白名单用户权限是否存在
existing_user=`$DBCMD -u$DBUSER -p$DBPWD -P$DBPORT -h$DBHOST -Ns -e "SELECT user FROM mysql.user WHERE user='root' AND host='${WHITEIP}'"`
if [ -z "$existing_user" ]; then# 如果用户权限不存在,则添加权限$DBCMD -u$DBUSER -p$DBPWD -P$DBPORT -h$DBHOST -e "create user 'root'@'${WHITEIP}' identified by '123456';grant all privileges on *.* to 'root'@'${WHITEIP}' identified by '123456' with GRANT OPTION;flush privileges;"# 记录时间、输出到日志文件echo `date "+%F %T"` "${WHITEIP} grant all privileges" >> ../test.log
elseecho `date "+%F %T"` "${WHITEIP} is exist, no need to add" >> ../test.log
fi# 检查root@%用户权限是否存在
existing_user=`$DBCMD -u$DBUSER -p$DBPWD -P$DBPORT -h $DBHOST -Ns -e "SELECT user FROM mysql.user WHERE user='root' AND host='%'"`
if [ -z "$existing_user" ]; thenecho `date "+%F %T"` "root@% is not exist, no need to del" >> ../test.log
else# 如果用户权限存在,则删除权限$DBCMD -u$DBUSER -p$DBPWD -P$DBPORT -h$DBHOST -e "REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'root'@'%';DROP USER 'root'@'%';flush privileges;"echo `date "+%F %T"` "root@% rmvoke all privileges" >> ../test.log
fipopd >/dev/null 2>&1

相关文章:

使用Shell脚本进行MySql权限修改

背景:原先数据配置文件中有bind-address127.0.0.1,注释掉此配置后,原数据库中默认带%root的权限,现在需要通过脚本实现白名单列表中的ip添加权限允许访问数据库,白名单之外的ip没有权限访问数据库。 以下是过程中记录的…...

项目中线程池的应用

1、首先我们需要在配置类中将线程池作为单例bean配置 Configuration public class ThreadPoolExecutorConfig {BeanExecutorService executorService(){return new ThreadPoolExecutor(2,3,0,TimeUnit.MICROSECONDS,new ArrayBlockingQueue<>(3),(r)->new Thread(r,&…...

前端 JS 压缩图片的思路(附源码)

前言 相信大家都做过图片上传相关的功能,在图片上传的过程中,不知道大家有没有考虑过文件体积的问题,如果我们直接将原图片上传,可以图片体积比较大,一是上传速度较慢,二是前端进行渲染时速度也比较慢,比较影响客户的体验感。所以在不影响清晰度的情况下,前端可以在上…...

C语言结合体和枚举的魅力展现

前言 ✨✨欢迎&#x1f44d;&#x1f44d;点赞☕️☕️收藏✍✍评论 个人主页&#xff1a;秋邱’博客 所属栏目&#xff1a;人工智能 &#xff08;感谢您的光临&#xff0c;您的光临蓬荜生辉&#xff09; 引言: 前面我们已经讲了结构体的声明&#xff0c;自引用&#xff0c;内存…...

基于STC12C5A60S2系列1T 8051单片机通过单个按键单击次数实现开关机应用

基于STC12C5A60S2系列1T 8051单片机通过单个按键单击次数实现开关机应用 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍基于STC12C5A60S2系列1T 8051单片机通过单个按…...

静态住宅IP优缺点,究竟要怎么选?

在进行海外 IP 代理时&#xff0c;了解动态住宅 IP 和静态住宅 IP 的区别以及如何选择合适的类型非常重要。本文将介绍精态住宅 IP 特点和&#xff0c;并提供选择建议&#xff0c;帮助您根据需求做出明智的决策。 静态住宅 IP 的特点 静态住宅 IP 是指 IP 地址在一段时间内保…...

day07-缓存商品、购物车

1. 缓存菜品 1.1 问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大。 结果&#xff1a; 系统响应慢、用户体验差 1.2 实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓…...

平台介绍-搭建赛事运营平台(3)

上文介绍了品牌隔离的基本原理&#xff0c;就是通过不同的前端和微服务来实现。但是确实很多功能是类似的&#xff0c;所以从编程角度还是有些管理手段的。 前端部分&#xff1a;前端部分没有什么特别手段&#xff0c;就是两个独立的项目工程&#xff0c;分别维护。相同的部分复…...

数值分析复习:逼近理论的应用——最小二乘问题、解超定、欠定方程组

文章目录 逼近理论的应用——最小二乘问题、解超定、欠定方程组离散平方逼近最小二乘解 本篇文章适合个人复习翻阅&#xff0c;不建议新手入门使用 本专栏&#xff1a;数值分析复习 的前置知识主要有&#xff1a;数学分析、高等代数、泛函分析 逼近理论的应用——最小二乘问题、…...

设计模式-设配器模式

目录 &#x1f38a;1.适配器模式介绍 &#x1f383;2.适配器类型 &#x1f38f;3.接口适配器 &#x1f390;4.类的适配器 &#x1f38e;5.优缺点 1.适配器模式介绍 适配器模式&#xff08;Adapter Pattern&#xff09;是作为两个不兼容的接口之间的桥梁。这种类型的设…...

BEVFormer v2论文阅读

摘要 本文工作 提出了一种具有透视监督&#xff08;perspective supervision&#xff09;的新型鸟瞰(BEV)检测器&#xff0c;该检测器收敛速度更快&#xff0c;更适合现代图像骨干。现有的最先进的BEV检测器通常与VovNet等特定深度预训练的主干相连&#xff0c;阻碍了蓬勃发展…...

FFMPEG C++封装(二)

4 详细设计 这章是FFMPEG C封装库的详细设计。 4.1 Init 该模块初始化FFMPEG库。 4.1.1 Init定义 namespace media { namespace sdk { void MEDIASDK_EXPORT Init(); } }函数说明&#xff1a; Init 初始化FFMPEG库&#xff0c;该函数可调用多次。 4.1.2 Init实现 name…...

使用unplugin-auto-import页面不引入api飘红

解决方案&#xff1a;. tsconfig.json文件夹加上 {"compilerOptions": {"target": "ES2020","useDefineForClassFields": true,"module": "ESNext","lib": ["ES2020", "DOM", &q…...

八大技术趋势案例(虚拟现实增强现实)

科技巨变,未来已来,八大技术趋势引领数字化时代。信息技术的迅猛发展,深刻改变了我们的生活、工作和生产方式。人工智能、物联网、云计算、大数据、虚拟现实、增强现实、区块链、量子计算等新兴技术在各行各业得到广泛应用,为各个领域带来了新的活力和变革。 为了更好地了解…...

Vue实现SQL语句关键字高亮显示?

SQL关键字高亮 要在Vue中实现SQL语句中关键字的高亮显示&#xff0c;你可以使用类似的方法&#xff0c;但是你需要根据SQL语法的特点来解析并高亮显示关键字。以下是一个示例代码&#xff0c;演示了如何在Vue中实现SQL语句关键字的高亮显示。 <template><div><…...

开始时间大于结束时间

1.dom中代码&#xff0c;监听所选日期值的变化&#xff0c;并把需要比较的时间字段作为参数传到监听方法中&#xff0c; <el-form-item label"起始日期" prop"startTime"><el-date-picker clearable size"small":disabled"isDisa…...

Java中 List 集合,通过 Stream 流进行排序总结

一、数据准备 public class OrderTest {private String channelCode;private BigDecimal rate;// 省略 getter、setter、toString()、constructor }List<OrderTest> orderTestList new ArrayList<>();OrderTest z09 new OrderTest("Z09", new BigDeci…...

1688中国站按关键字搜索工厂数据 API

公共参数 名称类型必须描述keyString是申请免费调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_search_shop等]cacheString否[yes,no]默认y…...

YOLOV8逐步分解(2)_DetectionTrainer类初始化过程

接上篇文章yolov8逐步分解(1)--默认参数&超参配置文件加载继续讲解。 1. 默认配置文件加载完成后&#xff0c;创建对象trainer时&#xff0c;需要从默认配置中获取类DetectionTrainer初始化所需的参数args&#xff0c;如下所示 def train(cfgDEFAULT_CFG, use_pythonFalse…...

Java是用什么语言写的?PHP呢?

Java底层是C语言。 Sun公司研发人员根据嵌入式软件的要求&#xff0c;对C进行了改造&#xff0c;去除了留在C的一些不太实用及影响安全的成分&#xff0c;并结合嵌入式系统的实时性要求&#xff0c;开发了一种称为Oak的面向对象语言。而后&#xff0c;经过迭代更新&#xff0c…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理

引言 Bitmap&#xff08;位图&#xff09;是Android应用内存占用的“头号杀手”。一张1080P&#xff08;1920x1080&#xff09;的图片以ARGB_8888格式加载时&#xff0c;内存占用高达8MB&#xff08;192010804字节&#xff09;。据统计&#xff0c;超过60%的应用OOM崩溃与Bitm…...