数据库操作语言脚本优化方法、装置及系统与流程

文档序号:12595493阅读:170来源:国知局
本申请涉及数据库
技术领域
:,尤其是涉及一种数据库操作语言脚本优化方法、装置及系统。
背景技术
::众所周知,在数据库技术中,诸如结构化查询语言(StructuredQueryLanguage,SQL)等数据库语言是存取数据以及查询、更新和管理数据库系统的接口。比如,用户在使用基于开放数据处理服务(OpenDataProcessingService,ODPS)系统的过程中,可能经常需要基于查询语句查询ODPS中数据表及其字段。而多数数据库语言通常可提供通过特殊字符或字符串等查询语句查询所需表及其字段的功能。以SQL为例,用户通常可使用“*”来查询所需的字段。在某些情况下,往往一些所要查询的表需申请查询权限后才能访问;此外,即使在已经获得查询权限的情况下,如果这些表的某些字段比较特殊(比如包含有敏感信息),那么用户一般还需要另外针对表中的特殊字段申请权限。然而,到目前为止,在基于脚本的任务提交执行前,用户通常并不知晓其所要查询的表中是否存在某些需另外申请权限的字段(除非采用人工去逐个判断所要查询的表中是否存在某些需另外申请权限的字段,但这样效率会非常低下,实际上难以实施)。在这种情况下,一旦用户所要查询的表中存在需另外申请权限的字段,必然会导致任务中途执行失败。如此以来,不仅浪费了系统资源,也降低了用户体验。技术实现要素:本申请实施例的目的在于提供一种数据库操作语言脚本优化方法、装置及系统。为达到上述目的,一方面,本申请实施例提供了一种数据库操作语言脚本优化方法,包括以下步骤:获取用户提交的操作语言脚本;对所述操作语言脚本进行语法分析,获得所述用户所指定访问的数据表及其字段的标识或名称;判断所述用户是否有访问所述数据表及其字段的权限;如果所述用户没有访问所述数据表及其字段的权限,则为所述用户发起访问所述数据表及其字段的权限申请。另一方面,本申请还提供了一种数据库操作语言脚本优化装置,包括:脚本获取模块,用于获取用户提交的操作语言脚本;语法分析模块,用于对所述操作语言脚本进行语法分析,获得所述用户所指定访问的数据表及其字段的标识或名称;权限控制模块,用于判断所述用户是否有访问所述数据表及其字段的权限;权限申请模块,用于当所述用户没有访问所述数据表及其字段的权限时,为所述用户发起访问所述数据表及其字段的权限申请。再一方面,本申请还提供了一种数据库系统,其包括数据库操作语言脚本优化装置,所述数据库操作语言脚本优化装置包括:脚本获取模块,用于获取用户提交的操作语言脚本;语法分析模块,用于对所述操作语言脚本进行语法分析,获得所述用户所指定访问的数据表及其字段的标识或名称;权限控制模块,用于判断所述用户是否有访问所述数据表及其字段的权限;权限申请模块,用于当所述用户没有访问所述数据表及其字段的权限时,为所述用户发起访问所述数据表及其字段的权限申请。本申请实施例中,当用户没有访问所述数据表及其字段的权限时,就会自动为该用户发起访问所述数据表及其字段的权限的申请;在成功申请权限后,该用户在下次访问时就能使用该数据表及其字段了,通过上述脚本提交执行前的预处理,避免了脚本执行过程中因缺少相应的访问权限而导致的中途失败,从而减少了计算资源及用户时间的浪费,提高了用户体验。附图说明此处所说明的附图用来提供对本申请实施例的进一步理解,构成本申请实施例的一部分,并不构成对本申请实施例的限定。在附图中:图1为本申请一实施例的数据库操作语言脚本优化方法的流程图;图2为本申请另一实施例的数据库操作语言脚本优化方法的流程图;图3为本申请一实施例的数据库系统的架构图;图4为本申请一实施例的数据库操作语言脚本优化装置的结构框图;图5为本申请另一实施例的数据库操作语言脚本优化装置的结构框图。具体实施方式为使本申请实施例的目的、技术方案和优点更加清楚明白,下面结合实施例和附图,对本申请实施例做进一步详细说明。在此,本申请实施例的示意性实施例及其说明用于解释本申请实施例,但并不作为对本申请实施例的限定。下面结合附图,对本申请实施例的具体实施方式作进一步的详细说明。本申请实施例可用于通用或专用计算装置环境或配置中,例如多处理器装置、服务器计算机以及分布式计算环境等等。并且本申请实施例可以在由计算机执行的计算机可执行指令的上下文中描述,例如程序模块或指令集。这些程序模块或指令集可以位于包括存储设备在内的本地或远程计算机存储介质中。参考图1所示,本申请一实施例的数据库操作语言脚本优化方法包括以下步骤:S101、获取用户提交的操作语言脚本。本申请实施例中,一般的,用户提交的操作语言脚本可以是基于用户层面的查询、修改、插入、排序和删除等访问操作中的任意一种或多种。并且,本申请实施例中,数据库操作语言可包括但不限于SQL、PL-SQL(ProceduralLanguage-SQL)和T-SQL(Transact-SQL)等。以SQL为例,一个典型的查询脚本可以为:select*fromtable1where+范围。S102、对所述操作语言脚本进行语法分析,获得所述用户所指定访问的数据表及其字段的标识或名称。本领域技术人员悉知,编译的过程中涉及语法分析,而语法分析的作用是将一个输入的字符串变换为一个描述这个字符串的结构体(比如语法分析树、抽象语法树等),以使得计算机可以更容易的理解用户输入的字符串是何意思。由于语法分析属于本领域技术人员常规技术手段,因此,在本申请实例中对于将操作语言脚本进行语法分析的具体过程无须进行过多说明。S103、判断所述用户是否有访问所述数据表及其字段的权限。如果没有访问所述数据表及其字段的权限则执行步骤S104。本申请实例中,具体判断可以是先判断用户是否有访问其指定访问的数据表的权限,只有用户有访问其指定访问的数据表的权限的前提下,进一步判断该用户是否有访问其指定访问的数据表中指定字段的权限才更有意义。下面举例说明:例如某一用户提交的操作语言脚本为:select*fromtable1其中,table1具体如下table1姓名(NAME)性别(GENDER)年龄(AGE)身份证号码(ID)张三男25330100000711141000李四女31330700000009190000王二女28330000000000064000刘五男22330111111111305000该用户为普通用户,其具有访问table1的权限,但由于table1中第4字段(身份证号码(ID))的属于个人敏感信息,需单独申请访问权限,此种情况,该用户就会被判断为没有访问table1中第4字段的权限。S104、为所述用户发起访问所述数据表及其字段的权限申请。需要说明的是,本步骤中所述的为用户申请访问数据表及其字段的权限是:仅需对那些已指定访问但尚未获得授权的部分另行发起权限申请即可。本申请的在另一实施例中,如果所述用户有访问所述数据表及其字段的权限,则在步骤S103之后还可以包括如下步骤:S105、判断所述操作语言脚本中是否包含有用以指示该用户所指定访问的数据表中全部字段的通配符。如果所述操作语言脚本中包含有用以指示该用户所指定访问的数据表中全部字段的通配符,则执行步骤S106,否则结束。在数据库语言中,通配符是一种特殊语句,可以替代一个或多个字符,用以实现模糊搜索。以SQL为例,在没有限定符时,通配符“*”则代表访问所有引用表的全部字段,例如:select*fromainnerjoinbona.id=b.id;在有限定符时,通配符“*”则代表访问限定表的全部字段,例如:selectb.*fromainnerjoinbona.id=b.id。S106、将所述通配符替换成所述数据表中全部字段的标识或名称。这里的替换一般指的是字符串替换,以上述步骤S103中的select*fromtable1为例,替换后的操作语言脚本为:SelectˊNAMEˊˊGENDERˊˊAGEˊˊIDˊfromtable1如此,将用通配符“*”表示的模糊搜索替换为具体明确的字段名称或标识搜索,从而有利于防止脚本执行时出错。本申请实施例为脚本提交执行前的预处理,当用户没有访问所述数据表及其字段的权限时,就会自动为该用户发起访问所述数据表及其字段的权限的申请;在成功申请权限后,该用户在下次访问时就能使用该数据表及其字段了,通过上述预处理,避免了脚本执行过程中因缺少相应的访问权限而导致的中途失败,从而减少了计算资源及用户时间的浪费,提高了用户体验。参考图2所示,本申请另一实施例的数据库操作语言脚本优化方法包括以下步骤:S201、获取用户提交的操作语言脚本。本申请实施例中,一般的,用户提交的操作语言脚本可以是基于用户层面的查询、修改、插入、排序和删除等访问操作中的任意一种或多种。并且,本申请实施例中,数据库操作语言可包括但不限于SQL、PL-SQL和T-SQL。以SQL为例,一个典型的查询脚本为:select*fromtable1where范围。S202、对所述操作语言脚本进行语法分析,获得所述用户所指定访问的数据表及其字段的标识或名称。本领域技术人员悉知,编译的过程中涉及语法分析,而语法分析的作用是将一个输入的字符串变换为一个描述这个字符串的结构体(比如语法分析树、抽象语法树等),以使得计算机可以更容易的理解用户输入的字符串是什么意思。由于语法分析属于本领域技术人员常规技术手段,因此,在本申请实例中对于将操作语言脚本进行语法分析的具体过程无须进行过多说明。S203、判断所述用户是否有访问所述数据表及其字段的权限。如果没有访问所述 数据表及其字段的权限则执行步骤S204。本申请实例中,具体判断可以是先判断用户是否有访问其指定访问的数据表的权限,只有用户有访问其指定访问的数据表的权限的前提下,进一步判断该用户是否有访问其指定访问的数据表中指定字段的权限才有意义。下面举例说明:例如某一用户提交的操作语言脚本为:select*fromtable2其中,table2具体如下table2商品名称(Name)品牌(Brand)价格(Price)商家(Seller)库存量(Stock)徒步鞋狼爪599狼爪官方旗舰店500徒步鞋探路者368探路者官方旗舰店300徒步鞋北面879北面官方旗舰店800徒步鞋哥伦比亚688哥伦比亚官方旗舰店600该用户为普通用户,其具有访问table2的权限,但由于table2中第5字段(库存量(Stock))的属于敏感信息,需单独申请访问权限,此种情况,该用户就会被判断为没有访问table2中第5字段的权限。S204、向所述用户发送权限申请请示消息。向用户发送权限申请请示消息,可以提前告知用户问题原因,从而请示用户是否需要发起权限申请。其中,向用户发送的权限申请请示消息可以包含:请示是否申请访问所述数据表及其字段的权限的信息,以及权限申请流程相关信息。S205、在收到所述用户返回的权限申请确认消息后,为所述用户发起访问所述数据表及其字段的权限申请。需要说明的是,本步骤中所述的为用户申请访问数据表及其字段的权限是:仅需对那些已指定访问但尚未获得授权的部分另行发起权限申请即可。本申请的在另一实施例中,如果所述用户有访问所述数据表及其字段的权限,则在步骤S203之后还包括:S206、判断所述操作语言脚本中是否包含有用以指示该用户所指定访问的数据表中全部字段的通配符。如果所述操作语言脚本中包含有用以指示该用户所指定访问的数据表中全部字段的通配符,则执行步骤S207,否则结束。S207、将所述通配符替换成所述数据表中全部字段的标识或名称。这里的替换一般指的是字符串替换,以上述步骤S203中的select*fromtable2为例,替换后的操作语言脚本为:SelectˊNameˊˊBrandˊˊPriceˊˊSellerˊˊStockˊfromtable2如此,将用通配符“*”表示的模糊搜索替换为具体明确的字段名称或标识搜索,从而有利于防止脚本执行时出错。由此可见,本方法实施例与上一方法实施例的区别在于,当用户没有访问所述数据表及其字段的权限时,并不会自动的为该用户申请访问所述数据表及其字段的权限,而是向所述用户发送权限申请请示消息,由用户根据需要自行决定是否需要发起权限申请。从而给予用户自由选择权。参考图3所示,本申请实施例的数据库系统是在原先部分31的基础上增加了数据库操作语言脚本优化装置32,以用于将用户提交的操作语言脚本进行优化预处理,从而提高其执行成功率。结合图4所示,本申请一实施例的数据库系统中的数据库操作语言脚本优化装置包括:脚本获取模块41,用于获取用户提交的操作语言脚本;语法分析模块42,用于对所述操作语言脚本进行语法分析,获得所述用户所指定访问的数据表及其字段的标识或名称;权限控制模块43,用于判断所述用户是否有访问所述数据表及其字段的权限;权限申请模块44,用于当所述用户没有访问所述数据表及其字段的权限时,为所述用户发起访问所述数据表及其字段的权限申请。在另一实施例中,所述数据库操作语言脚本优化装置32还可以包括:通配符判断模块45,用于当所述用户有访问所述数据表及其字段的权限时,判断所述操作语言脚本中是否包含有用以指示该用户所指定访问的数据表中全部字段的通配符;通配符替换模块46,用于当所述操作语言脚本中包含有用以指示该用户所指定访问的数据表中全部字段的通配符时,相应的将所述通配符替换成所述数据表中全部字段的标识或名称。本申请实施例为脚本提交执行前的预处理,当用户没有访问所述数据表及其字段 的权限时,就会自动为该用户发起访问所述数据表及其字段的权限的申请;在成功申请权限后,该用户在下次访问时就能使用该数据表及其字段了,通过上述预处理,避免了脚本执行过程中因缺少相应的访问权限而导致的中途失败,从而减少了计算资源及用户时间的浪费,提高了用户体验。至于本申请实施例中各模块的具体细节,请详见上述方法实施例的对应步骤S101-S106,在此不再赘述。结合图5所示,本申请另一实施例的数据库系统中的数据库操作语言脚本优化装置包括:脚本获取模块51,用于获取用户提交的操作语言脚本;语法分析模块52,用于对所述操作语言脚本进行语法分析,获得所述用户所指定访问的数据表及其字段的标识或名称;权限控制模块53,用于判断所述用户是否有访问所述数据表及其字段的权限;权限申请请示模块54,用于在权限申请模块55为所述用户发起访问所述数据表及其字段的权限申请之前,向所述用户发送权限申请请示消息;权限申请模块55,用于在收到所述用户返回的权限申请确认消息后,为所述用户发起访问所述数据表及其字段的权限申请。在,本申请另一实施例中,上述数据库系统中的数据库操作语言脚本优化装置还可以包括:通配符判断模块56,用于当所述用户有访问所述数据表及其字段的权限时,判断所述操作语言脚本中是否包含有用以指示该用户所指定访问的数据表中全部字段的通配符;通配符替换模块57,用于当所述操作语言脚本中包含有用以指示该用户所指定访问的数据表中全部字段的通配符时,相应的将所述通配符替换成所述数据表中全部字段的标识或名称。由此可见,本系统实施例与上一系统实施例的区别在于,当用户没有访问所述数据表及其字段的权限时,并不会自动的为该用户申请访问所述数据表及其字段的权限,而是向所述用户发送权限申请请示消息,由用户根据需要自行决定是否需要发起权限申请。从而给予用户自由选择权。至于本申请实施例中各模块的具体细节,请详见上述方法实施例的对应步骤S201-S207,在此不再赘述。以上本申请实施例中所描述的方法或装置可以直接嵌入可由处理器执行的软件 模块中。软件模块可以存储于RAM存储器、闪存、ROM存储器、EPROM存储器、EEPROM存储器、寄存器、硬盘、可移动磁盘、CD-ROM或本领域中其它任意形式的存储媒介中。示例性地,存储媒介可以与处理器连接,以使得处理器可以从存储媒介中读取信息,并可以向存储媒介存写信息。可选地,存储媒介还可以集成到处理器中。以上所述的具体实施例,对本申请的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本申请实施例的具体实施例而已,并不用于限定本申请的保护范围,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1