用于为关系数据库处理数据库语句的方法和系统与流程

文档序号:11519650阅读:175来源:国知局
用于为关系数据库处理数据库语句的方法和系统与流程
本发明涉及为关系数据库处理数据库语句。
背景技术
:数据库系统通常使用精细粒度访问控制(fgac)机制来控制用户对数据的访问。例如,fgac可以用于限制用户对关系表中的特定行集合的访问。该级别的访问控制对于关系数据访问的所有区域(诸如实用程序)是有利的,而对于诸如select、insert、update和delete等数据操纵语言(datamanipulationlanguage,dml)sql语句尤其有利。在关系数据库系统内实现fgac的传统方法依赖于视图的使用。例如,诸如oracle虚拟私有数据库等“虚拟私有数据库”允许在行和/或列级别限定访问。fgac的其他已知实施方式使用用户会话的上下文属性,通过将谓词添加到查询中来修改sql查询。然而,已知的现有技术解决方案并没有解决由于推断而可能出现的安全问题,即,用户可以使用允许其访问的其他信息,推断存储在数据库中的不允许其访问的数据信息的情况。举个例子来说,假设一个数据库表包含客户信用卡信息,其客户(customers)表具有栏目:姓名(name)、卡号(card_number)、失效日期(exp_date)、起始日期(start_date),并包含以下行:作为fgac机制的一部分,可以定义卡号列的掩码,使得特定用户不能看到该列的整个值。例如,可以将一列掩码定义为xxxx-xxxx-xxxx-####的形式,以使查询为例如:selectname,card_numberfromcustomerswherename=‘smith,john’将为应用了掩码的用户返回以下结果:姓名卡号smith,johnxxxx-xxxx-xxxx-3456然而,利用该fgac机制,用户仍然可能通过适当方式利用精心设计的查询来确定该掩蔽的值。例如,对于同一用户的查询为:selectnamefromcustomerswherecard_numberlike‘1234-5678-9012-%’(%为数据库语言中诸如sql等通配符)将为用户返回以下结果:姓名smith,john因此,由于该用户能够从初始搜索确定该卡号的最后四位数为3456,该用户便能够确定完整的卡号值,即使该用户并无权限看到该卡号。通过该方式,用户可以发现完整卡号值,使用上述类型的连续查询来测试对于初始十二个数字的猜测是否正确。为了进一步强调该问题,可以使用以下形式的连续查询来执行二进制搜索:selectnamefromcustomerswherename=‘smith,john’andcard_number<‘5000-0000-0000-0000’其中在返回结果的情况下,下一个查询将是:selectnamefromcustomerswherename=‘smith,john’andcard_number<‘2500-0000-0000-0000’在未返回结果的情况下,下一个查询将是:selectnamefromcustomerswherename=‘smith,john’andcard_number<‘7500-0000-0000-0000’以此类推。通过该方式,该卡号的初始十二个数字可以最多使用2.(log21,000,000,000)+1=59个查询(通常更少)而识别出来。技术实现要素:根据本发明的第一个方面,提供了一种用于为关系数据库处理数据库语句的计算机实现的方法和计算机程序产品,其中所述数据库包含一个或多个包括一个或多个数据行的表。接收数据库语句。从所述数据库语句中确定谓词集合以用于生成所述数据库语句的结果。从一个或多个表中确定数据行集合以用于生成所述数据库语句结果。获得适用于所述数据行集合中的一个或多个数据行的禁止语句集合。对于所述谓词集合的每个谓词,执行以下步骤:获得适用于所述数据行集合的一个或多个数据行的掩码集合,其中,对于所述掩码集合中的每个掩码,由掩码掩蔽的数据被所述谓词使用;确定所述数据行集合的数据行是否具有适用的禁止语句,以及是否包含由所述掩码集合的掩码掩蔽的数据;以及在所述数据行集合的数据行具有适用的禁止语句并且包含由所述掩码集合的一个掩码掩蔽的数据的情况下,确定所述数据库语句的结果而无需使用将所述谓词应用于所述数据行的结果。根据本发明的第二个方面,提供了一种数据库系统,其包括配置成从客户端设备接收数据库语句的数据库引擎以及与所述数据库引擎通信的至少一个数据库。所述至少一个数据库包括一个或多个数据库表,并且每个表包括一个或多个数据行。所述数据库引擎被配置为:当从所述客户端设备接收到数据库语句时,执行上述方法并将确定的结果返回给所述客户端设备。根据本发明的第三个方面,提供了一种用于为关系数据库处理数据库语句的计算机程序产品。所述数据库包括具有一个或多个数据行的一个或多个表。所述计算机程序产品包括具有计算机可读程序代码的计算机可读存储介质。所述计算机可读程序代码被配置为提供包括数据库引擎和与所述数据库引擎通信的至少一个数据库的数据库系统。所述数据库引擎被配置为从客户端设备接收多个数据库语句。所述至少一个数据库包括一个或多个数据库表。每个表包括一个或多个数据行。所述数据库引擎被配置为:当从所述客户端设备接收到数据库语句时,从所述数据库语句确定谓词集合,以用于生成所述数据库语句的结果;从所述一个或多个表确定数据行集合,以用于生成所述数据库语句的结果;获得适用于所述数据行集合中的一个或多个数据行的禁止语句集合;对于所述谓词集合的每个谓词:获得适用于所述数据行集合的一个或多个数据行的掩码集合,其中对于所述掩码集合中的每个掩码,由掩码掩蔽的数据被所述谓词所使用;确定所述数据行集合的数据行是否具有适用的禁止语句,以及是否包含由所述掩码集合的掩码掩蔽的数据;以及在所述数据行集合的数据行具有适用的禁止语句,并且包含由所述掩码集合的掩码掩蔽的数据的情况下,确定所述数据库语句的结果而无需使用将所述谓词应用于所述数据行的结果;并将确定的结果返回给所述客户端设备。当然,应当理解的是,关于本发明的一个方面描述的特征可以结合到本发明的其他方面中。例如,本发明的方法可以包括参考本发明的计算机系统描述的任何特征,反之亦然。附图说明现在将参照以下附图,仅通过示例的方式描述本发明的优选实施例,其中:图1是根据本发明实施例的数据库系统的示意图;图2是示出当处理数据库语句时,根据本发明实施例的数据库系统的高级操作流程图;图3是示出当应用数据组合禁止时,图2的数据库系统的操作流程图;图4是示出当处理数据库语句时,根据本发明另一个实施例的数据库系统的高级操作流程图;图5是示出当应用数据组合禁止时,图4的数据库系统的操作流程图;图6是示出当处理数据库语句时,根据本发明的另一个实施例的数据库系统的高级操作流程图;以及图7是示出当应用数据组合禁止时,图6的数据库系统的操作流程图。具体实现方式如上所述,根据本发明的第一个方面,提供了一种用于为关系数据库处理数据库语句的计算机实现的方法和计算机程序产品。当根据所述方法确定数据库语句的结果时,其使用的谓词(即,在确定所述结果时其包含的被评估的谓词)和其使用的数据行(即,来自于为所述谓词所适用的经组合的底层数据库表的行)被确定。一个掩码集合和一个禁止语句集合将被预先确定,例如,其由数据库管理员定义,以限制用户应该能够从所述数据库获得的信息。如果存在适用于数据行的禁止语句,并且如果所述数据行被掩蔽,并且所述被掩蔽的数据由所述数据库语句的谓词所使用,则确定所述数据库语句的结果,而不使用将所述谓词应用于所述数据行的结果。以这种方式,通过将所述谓词应用于所述数据行的结果可以推断出的关于被掩蔽的数据的信息不能从所述数据库语句的结果中获得,即使所述被掩蔽的数据本身也不会另外被提供为那些结果的一部分。应当理解的是,当在上文和整个申请中使用时,一个项目的“集合”可以仅由单个项目组成,而不需要由两个或两个以上的项目组成。所述无需使用将所述谓词应用于所述数据行的结果即可确定所述数据库语句的结果,其实现可以通过:从所述数据行集合中移除所述数据行;以及将所述谓词集合应用于所述经修改的数据行集合。当存在适用的禁止语句并且其包含被掩蔽的数据时,删除数据行,通过这种方式,当所述谓词用于确定所述数据库语句的结果时,所述被掩蔽的数据不可用于影响所述谓词的结果,因此不会影响所述数据库语句作为一个整体的结果。因此,将不可能从所述数据库语句的结果中推断出关于所述被掩蔽的数据的任何信息。或者,所述无需使用将所述谓词应用于所述数据行的结果即可确定所述数据库语句的结果,其实现可以通过:从所述谓词集合中移除所述谓词,以及将所述经修改的谓词集合应用于所述数据行集合。当存在适用的禁止语句并且其包含被掩蔽的数据时,从所述谓词集合中移除谓词,通过这种方式,当所述数据库语句的结果被确定时,其将不依赖于所述被掩蔽的数据,因为使用该被掩蔽的数据的谓词(即,其结果依赖于所述被掩蔽的数据的谓词)已经从用于确定所述数据库语句的结果的谓词集合中移除。因此,在所述替代方案中,同样不可能从所述数据库语句的结果中推断出关于所述被掩蔽的数据的任何信息。有利地是,所述禁止语句集合中的每个禁止语句定义了是否所述无需使用将所述谓词应用于所述数据行的结果即可确定所述数据库语句的结果,是通过从所述数据行集合中移除所述数据行或通过从所述谓词集合中移除所述谓词实现的。这使得上述两种方法都可用于单个数据库语句,而使用禁止语句来定义哪种方法用于哪种特定情况。优选地,所述禁止语句集合中的每个禁止语句限定了其应用的数据库语句的类型。例如,每个禁止语句都可以表明其适用于select、insert、update和/或delete数据库语句,或者表明其适用于所有类型的数据库语句。通过该方式,可以实现对禁止语句所适用的数据库语句的精细粒度控制。在这种情况下,优选地,所述禁止语句集合仅仅包括适用于所述数据库语句的禁止语句。这有助于确保在处理数据库语句时仅使用适用的禁止语句。所述禁止语句集合的一个或多个禁止语句可以定义其应用的表的列。这就使得禁止语句仅仅应用于表的特定列。在这种情况下,在确定所述数据行集合的数据行是否具有适用的禁止语句,并且包含被所述掩码集合的掩码掩蔽的数据的步骤中,禁止语句被确定为适用的,仅当其应用于表的列,且其数据被所述掩码掩蔽。可选地和/或另外地,一个或多个禁止语句可以定义其应用的整个表,并且在该情况下,如果所述表的任何列的数据被掩蔽,那么所述一个或多个禁止语句将被确定为适用的。现在参考附图,根据本发明实施例的数据库系统在图1中示出。所述数据库系统1包含数据库引擎2,其与数据库3a和3b通信。客户端设备4与所述数据库引擎2通信,以允许所述客户端设备4的用户向所述数据库引擎2发送查询、数据更新等。所述数据库引擎2适当地使用数据库3a和3b,回答查询并将结果返回到所述客户端设备4,将更新应用到数据库3a和3b,以及所述客户端设备4所需的任何适当的其他任务。在本实施例中,所述数据库系统是一个sql型的关系数据库系统,但是应当理解的是,在另一个实施例中,可以使用不属于sql类型的关系数据库或不属于关系数据库的数据库。为了与所述数据库引擎2通信,所述客户端设备4向所述数据库引擎2提供标识用户的用户凭证。如下所述,所述数据库引擎2可以在确定如何响应从所述客户端设备4发送到数据库引擎2的语句时,使用所述用户的标识,例如,响应于查询,返回何种结果。根据本发明的实施例,用户可以使用应用于数据库(特别是数据库的一个或多个表或视图)的禁止语句,创建数据组合禁止。应当理解的是,通常,数据组合禁止将是由管理员创建,以控制“普通”用户可以访问的数据。这样的语句定义了用户应该能够访问范围,并且具有以下形式:createinterdiction<禁止名称>tostatements(<语句类型>)on<列/表名称>for<授权名称>except<授权名称例外><禁止名称>定义正在被创建的数据组合禁止的名称,其在所述数据库系统1中应当是唯一的。<语句类型>定义待禁止语句的类型,其为以下值中的一个或多个的列表:-select—select访问被禁止;-insert—insert访问被禁止;-update—update访问被禁止;-delete—delete访问被禁止;-all—所有数据库语句类型都被禁止;这相当于选择select、insert、update和delete所有项。<表/列名称>定义所述数据组合禁止所应用的列或表的名称,其中表的名称隐含表述所述数据组合禁止应用于该表的所有列。<授权名称>定义所述数据组合禁止所应用的用户,而<授权名称例外>定义任何例外情况。两者都可以包括一个或多个授权id,并且可以包括用户、群组、角色或public。应当理解的是,这仅仅是可能用到的语法示例,在本发明的其他实施例中,可以使用其他语法,或者,实际上数据组合禁止可以根本不使用数据库语句,而是例如,通过应用程序菜单选项/设置来实现。现参考图2的流程图描述所述数据库系统1在处理数据库语句,特别是数据组合禁止相关的数据库语句时的高级操作。最初,所述数据库引擎2从所述客户端设备4接收语句s,例如,select查询(步骤101)。所述语句s当然由特定的用户做出,其中所述数据库引擎2意识到所述特定的用户,其从连接到所述数据库引擎2时使用的用户凭证提交所述语句s。所述数据库引擎2解析所述语句s(步骤102),并且以常规方式评估所述语句s的构成,以获得一个表结果集合的集合,即,来自用于生成所述语句s结果的底层表的行的集合。在数据库引擎的常规操作中,这些表结果集合将根据所述语句s的定义被组合起来,以产生所述语句s的结果。然而,根据本实施例,所述数据库引擎2在产生所述语句s的结果之前对表结果集合执行以下处理。对于每个表结果集合t(步骤103),考虑s中的每个谓词p(步骤104)。(谓词是语句中的表达式,其计算结果为真或假(或“未知”),例如,对于待返回的结果,where子句的条件需为真)。所述数据库引擎2检查任何数据组合禁止是否相关并应用它们(步骤105),如下详述。(当然,如下所述,哪些数据组合禁止是相关的将取决于提交语句的用户以及语句的内容)。然后考虑s中的下一个谓词p(步骤106),直到所有谓词都已经被考虑完毕。然后,所述数据库引擎2创建覆盖t的s的伪视图v(步骤107),其为通过应用任何相关数据组合禁止的过程获得的表结果集合t的修改版本。凭借与通过常规数据库引擎将原始表结果集合t转换为编译器表述相同的方式,将所述伪视图v转换为编译器表述(步骤108)。然后,考虑下一个表结果集合(步骤109),直到所述语句s的所有的表结果集合已经被考虑完毕。然后,针对所述语句s编译所述表结果集合t对应的所述被编译伪视图v,并以常规方式将其返回给所述客户端设备4(步骤110)。换句话说,在从其表结果集合生成所述语句s的结果之前,首先处理所述表结果集合以给出相应的伪视图,并且从所述伪视图产生所述语句s的结果。应当理解的是,在所述语句s为insert、update或delete语句的情况下,所述数据库3a和/或3b中的相关数据将被适当地更新为编译的一部分,以及被返回到所述客户端设备4的编译形式的适当的结果集合也同样将被适当地更新为编译的一部分。现参照图3的流程图,更详细地描述检查和应用任何相关数据组合禁止到表结果集合t的步骤(步骤105)。如上所述,针对每个表结果集合t,该步骤被应用于所述语句s的每个谓词p。所述数据库引擎2考虑适用于所述表结果集合t的每个掩码m(步骤201)。所述适用的掩码m是作用于所述表结果集合t的列的任何掩码,换句话说,就是掩蔽表中列的值的任何掩码。然后,所述数据库引擎2检查所述谓词p是否引用所述掩码m(步骤203),换句话说,所述谓词p是否使用由所述掩码m掩蔽的所述表中列的值。如果其未引用,则考虑下一个适用的掩码m(步骤209)。另一方面,如果所述谓词p确实使用了由所述掩码m掩蔽的表中列的值,那么所述数据库引擎2就要考虑所述表结果集合t中的每列c(步骤203),并且确定是否存在针对与适用于所述列c相同类型的语句的数据组合禁止(步骤204),即,是否存在具有覆盖语句s的类型的statements子句的数据组合禁止定义,并且在其on的部分提及到所述列。如果不存在,则考虑所述表结果集合t的下一列c(步骤206)。然而,如果存在适用的数据组合禁止,那么就要从所述表结果集合t中移除所述被禁止的行(步骤205),即,满足所述谓词p的所述表结果集合t的行。然后考虑所述表结果集合t的下一列c(步骤207)。一旦所述表结果集合t的所有列都已经被考虑完毕,则如上所述,考虑下一个掩码(步骤207),并且一旦所有掩码都已经被考虑完毕,那么针对所述谓词p将所有相关数据组合禁止应用于所述表结果集合t的步骤就已经完成。如上所述,随后针对所述语句s中使用的其他谓词p重复该过程,直到所有谓词已经完成并且结果已经被处理完毕。如上所述,随后,从该过程中获得的经修改表结果集合t被用于创建所述伪视图v,且所述伪视图被用于生成所述语句s的结果。应当理解的是,在存在适用于整个表而不是单个列(即,所述定义的on子句包括一个表的名称)的数据组合禁止的情况下,并且当检查所述表结果集合的第一列时,这样的数据组合禁止被识别出来,就不再需要针对所述表结果集合的其他列再次进行检查了,因为在同一个表结果集合中对相同数据组合禁止的任何进一步处理都将是无效的,因而是多余的。因此,可以通过保持引用整个表的数据组合禁止的记录来优化该过程。本实施例的数据库引擎2的操作示例如下。在该示例中,通过以下表定义在所述数据库4a中创建数据库表customers:向所述表中指示以下行:insertintocustomersvalues(‘smith,john,‘1234-5678-9012-3456’,‘2020-01-01’,‘2010-01-01);insertintocustomersvalues(‘doe,jane’,‘9876-5432-1098-7654’,‘2019-06-10’,‘2011-06-10’);insertintocustomersvalues(‘bloggs,joe’,‘1357-2468-9135-0246’,‘2018-12-25’,‘2009-03-04’);insertintocustomersvalues(‘mustermann,max’,‘6284-9681-2833-5503’,‘2025-04-04’,‘2014-10-11’);正如以下所理解的,这导致在表customers中具有一些行的集合,其与上文的
背景技术
部分的示例中使用的行相同:然后,在所述表customers的所述卡号列上定义掩码customer_mask;正如以下所理解的,这就类似于上文的
背景技术
部分的示例中使用的所述掩码:createmaskcustomer_maskoncustomerforcolumncard_numberreturn‘xxxx-xxxx-xxxx-‘&substr(card_number,15、4);(所述函数substr(card_number,15,4)返回由卡号给出的字符串的第15个字符之后的四个字符,即所述16位数字卡号的最后四位数字。)创建角色accounting,将使用所述表customers上select语句的特权赋予所述角色accounting,并且用户temp被赋予所述角色accounting的特权:createroleaccounting;grantselectoncustomertoroleaccounting;grantroleaccountingtotemp在这种情况下,如上所述,由于用户通过所述角色accounting在所述表customers上具有select特权,所以语句为:select*fromcustomers将为temp返回以下结果,即,所述表customers的行,其中所述掩码customer_mask应用于所述卡号表中的值:然而,所述语句为:selectnamefromcustomerswherecard_numberlike‘1234-5678-9012-%’将为temp返回以下结果:姓名(name)smith,john从而使得temp能够确认smith,john的完整卡号值,尽管存在所述掩码customer_mask。为了防止这种情况,定义了以下数据组合禁止:createinterdictioncustomer_interdictiontostatementsselectoncustomersforaccounting;所述数据库引擎2在处理所述语句时的操作:selectnamefromcustomerswherecard_numberlike‘1234-5678-9012-%’解析所述语句(步骤101),并确定其表结果集合(步骤102);在该情况下,所述表结果集合只是来自所述表customers的一个行的集合:然后,所述数据库引擎2再次考虑所述语句中的每个谓词(步骤104),其(仅仅)为所述谓词“card_numberlike‘1234-5678-9012-%’”。然后,所述数据库引擎2检查并应用任何数据组合禁止(步骤105)。为此,所述数据库引擎2考虑适用于所述表结果集合的每个掩码(步骤201),其(仅仅)为所述掩码customer_mask。由于所述谓词“card_numberlike‘1234-5678-9012-%’”引用所述掩码customer_mask(因为其引用由customer_mask掩蔽的所述卡号(card_number)的列),所以所述数据库引擎2检查是否任何数据组合禁止都是适用的(步骤204)。确定customer_interdiction为适用的,因为其覆盖了select语句,并作为一个整体应用于所述表customers。由于customer_interdiction数据组合禁止被确定为适用的,因此从所述表结果集合中移除满足所述谓词“card_numberlike‘1234-5678-9012-%’”的行(步骤205),其为针对姓名smith,john的单独的行,而保留以下修改的表结果集合:所有谓词和表结果集合目前已经被考虑完毕,并且因此所得到的经修改的表集合被用作所述表结果集合的伪视图(步骤107),并被转换为编译器表述(步骤108)。然后,当所述编译器表述被编译并返回(步骤110)时,其效果为来自所述伪视图的行集合:被返回,其满足“card_numberlike‘1234-5678-9012-%’”,这当然不是其中任何一个(因为任何满足所述谓词的数据组合禁止的结果都已经被移除)。结果,这导致响应所述语句返回到temp的结果集合为空:selectnamefromcustomerswherecard_numberlike‘1234-5678-9012-%’从而防止temp使用所述select查询来确认卡号的值。通过该方式,当处理select语句时,不会显露应受保护的信息。所述数据库表包含“smith,john”的数据行,其具有由已知fgac,即,所述掩码保护的信用卡卡号数据“1234-5678-9012-3456”。(当然,所述表包含其他类似地受保护的数据行。)此外,根据本发明的实施例,还定义了所述数据组合禁止,其应用于所述数据行和所述信用卡卡号数据(以及所述表中的其他数据行,以及数据行的其他列)。当处理所述select语句时,针对其where谓词,在由所述掩码给出的fgac保护和所述数据组合禁止之间检测到重叠情况。特别地,该重叠情况意味着当与所述数据库表中的信息“3456”组合时,由用户作为所述where谓词的一部分提供的信息“1234-5678-9012”能够提供关于“约翰·史密斯”的整个信用卡数字的信息,因而通过推理攻击造成潜在的信息暴露。由于检测到重叠情况,因而修改所述结果以避免信息的暴露,特别是在本实施例中,是通过移除检测到重叠情况的数据行来避免信息的暴露。现在,参照图4和图5描述本发明另一个实施例的数据库引擎2的操作。在该实施例中,再次遵循图2所示的操作,但是伪视图未被创建并转换为编译器表述(图2的步骤108和109)。相反,所述原始表结果集合被转换为编译器表述(图4的步骤120),并且被编译以生成返回的结果(步骤121),如下详述。另外,所述检查和应用任何相关数据组合禁止到表结果集合t的步骤(步骤105)如图5所示。如图5所示,所述操作类似于上述实施例的操作,除了在识别应用数据组合禁止时所采取的行为。在这种情况下,不是删除所述表结果集合的行(图3的步骤205),而是从所述语句s中删除所述谓词p(步骤211),并且不改变所述表结果集合。因此,在本实施例中,用于生成所述语句的结果的表结果集合不改变。然而,在编译和返回语句的结果的步骤中,根据所述修改的语句s,即,在发现数据组合禁止为相关的情况下,其谓词已经被移除的语句s,组合所述编译的表结果集合。现在描述上文给出的示例中所述另一个实施例的所述数据库引擎2的操作。被考虑的语句为:selectnamefromcustomerswherecard_numberlike‘1234-5678-9012-%’在该示例中,当所述customer_interdiction数据组合禁止被确定适用于所述表结果集合(即,所述表customers的行),并且由所述谓词“card_numberlike‘1234-5678-9012-%’”所引用时,不是从所述表结果集合移除任何行,而是从所述语句中移除所述谓词,以给出:selectnamefromcustomerswheretrue(相反,应当理解的是,整个where子句都可以被移除,以及在语句中与多个谓词组合的谓词可以被完全移除,而不是被“真”替代)。然后,当所述表结果集合的编译器表述被用于编译并返回语句的结果(新步骤121)时,通过使用以上经修改的语句,这个过程就完成了。可以看出,这将导致返回以下结果:即,所述表customers的所有行(但是应用了掩码customer_mask)。通过该方式,temp还是不能确认smith,john的卡号(card_number)的值,但在这个例子中,是因为用于确认的谓词被忽略了。现在,参考图6和7,描述根据本发明的另一个实施例的所述数据库引擎2的操作。在该实施例中,可以使用以下形式的数据组合禁止定义:createinterdiction<禁止名称>tostatements(<语句类型>)interdicting<禁止条件>on<列/表名称>for<授权名称>except<授权名称例外>可以看出,在这种类型的定义中,interdicting子句允许给出<禁止条件>,其定义当需要限制数据访问时的数据组合禁止的行为。所述<禁用条件>是以下值之一:-value—当需要限制数据访问时,省略相关值;-predicate—当需要限制数据访问时,省略相关谓词。因此,value对应于上文给出的第一实施例的行为,而predicate对应于另一个实施例的行为。因而,所述数据库引擎2的总体操作是前述实施例的组合。具体地,如图6所示,当应用数据组合禁止时,由于这可能导致行从所述表结果集合中被移除,所以伪视图被创建(步骤107)并被转换为编译器表述(步骤108)。然而,也可以从正在被处理的语句中移除谓词,并且因此使用所述修改的语句来编译和返回所述编译器表述(步骤121)。然后,在图7所示的检查和应用任何相关数据组合禁止到表结果集合t的步骤(步骤105)中,当发现数据组合禁止适用时(步骤204),所述数据库引擎2确定所述禁止是在所述谓词p上还是在所述行值上(步骤221);换句话说,所述数据组合禁止的interdicting子句为value还是为predicate。在前一种情况下,如上文参考第一实施例所述,从所述表结果集合中移除满足所述谓词的表结果集合的行。在后一种情况下,如上文参考另一个实施例所述,从所述语句中移除所述谓词。以这种方式,通过本实施例可以呈现上述两个实施例的行为。具体地,再次考虑上文给出的示例,其中所述数据组合禁止被定义为:createinterdictioncustomer_interdictiontostatementsselectinterdictingvalueoncustomersforaccounting;所述行为将如第一实施例所述,而其中数据组合禁止被定义为:createinterdictioncustomer_interdictiontostatementsselectinterdictingpredicateoncustomersforaccounting;所述行为将如另一个实施例所述。本发明虽然已经参考特定实施例进行描述和说明,但是本领域普通技术人员应当理解的是,本发明适用于本文未具体说明的多种不同变型。本发明可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本发明的各个方面的计算机可读程序指令。计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、静态随机存取存储器(sram)、便携式压缩盘只读存储器(cd-rom)、数字多功能盘(dvd)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(isa)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如smalltalk、c++等,以及常规的过程式编程语言—诸如“c”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(fpga)或可编程逻辑阵列(pla),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1