本发明涉及数据库访问
技术领域:
:,尤其涉及一种数据库权限实现方法和系统。
背景技术:
::现有数据库的访问授权要么是在数据库的实现层面上来做,提供相关的结构化查询语言sql语句或者管理套件来进行授权操作。要么是通过添加赘余的数据列来标示数据的权限,然后在应用层通过判断这些权限数据来实现对数据的授权访问。上述方法最大的问题在于无法实现在所有不同类型的数据库上统一授权,并且需要存储大量的赘余权限数据来描述数据权限。技术实现要素:为了解决上述问题,本发明提出了一种数据库权限实现方法和系统,能够在sql以及元数据层面上实现跨数据库的统一授权。为了达到上述目的,本发明提出了一种数据库权限实现方法,该方法包括:对输入的结构化查询语言sql查询语句进行解析,生成语法树。通过语法树的元数据获得具有预设的描述形式的查询信息。对查询信息的可操作权限进行验证,根据验证结果对通过查询信息查询到的数据信息执行相关操作。优选地,预设的描述形式包括:五元组形式;五元组包括数据库链接信息server、数据库名称database、表名称table、列名称column和权限类型privilege。其中,privilege包括:读取select、插入insert、修改alter、删除drop和全部all。all包括:select、insert、alter和drop。优选地,通过语法树的元数据获得具有预设的描述形式的查询信息包括:根据语法树的元数据获取与sql查询语句的关键字相关的一个或多个第一server。从一个或多个第一server中获取与sql查询语句的关键字相关的一个或多个第一数据库。从一个或多个第一数据库中获取与sql查询语句的关键字相关的一个或多个第一数据表。从一个或多个第一数据表中获取与sql查询语句的关键字相关的一个或多个第一数据列。将第一server、第一数据库、第一数据表、第一数据列和想要执行的privilege以五元组的形式形成查询信息。优选地,对查询信息的可操作权限进行验证包括:将五元组形式的查询信息中所包含的第一privilege项与预存的五元组形势的权限信息中所包含的第二privilege项相比较;并且,对于第一privilege项所包含的一个或多个操作分别判断是否与第二privilege项中包含的一个或多个可执行操作中的至少一个可执行操作相同;其中,第一privilege项和第二privilege项分别至少包括以下一种:select、insert、alter、drop和all。根据验证结果对通过查询信息查询到的数据信息执行相关操作包括:当第二privilege项为all时,执行第一privilege项所包含的一个或多个操作。当第二privilege项不为all,并且所述第一privilege项所包含的一个操作与第二privilege项中的一个可执行操作相同时,执行该可执行操作。当第二privilege项不为all,并且当第一privilege项所包含的多个操作与第二privilege项中的多个可执行操作分别对应相同时,分别执行该多个可执行操作。优选地,该方法还包括:对数据信息执行可执行操作以后,如果数据信息有变更,保存变更后的数据信息并更新相应的元数据;并对更新后的元数据的可操作权限进行更新。其中,对更新后的元数据的可操作权限进行更新包括:对经过insert和/或alter操作的元数据进行数据权限的变更或删除,以及对经过drop操作的元数据进行数据权限的删除。为了达到上述目的,本发明还提出了一种数据库权限实现系统,该系统包括:结构化查询语言sql解析器、元数据过滤模块和权限监测模块。sql解析器,用于对输入的sql查询语句进行解析,生成语法树。元数据过滤模块,用于通过语法树的元数据获得具有预设的描述形式的查询信息。权限监测模块,用于对查询信息的可操作权限进行验证,根据验证结果对通过查询信息查询到的数据信息执行相关操作。优选地,预设的描述形式包括:五元组形式;五元组包括数据库链接信息server、数据库名称database、表名称table、列名称column和权限类型privilege。其中,privilege包括:读取select、插入insert、修改alter、删除drop和全部all。all包括:select、insert、alter和drop。优选地,元数据过滤模块通过语法树的元数据获得具有预设的描述形式的查询信息包括:根据语法树的元数据获取与sql查询语句的关键字相关的一个或多个第一server。从一个或多个第一server中获取与sql查询语句的关键字相关的一个或多个第一数据库。从一个或多个第一数据库中获取与sql查询语句的关键字相关的一个或多个第一数据表。从一个或多个第一数据表中获取与sql查询语句的关键字相关的一个或多个第一数据列。将第一server、第一数据库、第一数据表、第一数据列和想要执行的privilege以五元组的形式形成查询信息。优选地,权限监测模块对查询信息的可操作权限进行验证包括:将五元组形式的查询信息中所包含的第一privilege项与预存的五元组形势的权限信息中所包含的第二privilege项相比较;并且,对于第一privilege项所包含的一个或多个操作分别判断是否与第二privilege项中包含的一个或多个可执行操作中的至少一个可执行操作相同;其中,第一privilege项和第二privilege项分别至少包括以下一种:select、insert、alter、drop和all。权限监测模块根据验证结果对通过查询信息查询到的数据信息执行相关操作包括:当第二privilege项为all时,执行第一privilege项所包含的一个或多个操作。当第二privilege项不为all,并且当第一privilege项所包含的一个操作与第二privilege项中的一个可执行操作相同时,执行可执行操作。当第二privilege项不为all,并且当第一privilege项所包含的多个操作与第二privilege项中的多个可执行操作分别对应相同时,分别执行多个可执行操作。优选地,该系统还包括元数据变更反馈模块。元数据变更反馈模块,用于对数据信息执行可执行操作以后,如果数据 信息有变更,保存变更后的数据信息并更新相应的元数据;并对更新后的元数据的可操作权限进行更新。其中,元数据变更反馈模块对更新后的元数据的可操作权限进行更新包括:对经过insert和/或alter操作的元数据进行数据权限的变更或删除,以及对经过drop操作的元数据进行数据权限的删除。与现有技术相比,本发明包括:对输入的结构化查询语言sql查询语句进行解析,生成语法树。语法树的元数据获得具有预设的描述形式的查询信息。对查询信息的可操作权限进行验证,根据验证结果对通过查询信息查询到的数据信息执行相关操作。通过本发明的方案,能够在结构化查询语言sql以及元数据层面上实现跨数据库的统一授权。附图说明下面对本发明实施例中的附图进行说明,实施例中的附图是用于对本发明的进一步理解,与说明书一起用于解释本发明,并不构成对本发明保护范围的限制。图1为本发明的数据库权限实现方法流程图;图2为本发明实施例的dml操作处理流程图;图3为本发明实施例的ddl操作处理流程图;图4为本发明实施例的权限数据库更新操作处理流程图;图5为本发明实施例的授予或撤销操作处理流程图;图6为本发明的数据库权限实现系统组成框图;图7为本发明的数据库权限实现系统组成结构示意图。具体实施方式为了便于本领域技术人员的理解,下面结合附图对本发明作进一步的描述,并不能用来限制本发明的保护范围。数据库访问的认证与授权在不同类型的数据库上,实现方法以及支持粒度有所不同,有些不支持,有些仅支持到表粒度,很少支持到列粒度。并且很多类型的数据库访问控制或授权要么作为数据库实现的一部分而存在的,要么作为该类型数据库专有的工具套件而存在。而通用的bi(businessintelligence)软件,越来越多地被要求提供安全的访问控制,并且需要在接入的各类型数据库上都能够支持统一的细粒度授权,例如:统一支持到列权限。bi软件一般主要针对标准结构化查询语言sql,如sql92等支持较好,对于特定数据库的特定操作并不是bi软件关注的。因此本方法提出一种在sql以及元数据层面上实现的跨数据库实现的统一授权的数据库权限体系结构。为了达到上述目的,本发明具体提出了一种数据库权限实现方法,如图1所示,该方法包括:s101、对输入的sql查询语句进行解析,生成语法树。s102、通过语法树的元数据获得具有预设的描述形式的查询信息。该步骤具有重要的作用,其用来消除不同数据库实现中对数据库、表、列的实现差异。使得不同数据库的元数据最终都能被归结为:数据库、表、列这三级数据组织模型。优选地,预设的描述形式包括:五元组形式;该五元组包括数据库链接信息server、数据库名称database、表名称table、列名称column和权限类型privilege。其中,privilege包括:读取select、插入insert、修改alter、删除drop和全部all。all包括:select、insert、alter和drop。另外,需要说明的是,上述的查询信息也可以是二元组、三元组和四元 组的形式。查询二元组包括数据库链接信息server和权限类型privilege,即(server,privilege)。查询三元组包括数据库链接信息server、数据库名称database和权限类型privilege,即(server,database,privilege)。查询四元组包括数据库链接信息server、数据库名称database、表名称table和权限类型privilege,即(server,database,table,privilege)。下面仍然以五元组形式为例来进行说明。优选地,通过语法树的元数据获得具有预设的描述形式的查询信息包括:s1021、根据语法树的元数据获取与sql查询语句的关键字相关的一个或多个第一server。s1022、从一个或多个第一server中获取与sql查询语句的关键字相关的一个或多个第一数据库。s1023、从一个或多个第一数据库中获取与sql查询语句的关键字相关的一个或多个第一数据表。s1024、从一个或多个第一数据表中获取与sql查询语句的关键字相关的一个或多个第一数据列。s1025、将第一server、第一数据库、第一数据表、第一数据列和想要执行的privilege以五元组的形式形成查询信息。在本发明实施例中,这里仍以上述的举例为例来进行说明。例如,使用jdbc链接服务器example.com的3306端口上mysql服务器,并且具有对mysql中default数据库下的名叫test表的id列具有select权限。那么可以将以上查询信息被描述为:serverdatabasetablecolumnprivilegeexample.com∶3306defaulttestidselect则根据该查询信息的描述,我们会根据sql查询语句的关键字获取一个语法树,从该语法树上首先获得一个或多个example.com∶3306链接分支,在该一个或多个链接分支的基础上再分别获得符合default数据库名称的一个或多个数据库分支,在该一个或多个default数据库分支的基础上,获得符合test表名称的一个或多个数据表分支,在该一个或多个数据表分支的基础上,获得符合id列名称的一个或多个数据列,最后需要对获得的一个或多个数据列进一步验证,看哪个或哪些数据列具有select权限,这将在接下来的步骤s103中进行验证。s103、对查询信息的可操作权限进行验证,根据验证结果对通过查询信息查询到的数据信息执行相关操作。在本发明实施例中,本发明中的权限体系也可以被定义成上述的五元组形式,即,被定义为四个级别(level),分别为:数据库链接(server),数据库(database),表(table),列(column)。每一种数据库权限级别,又具有三种权限类型:读取(select),插入(insert)和全部(all)。三者之间具有如下关系:1)“select”和“insert”之间具有相互独立的关系;2)“all”权限包含“select”以及“insert”权限,以及该两项权限之外的权限,例如,对元数据的修改(alter)、删除(drop)的权限。如果是对表有all权限,那么我们同时具有对表的删除,以及表结构修改权限。综上所述,一条权限可以用如下的字段来描述:serverdatabasetablecolumnprivilege各字段的具体含义如下表所示:例如,使用jdbc链接服务器example.com的3306端口上mysql服务器,并且具有对mysql中default数据库下的名叫test表的id列具有select权限。那么以上权限信息被描述为:serverdatabasetablecolumnprivilegeexample.com∶3306defaulttestidselect如上述定义,任意一条权限信息都可以被定义为一个五元组(server,database,table,column,privilege),五元组中的每一个字段分别代表着:数据库链接的名称,数据库名称,表名称,列名称以及权限的取值(“select”,“insert”,或“all”)。其中server,privilege字段不能为空,其余字段可以为空。优选地,对查询信息的可操作权限进行验证包括:将五元组形式的查询信息中所包含的第一privilege项与预存的五元组形势的权限信息中所包含的第二privilege项相比较;并且,对于第一privilege项所包含的一个或多个操作分别判断是否与第二privilege项中包含的一个或多个可执行操作中的至少一个可执行操作相同;其中,第一privilege项和第二privilege项分别至少包括以下一种:select、insert、alter、drop和all。根据验证结果对数据信息执行相关操作包括:当第二privilege项为all时,执行第一privilege项所包含的一个或多个操作。当第二privilege项不为all,并且所述第一privilege项所包含的一个操作与第二privilege项中的一个可执行操作相同时,执行该可执行操作。当第二privilege项不为all,并且当第一privilege项所包含的多个操作 与第二privilege项中的多个可执行操作分别对应相同时,分别执行该多个可执行操作。以上内容都是当查询信息和预存的权限信息都是五元组形式时的方案。需要说明的是,与上述的查询信息相同,这里的权限信息也不限于五元组形式,同样可以是二元组、三元组和四元组的形式。权限二元组包括:(server,privilege)、(database,privilege)、(table,privilege)和(column,privilege)。权限三元组包括:(server,database,privilege)、(database,table,privilege)和(table,column,privilege)。权限四元组包括:(server,database,table,privilege)、(database,table,column,privilege)基于上述各种权限信息的形式和查询信息的形式,对查询信息的可操作权限进行验证还包括:将获得的查询信息与预存的权限信息相比较,当元组形式的查询信息中除privilege项以外的项等于或包含于元组形式的权限信息中除privilege项以外的项时,权限信息中的privilege对该查询信息仍然具有限制作用,同样需要根据以五元组为例时所说的查询信息的可操作权限验证方法进行验证。例如,一个查询信息是四元组(server,database,table,第一privilege),而预存的权限信息为三元组(server,database,第二privilege),则这里第二privilege对于第一privilege的限制有效,需要进一步将第一privilege和第二privilege比较,确定该第一privilege是否包含于第二privilege,或者该第一privilege是否与第二privilege相同;如果该第一privilege包含于第二privilege,或者该第一privilege与第二privilege相同,则可以执行该第一privilege,否则不可以执行。相反地,当元组形式的查询信息中除privilege项以外的项包含元组形式的权限信息中除privilege项以外的项时,确定该查询信息中的privilege不可执行。例如,一个查询信息是三元组(server,database,第一privilege),而预存的权限信息为四元组(server,database,table,第二privilege),这时,无论第二privilege是什么,第一privilege都不可执行。这里需要说明的是,上述的元组形式包括:二元组、三元组、四元组和五元组。下面以不等式形式表达上述方案。假设有两条权限pi、pj,它们的五元组表示如下:pi=(li1,li2,li3,li4,pi)pj=(lj1,lj2,lj3,lj4,pj)并且定义pi与pj取值相同或者pi的取值为“all”时pi≥pj。那么pi≥pj在以下条件下成立:li1…m=lj1…m≠null其中m∈{1,2,3,4},并且pi≥pj;如果一条sql查询语句q所要求的权限为pi,那么该用户至少需要拥有一条pi,使得pi≥pj;否则q将不被允许执行。在本发明实施例中,下面将分别具体叙述四种sql操作在本发明中的处理流程:1)dml(datamanipulationlanguage数据操控语言)操作:包括select、insert等以数据库内数据对象为目标的操作,如图2所述,具体处理流程如下:s201、输入sql查询语句。s202、根据该sql查询语句的关键字生成语法树。s203、判断是不是dml查询。s204、如果不是dml查询,则进入相关查询的操作流程。s205、如果是dml查询,则遍历语法树,获取要访问的数据库、数据表和数据列。s206、采用jdbc(javadatabaseconnectivityjava数据库链接)验证元数据的真实性。s207、验证结果为虚假,判定sql语法检查错误,退出流程。s208、验证结果为真实,从权限数据库中读取预存的操作权限信息。s209、将申请的操作与预存的操作权限信息相比较进行权限验证。s210、如果权限验证失败,判定权限不够,退出流程。s211、如果权限验证成功,判定权限通过,执行所申请的操作。2)ddl(datadefinitionlanguage数据定义语言)读操作:包括展示数据库showdatabases、描述数据表describetable等展示数据库元数据结构的操作;针对ddl操作,除了正常执行具有dml操作的权限检查流程之外,如图3所示,还需要经过如下流程:s301、采用jdbc获取元数据。s302、针对每一条元数据,根据预存的操作权限信息检查该元数据是否允许被查看。s303、该元数据不允许被查看,则该元数据不加入输出列表。s304,该元数据允许被查看,则将该元数据加入输出列表。s305、循环上述步骤s301至s304,直至每一条元数据检查完毕,并输出ddl查看结果。3)ddl写操作,在经过与dml操作相同的权限检查后,如果符合权限,被允许执行,则执行相应的写操作。这里需要说明的是,假如执行写操作成功了,则相应的数据信息或元数据就已经改变了,则还需要对权限数据库privilegestorage进行更新,这种更新主要针对altertable(修改表的定义)以及droptable(从数据库中删除表)的操作。这两类操作都会使原先存储在privilegestorage中原表的权限描述失效,如果不进行更新,会导致严重安全漏洞,例如,原先具有对表t的读权限,当表t被删除后,这条对表t的读权限也需要删除;否则新建的同名表t就在无显示配置访问权限的情况下被赋予了上一个同名表t的权限。因此,必须对权限数据库进行及时更新。具体地,本发明方法还包括;对数据信息执行可执行操作以后,如果数 据信息有变更,保存变更后的数据信息并更新相应的元数据;并对更新后的元数据的可操作权限进行更新。其中,对更新后的元数据的可操作权限进行更新包括:对经过insert和/或alter操作的元数据进行数据权限的变更或删除,以及对经过drop操作的元数据进行数据权限的删除。如图4所示,需要经过如下流程完成更新:s401、从权限数据库中读取进行更改以前的数据信息或元数据的相关权限信息。s402、针对每一条权限信息针对预定的权限规则判断该权限信息是否需要删除或修改。这里提到的“针对每一条权限规则判断是否需要删除”指的是如果规则中涉及到的table的元数据被修改了,那么这条权限信息就需要被删除。s403、需要删除该权限信息,则从权限数据库中删除该条权限信息。s404、需要修改该权限信息,则根据更改后的数据信息对其权限信息进行修改。4)权限授予或撤销操作,其流程较为简单:第一步通过语法解析判断是否为权限授予或删除操作,并翻译为对权限数据的读写操作;第二步,通过权限读取或写入服务来完成权限的授予或删除。如图5所示,总的流程如下所示:s501、输入sql查询语句。s502、根据该sql查询语句的关键字生成语法树。s503、判断是不是授予或删除权限的查询。s504、如果不是授予或删除权限的查询,则进入相关查询的操作流程。s505、如果是授予或删除权限的查询,则判断是查看权限还是修改权限。这里,该修改权限包括授予或删除权限s506、如果是修改权限,则在权限数据库中进行相应的权限修改并保 存。s507、如果是查看权限,则在权限数据库中读取相应的权限。至此,便完整地介绍了本发明的数据库权限实现方法。本方法提出了一种在sql以及元数据层面上实现的跨数据库实现的统一授权的数据库权限体系结构。为了达到上述目的,本发明还提出了一种数据库权限实现系统01,如图6、图7所示,该系统包括:结构化查询语言sql解析器02、元数据过滤模块03和权限监测模块04。sql解析器02,用于对输入的sql查询语句进行解析,生成语法树。元数据过滤模块03,用于通过语法树的元数据获得具有预设的描述形式的查询信息。权限监测模块04,用于对查询信息的可操作权限进行验证,根据验证结果对通过查询信息查询到的数据信息执行相关操作。优选地,预设的描述形式包括:五元组形式;该五元组包括数据库链接信息server、数据库名称database、表名称table、列名称column和权限类型privilege;其中,privilege包括:读取select、插入insert、修改alter、删除drop和全部all。all包括:select、insert、alter和drop。优选地,元数据过滤模块03通过语法树的元数据获得具有预设的描述形式的查询信息包括:根据语法树的元数据获取与sql查询语句的关键字相关的一个或多个第一server。从一个或多个第一server中获取与sql查询语句的关键字相关的一个或多个第一数据库。从一个或多个第一数据库中获取与sql查询语句的关键字相关的一个 或多个第一数据表。从一个或多个第一数据表中获取与sql查询语句的关键字相关的一个或多个第一数据列。将第一server、第一数据库、第一数据表、第一数据列和想要执行的privilege以五元组的形式形成查询信息。优选地,权限监测模块04对查询信息的可操作权限进行验证包括:将五元组形式的查询信息中所包含的第一privilege项与预存的五元组形势的权限信息中所包含的第二privilege项相比较;并且,对于第一privilege项所包含的一个或多个操作分别判断是否与第二privilege项中包含的一个或多个可执行操作中的至少一个可执行操作相同;其中,第一privilege项和第二privilege项分别至少包括以下一种:select、insert、alter、drop和all。权限监测模块04根据验证结果对通过查询信息查询到的数据信息执行相关操作包括:当第二privilege项为all时,执行第一privilege项所包含的一个或多个操作。当第二privilege项不为all,并且当第一privilege项所包含的一个操作与第二privilege项中的一个可执行操作相同时,执行可执行操作。当第二privilege项不为all,并且当第一privilege项所包含的多个操作与第二privilege项中的多个可执行操作分别对应相同时,分别执行多个可执行操作。优选地,该系统还包括元数据变更反馈模块05。元数据变更反馈模块05,用于对数据信息执行可执行操作以后,如果数据信息有变更,保存变更后的数据信息并更新相应的元数据;并对更新后的元数据的可操作权限进行更新。其中,元数据变更反馈模块05对更新后的元数据的可操作权限进行更新 包括:对经过insert和/或alter操作的元数据进行数据权限的变更或删除,以及对经过drop操作的元数据进行数据权限的删除。与现有技术相比,本发明包括:对输入的结构化查询语言sql查询语句进行解析,生成语法树。语法树的元数据获得具有预设的描述形式的查询信息。对查询信息的可操作权限进行验证,根据验证结果对通过查询信息查询到的数据信息执行相关操作。通过本发明的方案,能够在结构化查询语言sql以及元数据层面上实现跨数据库的统一授权。需要说明的是,以上所述的实施例仅是为了便于本领域的技术人员理解而已,并不用于限制本发明的保护范围,在不脱离本发明的发明构思的前提下,本领域技术人员对本发明所做出的任何显而易见的替换和改进等均在本发明的保护范围之内。当前第1页12当前第1页12