企业级SQL开发:如何审核发布到生产环境的SQL性能
自从上世纪 70 年代数据库开始普及以来,DBA 们就不停地遭遇各种各样的数据库管理难题,其中最为显著的,可能就是日常的开发任务中,研发人员们对于核心库进行变更带来的一系列风险。由于针对数据库的数据变更是一项非常常见的任务,几乎所有开发者都会涉及对核心数据库的结构、数据内容的修改,如果企业缺乏有效的数据安全方案,就可能导致一系列严重的问题,例如:
-
删库跑路:没有比这更坏的情况了,笔者知道的实际事件就有好几起,例如某大型房产中介的员工,登录财务系统删除了所有财务数据,直接影响了公司人员的工资发放;又例如某云端商业营销解决方案集团企业,整个数据库被删除,导致集团损失数亿。此类事件不胜枚举,谁也无法预测明天会发生什么,如果没有完善的对策,灾难就可能降临。
近些年,删库跑路事件频发
-
数据泄露:如果公司是我家,那毫无疑问,业务数据就是家里的金库,因为其中包含了大量的敏感信息,如客户的个人身份信息、财务数据、商业机密等。如果没有任何数据安全方案,那无疑就是我家大门常打开(参考索尼一年一度的数据泄露事件),一旦遭遇数据泄露,遭殃的可不仅仅只有公司了,客户那头都够喝一壶的,由此带来的法律责任和声誉问题也不是所有企业都能扛得住的。
因此,在变更 SQL 实际应用到数据库之前,SQL 的审核成为了一项至关重要的任务,需要确保数据库结构和数据的变更是合理、安全、符合规范的。
在此向大家隆重推荐一款数据库管理产品:NineData SQL 任务。
这是一个有效的审核 SQL 变更的解决方案,提供了一系列完善的规范和审批流程,给每一条变更 SQL 设置了层层关卡,包括基于智能化算法,以及 SQL 开发规范的系统预检,以及多级审批功能。
简单介绍一下 NineData SQL 任务
-
预制的超百条 SQL 审核规范:NineData 平台提供了完整的库表结构定义规范、索引规范等,帮助企业内所有开发人员规范使用和变更数据库。
-
定时SQL自动化执行:SQL 任务允许用户设置定时执行 SQL 操作,从而自动完成一系列数据库变更任务。有助于提高效率,特别是对于重复性的、计划性的任务。
-
企业协同数据变更:SQL 任务功能支持多用户协同进行数据变更,通过审批流程和权限管理,不同团队成员可以有序地提交、审批和执行 SQL 任务,确保变更的有序进行,避免冲突和错误。
-
SQL 权限校验:SQL 任务具备权限校验机制,只有具有足够权限的用户才能提交和执行 SQL 任务,防止未授权的操作,加强对数据库的访问控制。
-
审批流程联动:SQL 任务功能集成了审批流程,确保对 SQL 任务的提交和执行进行逐级审批。这种联动的审批流程可以在变更管理中提供额外的安全层,确保变更可追溯。
-
自动数据备份:在您通过 SQL 任务对目标数据源执行更改之前,系统会自动对即将被变更的数据进行数据备份,并保留 7 天时间,在 7 天时间内,您可以随时下载该备份并将数据恢复到变更前的状态,相当于为您的数据提供了一道安全屏障,无需再畏惧数据安全问题。
-
回滚预案填写:随着企业对数据安全与合规性要求的不断提高,数据回滚预案变得不可或缺,因此我们提供了回滚 SQL 填写入口,填写后会永久记录在当前 SQL 任务中,可以在数据出现问题时随时查看并回滚数据。
为了更加一目了然,简单演示一下 SQL 任务的能力
-
步骤一:禁用生产库的 SQL 窗口变更能力
禁用生产库的 SQL 窗口变更能力
关闭后尝试 SQL 窗口执行变更语句,语句被拦截,无法执行。
尝试SQL窗口执行变更后语句语句被拦截
-
步骤二:通过 SQL 任务发布变更
使用NineData通过SQL任务发布变更
为演示 SQL 任务的整体流程,录屏中配置了单级审批。您可以根据实际需求,灵活配置审批流程,要求 SQL 任务在执行之前,通过多级审批,确保每个变更都经过适当的审核和授权。
-
步骤三:审批 SQL 任务
使用NineData审批 SQL 任务
这里可以根据实际情况驳回或通过 SQL 变更的请求。
后记
自从公司引入 NineData 这个产品,发生了好几个积极的变化。
首先是最明显的一个变化,由于 SQL 任务的预审机制,让我这个曾经的背锅侠彻底解放,由于数据库变更可能带来的潜在风险,让我整天压力山大,年纪轻轻老态龙钟,而现在头发也不掉了,人也精神了,自信又回来了。就在前不久,我们公司一个新人程序员由于业务不熟悉,为了给表加一个字段,他的操作居然是 DROP 原表,还好让 SQL 任务给拦了下来,不然我这个 DBA 好卷铺盖走人了。
然后就是 NineData SQL 任务的多级审批机制为我们的团队协作带来了更高效的保障。以前,由于变更 SQL 的责任不够明确,经常会导致沟通不畅,审批流程混乱。而现在,不仅审批流程更加透明准确,同时也提高了团队协作的效率。相关负责人也能够更清晰地了解每个 SQL 变更的具体内容,减少了误解和错误的发生。
最后,严重推荐这款产品,如果你也想和我一样年轻帅气,那信我的准没错!
相关文章:

企业级SQL开发:如何审核发布到生产环境的SQL性能
自从上世纪 70 年代数据库开始普及以来,DBA 们就不停地遭遇各种各样的数据库管理难题,其中最为显著的,可能就是日常的开发任务中,研发人员们对于核心库进行变更带来的一系列风险。由于针对数据库的数据变更是一项非常常见的任务&a…...

linux 手动安装移植 haveged,解决随机数初始化慢的问题
文章目录 1、问题描述2、安装 haveged3、问题解决4、将安装好的文件跟库移植到开发板下 Haveged是一个软件工具,用于生成高质量的熵(Entropy)源,以供计算机系统使用。熵在计算机科学中指的是一种随机性或不可预测性的度量…...

如何使用llm 制作多模态
首先将任何非字符的序列信息使用特殊n个token 编码。 具体编码方法以图像为例子说明: 将固定尺寸图像如256256 的图像分割为1616 的子图像块。 将已知的所有图像数据都分割后进行str将其看做是一个长的字符,而后去重后方式一个词表。 使用特殊1024 个tok…...
k8s(二):Pod
Pod pod 是K8s中最小的可部署单元,用于容纳一个或多个容器。Pod为容器提供了一个共享的环境,包括网络命名空间、存储卷和IP地址。 pod的阶段(phase) Pending: Pod 已被 Kubernetes 系统接受,但有一个或者多个容器尚未创建亦未运行。此阶段包…...
Python 字典详解(dict)
文章目录 1 概述1.1 性质 2 常用方法2.1 以列表返回所有键:keys()2.2 以列表返回所有值:values()2.3 以列表返回所有键值对:items()2.4 返回键对应的值:get()2.5 添加键值对:setdefault()2.6 修改键值对:di…...
IPoIB在国产并行系统上的实现与优化
目录 1 国产异构众核系统 2 相关工作 3 IPoIB在国产并行系统上的实现 3.1 IPoIB协议原理...

东南大学与OpenHarmony携手共建开源生态,技术俱乐部揭牌成立并迎来TSC专家进校园
11月25日,OpenAtom OpenHarmony(以下简称“OpenHarmony”)项目群技术指导委员会(以下简称“TSC”)与东南大学携手,于东南大学九龙湖校区金智楼一楼报告厅举办了“东南大学OpenHarmony技术俱乐部成立仪式暨OpenHarmony TSC专家进校园”活动。此次盛会标志着OpenHarmony开源社区和…...

NPU、CPU、GPU算力及算力计算方式
NVIDIA在9月20日发布的NVIDIA DRIVE Thor 新一代集中式车载计算平台,可在单个安全、可靠的系统上运行高级驾驶员辅助应用和车载信息娱乐应用。提供 2000 万亿次浮点运算性能(2000 万亿次8位浮点运算)。NVIDIA当代产品是Orin,算力是…...

华清远见嵌入式学习——C++——作业6
作业要求: 代码: #include <iostream>using namespace std;class Animal { public:virtual void perform() 0;};class Lion:public Animal { private:string foods;string feature; public:Lion(){}Lion(string foods,string feature):foods(foo…...

k8s安装学习环境
目录 环境准备 配置hosts 关闭防火墙 关闭交换分区 调整swappiness参数 关闭setlinux Ipv4转发 时钟同步 安装Docker 配置Yum源 安装 配置 启动 日志 安装k8s 配置Yum源 Master节点 安装 初始化 配置kubectl 部署CNI网络插件 Node节点 检查 环境准备 准…...
RepidJson将内容写入文件简单代码示例
以下是使用RapidJSON将内容写入文件的示例代码: #include <rapidjson/document.h> #include <rapidjson/writer.h> #include <rapidjson/stringbuffer.h> #include <iostream> #include <fstream>using namespace rapidjson;int mai…...
golang构建docker镜像的几种方式
目前docker支持以下几种方式指定上下文来构建镜像 本地项目路径(如:/tmp/xxx)本地压缩包路径(如:/tmp/xxx.tar)docekrfile文本链接(如:https://x.com/xxx/dockerfile)压…...
golang使用sip协议 用户名和密码注册到vos3000
在Go语言中,要使用SIP协议进行注册,您可以使用第三方库,如github.com/cloudwebrtc/sip。以下是一个简单的示例代码,演示如何使用Go语言中的该库进行基本的SIP注册: 首先,您需要安装该库: go ge…...
第4章 互联网
文章目录 4.1 计算机网络基础 94 4.1.1 计算机网络的基本概念 94 4.1.2 局域网的基本原理 96 4.1.3 局域网协议与应用 98 4.2 Internet 100 4.2.1 TCP/IP 101 4.2.2 TCP/IP应用 106 4.2.3 网络操作系统的功能 112 4.2.4 网络安全的概念 116 4.3 计算机软件编程基础 …...

【JavaWeb】前端工程化(VUE3)
前端工程化(VUE3) 文章目录 前端工程化(VUE3)一、概述二、ECMA6Script2.1 es6的变量和模板字符串2.2 es6的解构表达式2.3 es6的箭头函数2.4 rest和spread2.5 es6的对象创建和拷贝2.6 es6的模块化处理 三、前端工程化环境搭建3.1 N…...
JAVA基础知识:异常处理
异常处理是Java编程中至关重要的一部分,它允许程序在出现错误或异常情况时进行适当的处理,以保证程序的稳定性和可靠性。本文将详细介绍Java中的异常处理机制,并提供相关示例代码,帮助读者更好地理解和应用异常处理的概念和技巧。…...

PostGIS学习教程十:空间索引
PostGIS学习教程十:空间索引 回想一下,空间索引是空间数据库的三个关键特性之一。空间索引使得使用空间数据库存储大型数据集成为可能。在没有空间索引的情况下,对要素的任何搜索都需要对数据库中的每条记录进行"顺序扫描"。索引通…...
LeetCode 13 罗马数字转整数
题目描述 罗马数字转整数 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M …...

【动态规划】LeetCode2111:使数组 K 递增的最少操作次数
作者推荐 [二分查找]LeetCode2040:两个有序数组的第 K 小乘积 本文涉及的基础知识点 二分查找算法合集 分组 动态规划 题目 给你一个下标从 0 开始包含 n 个正整数的数组 arr ,和一个正整数 k 。 如果对于每个满足 k < i < n-1 的下标 i ,都有…...
SpringCloud面试题——Nacos
一:什么是Nacos? 二:服务心跳与服务注册原理? 在spring容器启动的时候,nacos客户端会进行两步操作。 向nacos服务端发送心跳向nacos服务端注册当前服务 服务心跳 客户端在启动的时候,会开启一个心跳线程…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...