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

Linux 服务如何使用 curl 利用 HTTP Get 请求传入 SQL 语句修改数据库表内容和结构


Linux
本文是博主在部署项目时发现的一个小技巧,项目部署在 Linux 虚拟机上,数据库被设置了写权限,作为开发只能使用程序对数据库做增删改查,但是在开发测试阶段会出现很多问题,权限的问题大大降低了开发效率,所以这个技巧会提高开发效率。


文章目录

    • 1、项目依赖和代码
    • 2、设置两条 SQL语句
    • 3、SQL 语句改造
    • 4、注意事项
    • 5、扩展修改数据库表结构语句

1、项目依赖和代码


首先要部署项目确认是否可以使用 curl

本次项目是使用 SpringBoot 3 项目,使用方法调用 SQL 语句需要以下依赖:

<dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MyBatis-Plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId></dependency><!-- MySQL 驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency></dependencies>   

核心代码如下:


package cn.com.wind.server.controller;import cn.com.wind.IMStarter.common.Response;
import lombok.extern.slf4j.Slf4j;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@Slf4j
@RestController
@RequestMapping("/system")
public class SystemController {private final JdbcTemplate jdbcTemplate;public SystemController(JdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}@GetMapping("/operateDataBase")public Response<?> operateDataBase(@RequestParam("sql") String sql) {Map<String, Object> response = new HashMap<>();try {int result = jdbcTemplate.update(sql);response.put("status", "success");response.put("affectedRows", result);return Response.success(response);} catch (Exception e) {response.put("status", "error");response.put("message", e.getMessage());return Response.fail(400, "SQL 执行出错");}}
}

2、设置两条 SQL语句

使用数据库表 user_role,在 user_database 下,表格字段有三个 uidnamerole,下面使用来个常见的语句作为解析:

INSERT INTO user_database.user_role (uid, role) VALUES (100100, 0)
UPDATE user_database.user_role SET role=2 WHERE uid=100100

在 Linux 中使用 curl 要注意有些字符会被 Base 解释器解释错误,需要进行转译。

假设访问 IP 地址和端口如下所示:

http://localhost:8086/system/operateDataBase?sql=' ' 

3、SQL 语句改造


第一条 INSERT 语句如下:

curl 'http://localhost:8086/system/operateDataBase?sql=INSERT%20INTO%20user_database.user_role%20(uid, role)%20VALUES%20(110359024,0)'

后半部分如下:

INSERT%20INTO%20user_database.user_role%20(uid,role)%20VALUES%20(110359024,0)

第二条 UPDATE 语句如下:

curl 'http://localhost:8086/system/operateDataBase?sql=UPDATE%20user_database.user_role%20SET%20role=2%20WHERE%20uid=100100'

后半部分如下:

UPDATE%20user_database.user_role%20SET%20role=2%20WHERE%20uid=100100

4、注意事项

首先,语句中的空格要做对应的解析,user_database.user_role 这里面的 . 可以不使用转译字符代替。

  • %20:空格
  • %2E.
  • %27' ,最外层的地方的单引号不需要转译。

另外,在 curl 命令中,URL 中的 括号逗号 不需要特别编码,但为了确保命令在 Bash 中正确解析,建议使用 单引号双引号 将整个 URL 包裹起来。这样可以避免 Bash 对括号和逗号进行特殊处理。

  • 单引号可以防止 Bash 对括号和逗号进行特殊处理。这是最简单和最安全的方法。
  • 双引号也可以防止 Bash 对括号和逗号进行特殊处理,但需要注意 URL 中的特殊字符(如 $)可能会被 Bash 解释。

我个人使用的单引号,可以满足使用要求。

在 INSERT 语句中,有的朋友喜欢在 后面加一个空格,或者 = 后面加一个空格,这个时候也是需要使用 %20 转译。

INSERT%20INTO%20user_database.user_role%20(uid,%20role)%20VALUES%20(110359024,%200)
UPDATE%20user_database.user_role%20SET%20role%20=%202%20WHERE%20uid%20=%20100100

由于操作的数据库权限等级很高,建议使用者现在本地数据库做测试。

通过以上方法,你应该能够成功发送 curl 请求,而不会遇到 Bash 语法错误。


5、扩展修改数据库表结构语句


现阶段数据库表 user_database.user_role 只有 uid 一个主键,要将表中的 role 字段与现有的 uid 字段一起设置为主键,可以使用 ALTER TABLE 语句来修改表结构。

  • 删除现有的主键:如果 uid 已经是主键,首先需要删除现有的主键。
    ALTER TABLE user_database.user_role DROP PRIMARY KEY;
    
  • 添加新的复合主键:将 uidrole 一起设置为复合主键。
    ALTER TABLE user_database.user_role ADD PRIMARY KEY (uid, role);
    
  • 设置 role 不能为空
    ALTER TABLE private_quotation_db.user_role MODIFY role INT NOT NULL;
    

对应的 curl 命令

  • 删除现有的主键

    curl 'http://localhost:8086/system/operateDataBase?sql=ALTER%20TABLE%20user_database.user_role%20DROP%20PRIMARY%20KEY'
    
    ALTER%20TABLE%20user_database.user_role%20DROP%20PRIMARY%20KEY
    
  • 添加新的复合主键

    curl 'http://localhost:8086/system/operateDataBase?sql=ALTER%20TABLE%20user_database.user_role%20ADD%20PRIMARY%20KEY%20(uid,%20role)'
    
    ALTER%20TABLE%20user_database.user_role%20ADD%20PRIMARY%20KEY%20(uid,%20role)
    
  • 设置 role 不能为空

    curl 'http://localhost:8086/system/operateDataBase?sql=ALTER%20TABLE%20user_database.user_role%20MODIFY%20role%20INT%20NOT%20NULL'
    
    ALTER%20TABLE%20user_database.user_role%20MODIFY%20role%20INT%20NOT%20NULL
    

相信大家看完这篇内容之后,应该会使用这个技巧了,具体的语句不会写可以问以下对应的 AI 软件,祝大家开发愉快。

相关文章:

  • 数据作为新生产要素,如何实现价值变现?
  • 中国250米土壤PH(H2O)值数据
  • 【神经网络与深度学习】训练集与验证集的功能解析与差异探究
  • LHA7928国产芯片代替兼容ADS1118
  • websheet 之 HTML使用入门
  • CAD版本之——DwgVersion 与 AutoCAD 版本的对应关系
  • Cursor 配置 MCP Tool
  • HTMLcss实现网站抽奖
  • # 构建词汇表:自然语言处理中的关键步骤
  • Cesium实现地形可视域分析
  • leetcode0106. 从中序与后序遍历序列构造二叉树-medium
  • @Transactional的一点理解
  • 专业软件开发全流程实践指南
  • BUUCTF-[ACTF新生赛2020]SoulLike
  • DbCreateHelper数据库创建指南
  • SQL进阶知识:八、性能调优
  • C语言面试高频题——define 和typedef 的区别?
  • 施磊老师基于muduo网络库的集群聊天服务器(七)
  • 全链路自动化AIGC内容工厂:构建企业级智能内容生产系统
  • 32.768kHz晶振详解:作用、特性及与其他晶振的区别
  • 网贷放款后自动扣除高额会员费,多家网贷平台被指变相收取“砍头息”
  • 今年一季度全国结婚登记181万对,较去年同期减少15.9万对
  • 因商标近似李小龙形象被裁定无效,真功夫起诉国家知产局,法院判了
  • 无视规范开“远端”、企业云端被窃密,国安部:莫让运维成运“危”
  • 小马智行彭军:今年是Robotaxi量产元年,有望3年后盈亏平衡
  • 白宫称中美贸易协议谈判取得进展,外交部回应