最新国测结果怎么看?来自数据库老将的全面解读

指尖上的架构 2024-10-09 02:44:53

9月30日,最新一批数据库国测的结果发布了。原本笔者以为这个结果要等到10月中下旬才会发,没想到在9月份的最后一天居然发布了。从这个事件也可以看出国家推进数据库国产化的紧迫程度。

谈到国测结果必然要了解国测的目的是什么,它有什么作用?其实国测是为了确定哪些数据库产品是安全可靠的,可以应用于一些关键基础设施系统。

国测的安全可靠级别有四级,第一级最低,第四级最高。通过国测可以给出一个国家层面认可的安全可靠数据库的清单。这个清单可以用于确定一些党政、国有企业等使用的数据库是否属于信创数据库;可以用于一些政府文件规定的表内产品的范围。如果您的企业或者单位对采购有一些政策规定要求,必须使用表内产品,那么这个表内指的就是国测的清单。有些财政补贴也是要根据清单上的产品才能合规,那这个清单也就是今天我们讨论的清单。

对于大多数要做数据库信创的企业来说,这个清单可能是唯一的标准。如果有人说他们拿到了某某评测结果,是安全可控的,那么他们的安全可控和国家层面的政策指的不是同一件事情。当然对于一些特殊行业,比如说军队、安全部门等等,他们的安全要求更高,会超出国测的标准。

好了,前面我们介绍了国测以及国测清单的一些基本的概念以及如何来使用它,下面笔者就带大家解析一下这次国测清单的详细情况。

首先说明的是国测的时间有效期是三年,因此去年发布的国测结果其有效期会到2026年的12月份。所以现在在表内的数据库产品应该包含了第1期的结果和本期结果,二者的合集是最终的结果。有些去年通过国测的数据库产品本次并没有参加测试,不过这些产品也应该在当前有效的清单里。而有些去年通过的产品,今年也送测了,但是大家可以看到有一个明显的特点,这些产品送测的版本和去年是不一样的,一般是拿出了最新版本去送测。

本次的清单和上一次的清单有些不同,本次清单分为集中式和分布式两个部分,而去年都是集中式。大家可以看到有些厂商在本次测试中通过了多款产品,其中有的是分布式,有的是集中式,大家应该把这些产品看成不同的数据库产品。另外一点大家要注意的是,本次测试的结果中级别有二级有一级,其中华为的集中式数据库获得了安全可靠二级认证,这是目前认证的最高级别。

按照国家相关政策,国测结果是相当严格的,数据库产品厂商、数据库产品的名称、版本号都是十分严格的。

比如阿里云PolarDB数据库管理软件(分布式版)V2.0通过了国测,有些人可能认为只要是PolarDB就是安可产品,实际上,PolarDB有PolarDB-O、PolarDB-PG、PolarDB-M、PolarDB-X,这四个产品中只有PolarDB-X是正主,PolarDB-O是去年国测通过“阿里云PolarDB数据库管理软件(集中式版)V2.0”,而PolarDB-PG是PolarDB-O内核类似的近亲,PolarDB-M虽然和PolarDB-X是近亲,但那是集中式数据库,和本次通过的产品明显不同。对于信创要求比较严格的单位在选择数据库产品的时候,一定要认真分析,别入了坑。

如果大家已经明白了国测的一些基本情况,以及结果的一些应用场景,那么下面我们就可以看具体的数据了。为了方便起见,我把去年和今年的结果合并在一起,给大家做了一张表格参考。通过以下这张表格,大家就可以获得全面的信息了。

从版本上看,以OceanBase为例,目前OceanBase通过国测的版本是OB V4,那么目前国内信创使用较多的OB 3.X版本严格上来说是不符合的。因此这些使用OB 3.X的企业,如果要做严格的信创评估,必须将OB 3.X升级到OB V4,另外一个渠道就是用户要求原厂将OB V3也通过国测。

总结:28个数据库(含多个版本),属于16个数据库厂商,25个独立产品。其中PolarDB(2个产品)和华为的1个产品主打云上(公有云、私有云),其它22个产品将在线下市场展开激烈的厮杀。

作者丨白鳝

来源丨公众号:白鳝的洞穴(ID:baishan755)

*仅为提供参考和学习交流,不代表dbaplus社群立场!dbaplus社群欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn

社死!刚入职就把数据库删了,事故原因尴尬又奇葩……

2024-09-27 10:07·dbaplus社群

一、offer收割机,就职新公司

5年前的就业环境非常好,当时面试了很多家公司,收到了很多 offer。最终我决定入职一家互联网教育公司,新的公司福利非常好,各种零食随便吃,据说还能正点下班,一切都超出我的期望,“可算让我找着神仙公司了”,我的心里一阵窃喜。

在熟悉环境之后,我趁着上厕所的时候,顺便去旁边的零食摊挑了点零食。接下来的一天里,我专注地配置开发环境、阅读新人文档,当然我也不忘兼顾手边的零食。

入职几天后 ,领导给安排了一个小需求,我和同事沟通完技术方案后,就开始开发了。

二、单元测试有点奇怪

完成开发后,我决定写个单元测试验证下,在研究单元测试代码后,我发现这种单测写法和我之前的写法不太一样。

这家公司的单测好像没有启动整个项目,仅加载了部分类,而且不能访问测试环境数据库~ 于是我决定按照前东家写单测的方式重新写单元测试。

于是我新增了一个单测基类,在单测中启动整个SpringBoot,直接访问测试环境数据库。然而也并不是很顺利,启动阶段总是会遇到各种异常报错,需要一个一个排查…… 所幸项目排期不紧张,还有充足时间。

我做梦也没有想到,此刻,已经铸成大错。

三、故障现场

我身边的工位旁慢慢地聚集了越来越多的人,本来我还在安安静静的调试单元测试,注意力不自觉的被吸引了过去。

“测试环境为什么这么多异常,访问不通啊。到处都是 500 报错”,不知道谁在说话。

“嗯,我们还在排查,稍等一下”,我旁边的同事一边认真排查日志,一边轻声回复道。

“为什么数据库报的异常是, 查不到数据呢?” ,同事在小声嘀咕,然后打开 命令行,立即登上 MySQL。

我亲眼看着他在操作,奇怪的是数据库表里的数据全部被删掉了,其他的几个表数据也都被删除了。

简直太奇怪了,此刻的我还处于吃瓜心态。

有一个瞬间我在考虑,是否和我执行的单元测试有关系?但我很快就否决掉了这个想法,因为我只是在调试单元测试,我没有删数据库啊,单测里也不可能删库啊。我还在笑话自己 胡思乱想……

很快 DBA 就抱着电脑过来,指着电脑说,你们看这些日志,确实有人把这些表删除了。

"有 IP 吗,定位下是谁删除的, 另外线上环境有问题吗?”,旁边的大组长过来和 DBA 说。

“嗯,我找到ip 了,我找运维看下,这个ip是谁的”。DBA 回复道。

四、庭审现场

当 DBA 找到我的时候,我感到无辜和无助,我懵逼了,我寻思我啥也没干啊,我怎么可能删库呢。(他们知道我刚入职,我现在怀疑:那一刻他们可能会怀疑 我是友商派过来的卧底、间谍,执行删库的秘密任务)

经过一系列的掰扯和分析,最终定位 确实是我新增的单元测试把数据库删了。

五、故障原因

需要明确的是,原单元测试执行时不会删除数据库;测试环境启动时也不会删除数据库。

只要在单元测试中连接测试数据库,就会删除掉数据库的所有数据。为什么呢?

1、为什么单元测试删除了所有数据?

原单元测试 使用的是 H2 内存数据库,即Java 开发的嵌入式(内存级别)数据库,它本身只是一个类库,也就是只有一个 jar 文件,可以直接嵌入到项目中。H2数据库又被称为内存数据库,因为它支持在内存中创建数据库和表。所以如果我们使用H2数据库的内存模式,那么我们创建的数据库和表都只是保存在内存中,一旦应用重启,那么内存中的数据库和表就不存在了。 所以非常适合用来做单元测试。

H2 数据库在启动阶段,需要执行用户指定的 SQL 脚本,脚本中一般包含表创建语句,用来构建需要使用的表。

但是我司的 SQL 脚本除了创建表语句,还包含了删除表语句。即在创建表之前先删除表。为什么呢?据他们说,是因为这个 SQL 脚本可能会重复执行,当重复执行时创建表语句 会报错。所以他们在创建表之前,先尝试删除表。这样确保 SQL 脚本可重复执行。( 其实可以用 Create if not exists )

故障的原因就是:测试数据库执行了这个删表再建表的 SQL 脚本,导致所有数据都被清除了。

2、为什么测试数据库会执行这条 SQL 脚本呢?

1) 我新建的单元测试把H2 内存数据库换成了测试数据库。

2) spring.data.initialize=默认值为 true;默认情况下,会自动执行 sql 脚本。

所以测试数据库 执行了 SQL 脚本。

3、为什么在测试环境正常启动时,没有问题,不会删除所有数据呢?

只有单测引入测试数据库才会出问题,在测试环境正常启动项目是没问题的。

当编译项目时,测试目录下的文件、代码和正式代码编译后的结果不会放到一起。因为 SQL脚本被放在了 测试目录下, 所以正式代码在测试环境启动时,不会执行到这个 SQL脚本,自然不会有问题。

六、深刻教训

最终数据被修复了,DBA有测试数据库的备份,然而快照并非实时的,不可避免地还是丢失了一部分数据。

所幸的是出问题的是测试环境,并非线上环境。否则,我会不会被起诉,也未可知。

后续的改进措施包括:

收回了数据库账户的部分权限,只有管理账户才可以修改数据库表结构。代码中执行 DML语句的账户不允许执行 DDL 语句。DBA 盘点测试数据库的快照能力,确保快照间隔足够短,另外新增一个调研课题:删库后如何快速恢复,参照下其他公司的方案。所有的项目 spring.data.initialize 全部声明为 false。不自动执行 SQL 脚本SQL脚本一律不许出现 删除表的语句。SQL不能重复执行的问题,想其他办法解决。另外的一个项目急需人手,把新来的那谁 调到其他项目上

这可能是程序员们在技术上越来越保守的原因……不经意的一个调整可能引发无法承受的滔天巨浪

作者丨五阳

来源丨网址:https://juejin.cn/post/7412490391935893541

*本文首发于稀土掘金,dbaplus社群已取得作者授权,进行原创发布。欢迎广大技术人员投稿,投稿邮箱:editor@dbaplus.cn

活动推荐

为了和大家一起探索AI相关技术在大数据、数据资产管理、数据库、运维等领域的最佳落地方式,挖掘由此激发的软件发展和技术进步,第九届DAMS中国数据智能管理峰会将于2024年11月29日在上海举办,携手一众产学研界技术领跑单位,带来新思路、重实践、可落地的全日干货盛宴。

活动详情:

0 阅读:9

指尖上的架构

简介:感谢大家的关注