数据操作记录的存储方法、系统、装置及设备
技术领域
本说明书实施例涉及信息技术领域,尤其涉及数据操作记录的存储方法、系统、装置及设备。
背景技术
在数据库服务中,数据库连接接口已经广泛使用,常见的包括java数据库连接(Java DataBase Connectivity,JDBC)以及开放数据库连接(Open DatabaseConnectivity,ODBC)。通过数据库连接接口可以使用统一的结构化查询语言(StructuredQuery Language,SQL)对不同类型的数据库(包括异构数据库)进行数据操作。
在这样的情形下,用户在通过数据库连接接口访问不同类型的数据库时会产生相应的操作记录以及结果,这些操作记录以及结果有必要存储起来,并且不会被篡改,以备查询。基于此,需要一种不易被篡改的数据操作记录的存储方案。
发明内容
本申请实施例的目的是提供一种对数据库连接接口的数据操作数据实现不易被篡改的存储方案。
为解决上述技术问题,本申请实施例是这样实现的:
一种数据操作记录的存储方法,应用于包含数据库连接接口和存储服务端的系统中,包括:
数据库连接接口,接收对于目标数据库的操作指令;
数据库连接接口,发送所述操作指令至目标数据库,接收目标数据库对于所述操作指令的返回结果;
数据库连接接口,生成包含所述操作指令和返回结果的数据记录,发送所述数据记录至存储服务端,其中,所述操作指令为结构化查询语言SQL格式;
存储服务端,接收所述数据记录,确定各数据记录的哈希值;
存储服务端,当达到预设的成块条件时,确定待写入数据块中的各数据记录,生成包含数据块的哈希值和数据记录的第N个数据块,具体包括:
当N=1时,初始数据块的哈希值和块高基于预设方式给定;
当N>1时,根据待写入数据块中的各数据记录和第N-1个数据块的哈希值确定第N个数据块的哈希值,生成包含第N个数据块的哈希值和各数据记录的第N个数据块,其中,数据块的块高基于成块时间的先后顺序单调递增。
对应的,本说明书实施例还提供一种数据操作记录的存储系统,包含数据库连接接口和存储服务端,在所述系统中,
数据库连接接口,接收对于目标数据库的操作指令,发送所述操作指令至目标数据库,接收目标数据库对于所述操作指令的返回结果,生成包含所述操作指令和返回结果的数据记录,发送所述数据记录至存储服务端,其中,所述操作指令为结构化查询语言SQL格式;
存储服务端,接收所述数据记录,确定各数据记录的哈希值;当达到预设的成块条件时,确定待写入数据块中的各数据记录,生成包含数据块的哈希值和数据记录的第N个数据块,具体包括:
当N=1时,初始数据块的哈希值和块高基于预设方式给定;
当N>1时,根据待写入数据块中的各数据记录和第N-1个数据块的哈希值确定第N个数据块的哈希值,生成包含第N个数据块的哈希值和各数据记录的第N个数据块,其中,数据块的块高基于成块时间的先后顺序单调递增。
对应的,本说明书实施例还提供数据操作记录的存储方法,应用于数据库连接接口中,所述方法包括:
接收对于目标数据库的操作指令;
发送所述操作指令至目标数据库,接收目标数据库对于所述操作指令的返回结果;
生成包含所述操作指令和返回结果的数据记录;
发送所述数据记录至存储服务端,以便存储服务端以块链式的账本存储所述数据记录。
对应的,本说明书实施例还提供一种数据操作记录的存储装置,应用于数据库连接接口中,所述装置包括:
接收模块,接收对于目标数据库的操作指令;
发送模块,发送所述操作指令至目标数据库,所述接收模块还用于,接收目标数据库对于所述操作指令的返回结果;
生成模块,生成包含所述操作指令和返回结果的数据记录;
所述发送模块还用于,发送所述数据记录至存储服务端,以便存储服务端以块链式的账本存储所述数据记录。
通过本说明书实施例所提供的方案,将用户所发送的操作指令以及数据库对于该操作指令所对应的返回结果进行打包,生成相应的一条数据记录,并把该数据记录发送至存储服务端以块链式的账本进行存储,用户可以随时基于哈希值查询相应的数据记录,以及验证整条数据块链上的数据记录是否正确无误,保证了对于数据库的操作记录的透明存储以及完整性,提高用户体验。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本说明书实施例。
此外,本说明书实施例中的任一实施例并不需要达到上述的全部效果。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书实施例中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本说明书实施例所涉及的系统架构示意图;
图2是本说明书实施例提供的一种数据操作记录的存储方法的流程示意图;
图3为本说明书实施例所提供的数据库连接接口方面的一种数据操作记录的存储方法的流程示意图;
图4是本说明书实施例提供的一种数据操作记录的存储装置的结构示意图;
图5是用于配置本说明书实施例方法的一种设备的结构示意图。
具体实施方式
为了使本领域技术人员更好地理解本说明书实施例中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行详细地描述,显然,所描述的实施例仅仅是本说明书的一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员所获得的所有其他实施例,都应当属于保护的范围。
在当前,数据库的应用已经十分广泛,数据库的类型也越来越多样。例如,当前主流的关系型数据库有Oracle、DB2、PostgreSQL、Microsoft SQL Server、MicrosoftAccess、MySQL、浪潮K-DB等等。由于各种数据库的类型不同,相应的,产生了专门用于数据库连接的接口,常见的包括JDBC以及ODBC,其本身是一种用于执行SQL指令的应用程序接口(Application Programming Interface,API),可以为多种不同类型的数据库提供统一访问。换言之,通过数据库连接接口,用户可以通过标准的SQL指令访问不同的数据库,而不必为每一种数据库单独开发一个程序。
在此基础上,数据库连接接口将会接收得到目标数据库(即接收到指令的数据库)对于SQL指令的返回结果,因此,有必要将整个流程中涉及的数据进行不可篡改的存储,以便日后查询验证。如图1所示,图1为本说明书实施例所涉及的系统架构示意图。
以下结合附图,详细说明本说明书各实施例提供的技术方案。如图2所示,图2是本说明书实施例提供的一种数据操作记录的存储方法的流程示意图,应用于包含数据库连接接口和存储服务端的系统中,该流程具体包括如下步骤:
S201,接收对于目标数据库的操作指令。
在数据库连接接口中,不论是JDBC还是ODBC,均允许应用程序以SQL为标准,存取不同数据库的数据以及文件,使得应用程序可以直接操纵数据库中的数据。
在这个过程中,操作指令包括的类型主要有:数据定义语语句(Data DefinitionLanguage,DDL),数据操作语句(Data Manipulation Language,DML),以及,数据控制语句(Data Control Language,DCL)。
例如,一种DDL语句可以是CREATE TABLE表名称(列名称1数据类型,列名称2数据类型,...),通过该语句可以在目标数据库中创建一个相应的关系表。
例如,一种DML语句可以是INSERT INTO table_name,VALUES(value1,value2,value3,...)、通过该语句实现向“table_name”中插入一条新的值为“(value1,value2,value3,...)”的数据记录,这其中,“table_name”和“(value1,value2,value3,...)”即为对应的输入参数。
例如,一种DCL语句可以是GRANT SELECT ON test.user TO'pig'@'host’,通过该语句实现向“用户名为pig的用户”给与“主机host”中的“数据库test”中的“表user”以“select”权限。在该示例中,“host”、“pig”、“test”以及“user”、“SELECT”均为在该指令中的输入参数。
需要说明的是,在实际应用中,SQL指令还包括其它多种形式,例如,DML语句中还包括UPDATE、DELETE等等,DCL语句中还包括REVOKE、DENY等等,本说明书中的SQL指令并不仅限于上述给出的示例。
S203,发送所述操作指令至目标数据库,接收目标数据库对于所述操作指令的返回结果,。
目标数据库在接收到该SQL指令之后,即相应的进行执行。在这个过程中,首先目标数据库会根据指令中的输入参数确定出需要执行的对象,其中指令中所包含的表名、字段、过滤条件、排序等参数均可以作为输入参数。进而在执行过程中会产生相应的输出参数,例如,一个动态的SQL指令如下所示:
set@userId='0001'
set@sql='select*from Student where UserId=”'+@userId+””
exec(@sql)
用于从表“Student”中依据“UserId”逐条获取对应的信息,这个过程中,输入参数即包括“userId='0001',”以及在动态执行过程中,动态的变化而出现的其它的userId,例如“userId='0002'”等等,直至该表的最后一个userId。而对应的输出参数则是在该表格中每个userId所对应的一行记录。
同时,基于输入的SQL指令,目标服务端执行过程中还有可能遇到问题,导致执行过程有误甚至失败,执行结果的状态可以用相应的提示代码示出。
例如,“sqlcode=0,”表示该SQL语句执行成功,执行过程中没有发生错误或者异常。“sqlcode>0”表示执行了该SQL语句,但有异常;“sqlcode<0”表示由于数据库系统、数据库连接接口系统、网络或程序有错误等等。其中的sqlcode不同的取值即为提示代码。
S205,生成包含所述操作指令和返回结果的数据记录,发送所述数据记录至存储服务端。
基于前述,数据库连接接口可以获取得到每条操作指令的具体内容,以及操作指令中所包含的输入参数、目标数据库执行指令所产生的输出参数以及对于最终执行结果的提示代码。从而,数据库连接接口可以生成一条对应于该操作指令的数据记录,数据记录中包括前述的操作指令、输入参数、输出参数以及提示代码。进而,数据库连接接口可以将生成的数据记录发送至存储服务端。
在一种实施例中,数据库连接接口在生成数据记录时,还可以根据操作指令的类型(即是DML、DCL还是DDL语句)分别给与数据记录相应的类型编号,在发送数据记录时携带类型编号一起发送。例如,DML语句编号“01”、DDL语句编号“02”、DDL语句编号“03”等等。
S207,存储服务端,接收所述数据记录,确定各数据记录的哈希值。
S209,存储服务端,当达到预设的成块条件时,确定待写入数据块中的各数据记录,生成包含数据块的哈希值和数据记录的第N个数据块。
所述预设的成块条件包括:待存储的数据记录数量达到数量阈值,例如,每接收到一千条数据记录时,生成一个新数据块,将一千条数据记录写入块中;或者,距离上一次成块时刻的时间间隔达到时间阈值,例如,每隔5分钟,生成一个新数据块,将在这5分钟内接收到的数据记录写入块中。
此处的N指的是数据块的序号,换言之,在本说明书实施例中,数据块是以块链的形式,基于成块时间的顺序先后排列,具有很强的时序特征。其中,数据块的块高基于成块时间的先后顺序单调递增。块高可以是序号,此时第N个数据块的块高即为N;块高也可以其它方式生成,例如,将成块时间对称加密转换成相应的单调递增的大整型数据(一般为12至15位),使用大整型数据做为数据块的块高。
当N=1时,即此时的数据块为为初始数据块。初始数据块的哈希值和块高基于预设方式给定。例如,初始数据块中不包含数据记录,哈希值则为任一给定的哈希值,块高blknum=0;又例如,初始数据块的生成触发条件与其它数据块的触发条件一致,但是初始数据块的哈希值由对初始数据块中的所有内容取哈希确定。
当N>1时,由于前一数据块的内容和哈希值已经确定,则此时,可以基于前一数据块(即第N-1个数据块)的哈希值生成当前数据块(第N个数据块)的哈希值,例如,一种可行的方式为,确定每一条将要写入第N个块中的数据记录的哈希值,按照在块中的排列顺序,生成一个默克尔树,将默克尔树的根哈希值和前一数据块的哈希值拼接在一起,再次采用哈希算法,生成当前块的哈希值,以及还可以根据默克尔树的根哈希值和其它一些元数据(例如版本号、数据块的生成时间戳等等)生成当前快的哈希值。又例如,还可以按照块中数据记录的顺序进行拼接并取哈希得到整体数据记录的哈希值,拼接前一数据块的哈希值和整体数据记录的哈希值,并对拼接得到的字串进行哈希运算,生成数据块的哈希值。
在每一个数据块中,其包含用于存储元数据的块头,和,用于存储数据记录的块体。数据块中的块头可以用于存储诸如父哈希、自身的块哈希值、版本号、数据记录的根哈希、时间戳等等。当然,块头的格式是可以基于业务需要进行自定义的,其还可以包含一些其它的信息,例如,用于描述数据记录状态的状态数组等等。而块体中则用于存储数据记录的明文或者数据记录的哈希值。
数据记录的哈希值和数据块的哈希值可以返回给数据库连接接口,以便查询。
通过前述的数据块的生成方式,每一个数据块通过哈希值确定,数据块的哈希值由数据块中的数据记录的内容、顺序以及前一数据块的哈希值决定。用户可以随时基于数据块的哈希值发起验证,对于数据块中任何内容(包括对于数据块中数据记录内容或者顺序的修改)的修改都会造成在验证时计算得到的数据块的哈希值和数据块生成时的哈希值不一致,而导致验证失败,从而实现了中心化下的不可篡改。换言之,数据库连接接口通过前述方式存储了每次操作的全部信息,并且以不可篡改的方式进行了存储,实现了数据库连接接口对于数据库操作的透明管理。
在一种实施例中,存储服务端在接收到数据记录时,还可以根据数据记录中操作指令的类型进行分类存储,即在同一数据块中只写入包含同一操作指令类型的数据记录,以便进行日后的查询。具体的实现方式可以是和数据库连接接口事先定义通讯协议,以使得存储服务端可以直接读取数据记录中的内容,从事实现对于操作指令类型的识别;另一种方式则可以基于数据记录所携带的操作指令类型的编号,以实现分类。
通过本说明书实施例所提供的方案,将用户所发送的操作指令以及数据库对于该操作指令所对应的返回结果进行打包,生成相应的一条数据记录,并把该数据记录发送至存储服务端以块链式的账本进行存储,用户可以随时基于哈希值查询相应的数据记录,以及验证整条数据块链上的数据记录是否正确无误,保证了对于数据库的操作记录的透明存储以及完整性,提高用户体验。
对应的,本说明书实施例还提供一种数据操作记录的存储系统,包含数据库连接接口和存储服务端,在所述系统中,
数据库连接接口,接收对于目标数据库的操作指令,发送所述操作指令至目标数据库,接收目标数据库对于所述操作指令的返回结果,生成包含所述操作指令和返回结果的数据记录,发送所述数据记录至存储服务端,其中,所述操作指令为结构化查询语言SQL格式;
存储服务端,接收所述数据记录,确定各数据记录的哈希值;当达到预设的成块条件时,确定待写入数据块中的各数据记录,生成包含数据块的哈希值和数据记录的第N个数据块,具体包括:
当N=1时,初始数据块的哈希值和块高基于预设方式给定;
当N>1时,根据待写入数据块中的各数据记录和第N-1个数据块的哈希值确定第N个数据块的哈希值,生成包含第N个数据块的哈希值和各数据记录的第N个数据块,其中,数据块的块高基于成块时间的先后顺序单调递增。
进一步地,所述操作指令的类型包括数据定义语句DDL、数据操作语句DML或者数据控制语句DCL;所述返回结果包括对于所述操作指令中输入参数所对应的输出参数,以及,对于所述操作指令的执行结果的提示代码;相应的,所述数据库连接接口,生成包含所述操作指令、操作指令中的输入参数、返回的输出参数和所述提示代码的数据记录。
进一步地,存储服务端,确根据所述数据记录的中操作指令的类型,确定待写入数据块中的数据记录,其中,待写入数据块中的数据记录的操作指令的类型相同。
进一步地,所述数据库连接接口,确定所述操作指令的类型所对应的类型编码,生成包含所述操作指令和返回结果的数据记录,其中,所述数据记录携带有所述类型编码,以便存储服务端进行操作指令的类型识别。
进一步地,所述预设的成块条件包括:待存储的数据记录数量达到数量阈值;或者,距离上一次成块时刻的时间间隔达到时间阈值。
对应的,本说明书实施例还提供一种数据操作记录的存储方法,应用于数据库连接接口中,如图3所示,图3为本说明书实施例所提供的数据库连接接口方面的一种数据操作记录的存储方法的流程示意图,所述方法包括:
S301,接收对于目标数据库的操作指令;
S303,发送所述操作指令至目标数据库,接收目标数据库对于所述操作指令的返回结果;
S305,生成包含所述操作指令和返回结果的数据记录;
S307,发送所述数据记录至存储服务端,以便存储服务端以块链式的账本存储所述数据记录。
对应的,本说明书实施例还提供一种数据操作记录的存储装置,应用于数据库连接接口中,如图4所示,图4是本说明书实施例提供的一种数据操作记录的存储装置的结构示意图,包括:
接收模块401,接收对于目标数据库的操作指令;
发送模块403,发送所述操作指令至目标数据库,所述接收模块401还用于,接收目标数据库对于所述操作指令的返回结果;
生成模块405,生成包含所述操作指令和返回结果的数据记录;
所述发送模块403还用于,发送所述数据记录至存储服务端,以便存储服务端以块链式的账本存储所述数据记录。
本说明书实施例还提供一种计算机设备,其至少包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,处理器执行所述程序时实现图3所示的数据操作记录的存储方法。
图5示出了本说明书实施例所提供的一种更为具体的计算设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
本说明书实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现图3所示的数据操作记录的存储方法。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书实施例可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书实施例的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书实施例各个实施例或者实施例的某些部分所述的方法。
上述实施例阐明的系统、方法、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机,计算机的具体形式可以是个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件收发设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任意几种设备的组合。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于方法实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的方法实施例仅仅是示意性的,其中所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,在实施本说明书实施例方案时可以把各模块的功能在同一个或多个软件和/或硬件中实现。也可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述仅是本说明书实施例的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本说明书实施例原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本说明书实施例的保护范围。