当前位置: 首页 > 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…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...