首页 > 数据库 >SQL 审核到底审了个什么 ? 三种角度三种格局

SQL 审核到底审了个什么 ? 三种角度三种格局

时间:2023-06-19 17:08:18浏览次数:38  
标签:SQL 审了 数据库 规则 问题 三种 审核 软件


SQL 审核到底审了个什么 ? 三种角度三种格局_数据库

SQL 审核到底审了个什么 ? 三种角度三种格局_mysql_02

SQL 审核到底审了个什么 ? 三种角度三种格局_mysql_03

最近在搞SQL 审核的工作,从开始到目前有3个月的时间,

随着时间的推移从想法很简单认为这个事情很简单,到目前

的认知,还是希望能分享一下。

首先SQL审核到底是从技术入手,还是从规范入手,甚至从

管理制度入手,这最终会导致你的项目的影响力和最后的成

功的概率比。

为什么要进行SQL审核,答案可以归结为

1 公司的规模比较大,已经到了通过人工无法进行审核保证SQL符合一定的规范和安全的需要,整体的控制处于失控的状态

2  公司本身没有SQL 审核的流程,想通过软件达到规范开发SQL撰写,提高软件质量,以及开发SQL 可控的理想状态

SQL 审核到底审了个什么 ? 三种角度三种格局_mysql_04

在从三个角度来阐述前,先将SQL 审核 和 数据库审计分清

楚, SQL 审核核心是针对开发上线的SQL语句进行检测, 数据

库审计是针对DBA 或运维人员对数据库的操作进行检测和记

录,方便后面找问题(清算某些不规范的操作).所以这两个东西

没有任何关系, 针对的人员和场景都是不同的,工作的原理和

部署的方式和管理制度都是不同的.

SQL 审核到底审了个什么 ? 三种角度三种格局_mysql_05

所以我们今天要说的是SQL审核,是针对开发和项目规范,保证

软件上线的质量的一种工作方式和方法的统称.

下面从三个角度来看SQL审核

SQL 审核到底审了个什么 ? 三种角度三种格局_大数据_06

SQL 审核到底审了个什么 ? 三种角度三种格局_mysql_07

SQL 审核到底审了个什么 ? 三种角度三种格局_大数据_08

1  技术层面, 从技术层面来看,SQL 软件要达标的满足以下几点

     1.1  SQL 审核软件的支持的数据库种类的问题

     1.2  SQL 审核软件安装的便利性和侵入性的问题

     1.3  事前审核的接入的问题

     1.4  事后审核方法的问题

     1.5  软件是否带有流程模块,或对接相关其他的OA系统

     1.6  软件是否能进行简单的自定义的规则的工作

     1.7  软件其他附加的功能,如慢查询监控,或者历史记

录, SQL自动执行和定 时执行,白名单,旁路审核, 数据库容量

提示和特殊语句的给出等等

      1.8 与现行的开发系统对接,例如 Jekenis , mybatis, 

openAPI 等方面的支持和自动获取SQL 语句的方式.

从技术的层面来看SQL 审核, 其实能完全能满足功能的自研,

或者外部购买的系统都未必能满足以上的所有要求, 但考虑

这些要求是,SQL 审核的核心吗

     1.9  SQL审核可视化,可度量化,可历史化的功能需求

SQL 审核到底审了个什么 ? 三种角度三种格局_人工智能_09

SQL审核的核心到底是什么?

SQL 审核的核心, ---- 规则

SQL 审核到底审了个什么 ? 三种角度三种格局_人工智能_10

SQL 审核到底审了个什么 ? 三种角度三种格局_java_11

规则是什么,可以表述为SQL的规范. 那么每个单位的SQL

的规范是一致的吗,或者大部分都一致吗?  经过我们这几个月

的调研和供应商的沟通中,发现了其中的问题, 规则基本上多

数银行的规则都不一样,有的大型银行只有15条规则, 有

的可能有几十条, 那么规则是越多越好,大多数人的想法估计

是的,规则自然是越多越好,管理的越严格越好. 实际上我们并

不是这样认为的,可落地的规则,深入人心规则是初步推进项目

最好的规则,切记贪大求全.

SQL 审核到底审了个什么 ? 三种角度三种格局_人工智能_12

例如:我们下面列一些规则看看如何

1   MYSQL SQL 中不允许一个表查询在一个SQL 出现两次的情况  (其实就是查询和子查询都带有这个表)

2   POSTGRESQL 不允许使用CHAR 模式的字段

3   MONGODB 不能出现没有ISODATE的collection

当然这上面的原理和来源就不说了,懂得自然懂.

SQL 审核到底审了个什么 ? 三种角度三种格局_数据库_13

那么规则在实现中遇到最大的问题是什么, 我们认为规则守不

住就是最大的问题,这说明两个问题, 

1 制定的规则本身就有问题

2 目前的规则对于目前的开发水平,要求过高

 例如 上面MYSQL 的规则,实际上有些语句通过添加索引,也

可以进行相关的优化和问题的解决,那么这样的规则在初期可

以有,也可以没有, 当我们发现系统中由于没有这个规则,引起

了问题后,我们在将问题,反哺规则,这样规则的说服力就大了.

SQL 审核到底审了个什么 ? 三种角度三种格局_java_14

SQL 审核到底审了个什么 ? 三种角度三种格局_java_15

那么规则就可以分为两种  

1  与数据库性能有关的   (包含表设计)

2  与数据库性能无关  例如库名必须小写,  表名必须小写, 这

些和性能没有什么关系,和整体的规划和计划有关.

那么有了规则,SQL 审核软件实施起来就没有后顾之忧了?  

NO NO NO , 其实SQL 审核软件实施关键的问题是管

理.

SQL 审核到底审了个什么 ? 三种角度三种格局_人工智能_16

SQL 审核到底审了个什么 ? 三种角度三种格局_人工智能_17

SQL 审核到底审了个什么 ? 三种角度三种格局_mysql_18

不少单位都想通过SQL 审核软件来改变软件质量差,软件质

量在数据库方面无法把控的情况, 但恰恰忘记了一点, 最终这

个软件如何进行实施,和落地的问题,规则列了一大堆,最终还

是没有控制住软件的SQL质量.

那么这个事情就又能讲出一个故事,关于如何实施的事情,实施

本身又能分出三种类型

SQL 审核到底审了个什么 ? 三种角度三种格局_人工智能_19

1   事前审核

2   事中审核

3   事后审核

三种实施的方式各有各的好处和特点,也有各自的无奈, 大部

分SQL软件的供应商都推荐事前审核, 事前审核就是在软件开

发的初期, 就将SQL 审核软件介入,边开发边审核,在最终交付

上线的时候,给付的软件在SQL方面是基本合格的.

事中审核,其实可以理解为在UAT系统部署要测试软件的过

程中,提供SQL语句,或者在上线UAT后,通过软件来扫描系统

正在运行的语句.通过这个过程发现问题,修改问题

事后审核,在系统上线后,对系统进行扫描,发现有问题的语句,

并进行修改.

SQL 审核到底审了个什么 ? 三种角度三种格局_java_20

大部分银行也认为自己应该通过事前审核的方式介入管理, 可

问题在于管理和各种非技术的问题,导致事前审核无法落地, 

例如数据库组织在公司IT部门内部,没有分量,说话和放屁一样,

那么事前审核能行得通的可能性就比较低,并且没有对开发的

要求,或者项目并未对此有要求,做到事前审核的可能性就更低

了.

SQL 审核到底审了个什么 ? 三种角度三种格局_java_21

事中审核,事中审核可能是大部分公司的现状,在做用户测试的

时候,开始提交SQL审核,并且在系统内进行扫描,发现问题,提

出问题,解决问题. 看上去也很美,可软件设计中有些SQL是无

法更改的, 主要的原因也可以从,技术本身,和 技术以外两个方

面考虑.

SQL 审核到底审了个什么 ? 三种角度三种格局_mysql_22

技术本身,一个表设计已经定了,那么SQL的撰写的方式也大部

分定了,如果在审核过程中,发现问题,想改可能就比较困难,没

有那么方便了.

技术以外, 那就是管理的问题,SQL 改写可能消耗项目的时间, 

不改后期埋雷,权衡利弊项目上线的时间与改不改就和SQL审

核软件没有什么关系了,和整体的流程和管理有关

SQL 审核到底审了个什么 ? 三种角度三种格局_人工智能_23

事后审核,事后审核其实是一个亡羊补牢的过程,基本上这个时

间在做审核的意义在于将不得不改的,影响核心系统的性能的

问题抛出, 来算算账, 让之前那些放过这些问题SQL 的设计人

员 "肉疼" 一下.  此时能改的就改改,不能改的,那就的想想特

殊手段,做好长时间持久战的问题了,以及怎么应对客户可能投

诉的问题了.

经过几个月的努力,也总结了一些市面常见的主流的SQL审核

系统功能特点,以及"缺陷".  至于规范制度和管理,我们

也大致心里有了 1 2.

SQL 审核到底审了个什么 ? 三种角度三种格局_数据库_24

那么SQL 审核到底审了个什么 !

SQL 审核到底审了个什么 ? 三种角度三种格局_java_25

下图是一个工作的过程

SQL 审核到底审了个什么 ? 三种角度三种格局_大数据_26

 

SQL 审核到底审了个什么 ? 三种角度三种格局_大数据_27

SQL 审核到底审了个什么 ? 三种角度三种格局_大数据_28

SQL 审核到底审了个什么 ? 三种角度三种格局_mysql_29

SQL 审核到底审了个什么 ? 三种角度三种格局_mysql_30

标签:SQL,审了,数据库,规则,问题,三种,审核,软件
From: https://blog.51cto.com/u_14150796/6515948

相关文章

  • --Postgresql 建表疏忽导致的数据无法插入,发现奇怪的问题
    此前在其他的数据库并未注意到这点,POSTGRESQL建立字符字段的时候,可以大量使用TEXT的形式来存储字符。建表的时候粗心在建立表后,插入数据一直报错当时没有注意,认为是符号的错误导致的写入数据的问题,修改了半天insert的语句,报错也改变了最终发现不是insert语句的问题而是建表的时候......
  • SQL SERVER Alway-on 灾难恢复方案 1 2 3
    SQLSERVER 这个数据库估计快被人遗忘了,但实际上很多IT力量薄弱的公司的首选的数据库就是SQLSERVER,大部分人认为他简单,好上手,并且问题少,SQLSERVER本身的高可用方式主要就是Always-on.一般Always-on是三台机器。下面就针对多种情况中的DOWN机后,数据库是否可以恢复正常工......
  • MYSQL client 有了更多的新功能
    MYSQL8 中的client中的新功能,方便在MYSQL的client中操作可以不用在切换到LINUX平台下操作某些LINUX的命令。使用的场景主要在于在MYSQL中操作数据库的命令的适合,同时还想在监控一下当前的性能,之前可能会开两个窗口,在MYSQL8后,这样的事情可能会少不少。到底我们能做什么1 ......
  • POSTGRESQL UPDATE 如何提高I/O 能力
    POSTGRESQL的数据扫描,其实和其他的数据库也无差,无非就是数据块的扫描以及索引的扫描,这里POSTGRESQL数据扫描也叫TUPLESCAN。在POSTGRESQL8.3版本后再HEAP表的修改中,有一个概念叫HOT,通过新的概念提高了堆表的性能,减少了I/O。早起的POSTGRESQL更新的方式是修改索引中的数......
  • POSTGRESQL RC事务处理与ORACLE MYSQL 的区别 --对PGFANS 群里面的问题的分解
    有一个同学在PGFANS群里面提了一个问题,在他实验的某个操作中发现PG和ORACLE使用同样的操作流程后,得到的结果不一致。所以下面准备验证并找到一些可以解释的原因。测试库名test测试表test测试数据id  age 1   202   223   24首先我们要确认 PG的隔离 RC......
  • POSTGRESQL analyze table 到底做了什么与扩展统计
    PostgreSQL 中对表的状态是有单独的命令来进行状态的收集的,到底怎么对表来进行状态的收集,并且都做了什么,我们怎么来依靠这些信息来对查询进行有益的帮助。这些都将在这篇文章里面探讨。首先我们对PG12中,关于Analyze 的注释来仔细的阅读一遍ANALYZE collectsstatisticsabout......
  • POSTGRESQL PG_REWIND 从源代码看功能
    PG_REWIND是PG9.6开始提供的功能,主要的作用在于通过PG_REWIND让PG复制中的数据库快速的与预定的“主库”进行数据同步,而复制的方式是是文件块的方式,并且可以避过重复的数据块。所以复制的速度是快的,在不少的高可用方式中都被作为主库失败后的快速的将主库加入原有集群并作为从......
  • 分布式两大流派 POSTGRESQL -XC 了解一下
    分布式数据库有两大流派,NEWSQLVS POSTGRESQL-XC,NEWSQL的分布式主流的理论来源自GOOGLE的分布式数据库spanner,以及相关理论的白皮书,而令一派的分布式数据库来自于POSTGRESQL-XC,今天我们看看到底POSTGRESQL-XC这个流派的方式是什么,有什么特点,当下那些分布式数据库采用了......
  • POSTGRESQL Postgres-XL 了解一下
    上次分析的POSTGRES-XC的结构, 实际上POSTGRES-X系列一直在发展, POSTGRES除了XC还有XL的高可用的结构.Postgres-XL是一款Postgres-XC升级的产品,如果说PGXC是在PG添加了集群的功能主打OLTP的功能为卖点,PGXL是一款基于PGXC添加了OLAP功能的支持MPP架构的,但不是简单的PO......
  • POSTGRESQL 创建一个表到底有什么说的? 可说的挺多的
    创建一张表,到底有什么说的, 下面是POSTGRESQL创建数据表的官方文档的内容截图. 那我们就往下看,到底我们可以说点什么建表的开头是关于临时表的问题,其中临时表的global和local,在目前的V12的版本中并没有具体的含义,问题1,POSTGRESQL怎么创建一个看似global的temparytab......