权限管理方法及装置与流程

文档序号:17080345发布日期:2019-03-09 00:11阅读:157来源:国知局
本公开涉及数据库
技术领域
:,尤其涉及一种权限管理方法及装置。
背景技术
::spark是一种基于内存计算的大数据计算框架,提供了分布式计算功能,将分布式存储的数据读入,同时将任务分发到各个节点进行计算。spark提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将spark部署在大量廉价硬件之上,形成集群。sparksql是一种基于spark的分布式sql(structuredquerylanguage,结构化查询语言)引擎,支持sql语句,极大的方便了熟悉关系型数据库的用户。权限管理指根据系统设置的安全规则或者安全策略。在数据库操作中,只有授权的用户才能够对数据库有操作权限,普通用户无法查看或修改数据库的数据,提高了数据的安全性。表级权限可以控制用户是否能够访问数据表。行级权限可以控制用户只能访问数据表特定的数据行。行级权限是比表级权限更细粒度的权限控制。相关技术中,sparksql不具有行级权限管理功能。技术实现要素:有鉴于此,本公开提出了一种权限管理方法及装置,能够实现sparksql中细粒度的权限管理。根据本公开的一方面,提供了一种权限管理方法,所述方法应用于spark中的驱动器,所述方法包括:从接收到的行授权结构化查询语言sql语句中获取用户标识和行级别安全性rls函数的标识,所述rls函数的返回结果为数据表的过滤条件;建立并存储从所述行授权sql语句获取的用户标识与rls函数的标识之间的第一关联关系;接收到查询sql语句时,根据所述第一关联关系,获取所述查询sql语句对应的过滤条件;基于所述过滤条件,获取所述查询sql语句的查询结果。根据本公开的另一方面,提供了一种权限管理装置,所述装置应用于spark中的驱动器,所述装置包括:第一获取模块,用于从接收到的行授权结构化查询语言sql语句中获取用户标识和行级别安全性rls函数的标识,所述rls函数的返回结果为数据表的过滤条件;第一建立模块,用于建立并存储从所述行授权sql语句获取的用户标识与rls函数的标识之间的第一关联关系;第二获取模块,用于接收到查询sql语句时,根据所述第一关联关系,获取所述查询sql语句对应的过滤条件;第三获取模块,用于基于所述过滤条件,获取所述查询sql语句的查询结果。在本公开实施例中,rls函数的返回结果为数据表的过滤条件,通过行授权sql语句获取用户标识和rls函数的标识,并建立两者之间的关联关系,根据该关联关系确定查询sql语句对应的过滤条件,基于该过滤条件获取查询sql语句的查询结果,控制用户通过查询sql语句进行数据查询时,只能查询到数据表中满足过滤条件的数据,实现了sparksql的行级别权限管理,对数据进行了细粒度的权限控制。根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。附图说明包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。图1示出根据本公开一实施例的权限管理方法的流程图。图2示出一种spark架构的示意图。图3示出根据本公开一实施例的权限管理方法的流程图。图4示出根据本公开一实施例的权限管理方法的流程图。图5示出根据本公开一实施例的权限管理装置的框图。图6示出根据本公开一实施例的权限管理装置的框图。图7是根据一示例性实施例示出的一种用于权限管理装置的框图。具体实施方式以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。另外,为了更好的说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。图1示出根据本公开一实施例的权限管理方法的流程图。图2示出一种spark架构的示意图。如图2所示,spark架构中包括driver(驱动器)、clustermanager(集群管理器)和workernode(工作节点)。其中,驱动器负责对应用程序进行调度、对task(任务)分配等进行管理,sparkcontext是整个分布式程序运行的起点。集群管理器负责工作节点资源的分配和管理。工作节点负责创建executor(执行器),将资源和任务进一步分配给执行器,并同步资源标识给集群管理器。其中,执行器是工作节点上的进程,负责对分配给该进程的任务进行处理。图1所述的权限管理方法可以应用于图2所示的spark架构中的驱动器。如图1所示,该权限管理方法可包括:步骤s11,从接收到的行授权sql语句中获取用户标识和rls函数的标识,所述rls函数的返回结果为数据表的过滤条件。sql指结构化查询语言,是一种数据库查询和程序设计语言,用于访问数据库系统。对数据库的访问操作可以包括:插入、查询、更新和删除等,sql语句可以用来实现上述访问操作。sql语句是一种描述性的语言,指明了访问任务,驱动器需要根据sql语句指定一个执行计划,该执行计划表明了如何完成所述访问任务,执行器执行该执行计划,从而实现访问任务。一条sql语句的处理流程包括词法解析、语法解析、优化、策略制定和执行。在词法解析阶段,sql语句经过parse(解析器)解析成unresolvedlogicalplan;在语法解析阶段,analyzer(分析器)结合catalog(数据字典)对unresolvedlogicalplan进行绑定,生成resolvedlogicalplan;在优化阶段,optimizer(优化器)对resolvedlogicalplan进行优化,生成optimizedlogicalplan;在策略制定阶段,sparkplan(执行计划模块)将optimizedlogicalplan转换成physicalplan(物理计划)。进入执行阶段,执行器将physicalplan转换成可执行物理计划,并执行该可执行物理计划,生成rdd(resilientdistributeddatasets,弹性分布式数据集)。其中,一条sql语句在进入执行阶段之前(词法解析、语法解析、优化和策略制定)都是在图2所示的驱动器执行,在执行时会被分发到图2所示的工作节点中的执行器执行。需要说明的是,在sql语句处理流程中,unresolvedlogicalplan、resolvedlogicalplan、optimizedlogicalplan均为逻辑计划。rls(rowlevelsecurity,行级别安全性)函数的标识可以用于识别rls函数,例如函数名等。用户标识可以用于识别用户,例如用户名等。驱动器可以从行授权sql语句中获取用户标识和rls函数的标识。rls函数可以用于规定一个数据表的行级别权限控制策略,rls函数的返回结果可以为该数据表的过滤条件。其中,过滤条件为一个布尔表达式,过滤条件可以用于对各数据行中一个或多个数据列的值进行判断,判断结果为真时表示数据行满足过滤条件,判断结果为假时表示数据行不满足过滤条件。例如,过滤条件可以为name=’zhangsan’,age>20,或者name=’zhangsan’andage>20等。其中,过滤条件name=’zhangsan’表示筛选出name列的值为zhangsan的数据行。过滤条件age>20表示出筛选age列的值大于20的数据行。过滤条件name=’zhangsan’andage>20表示筛选出name列的值为zhangsan且age列的值大于20的数据行。管理员可以为数据表创建一个或多个rls函数,每个rls函数的返回结果均为该数据表的过滤条件。在一种可能的实现方式中,创建rls函数的过程可包括:接收到rls函数创建sql语句时,从所述rls函数创建sql语句中获取rls函数的标识、数据表的标识以及过滤条件;建立并存储从所述rls函数创建sql语句获取的rls函数的标识、数据表的标识以及过滤条件的第二关联关系。rls函数创建sql语句可以用于创建rls函数。驱动器接收到rls函数创建sql语句时,可以从rls函数创建sql语句中获取rls函数的标识、数据表的标识以及过滤条件。其中,数据表的标识可以用于识别数据表。第二关联关系表示rls函数的标识、数据表的标识和过滤条件的关联关系。驱动器可以根据第二关联关系确定某个rls函数是针对哪个数据表建立的,以及该数据表的过滤条件是什么。行授权sql语句可以用于向某些用户(用户标识对应的用户)授予查询数据表中指定数据行的权限。驱动器可以根该据数据表的过滤条件对该数据表中的每一个数据行进行过滤,将该数据表中满足过滤条件的数据行确定为指定数据行。sparksql的语法文件中存储有sparksql所支持的语法,每条语法设置有对应的关键字。在词法解析阶段,驱动器可以根据sql语句的关键字,查找到sql语句对应的语法,进而按照语法对sql语句进行解析,确定出sql语句每一部分的含义。在一种可能的实现方式中,可以在sparksql的语法文件中添加行授权语法、rls函数创建语法,并分别为行授权语法和rls函数创建语法设置关键字。其中,所述行授权语法定义了用户标识和rls函数的标识。所述rls函数创建语法定义了rls函数的标识、数据表的标识和过滤条件。在一种可能的实现方式中,驱动器可以对接收到的sql语句进行词法解析,获取关键字;若所述关键字映射到行授权语法,则确定所接收到的sql语句为行授权sql语句;若所述关键字映射到rls函数创建语法,则确定所接收到的sql语句为rls函数创建sql语句。在本公开实施例中,在词法解析阶段,增加了对rls函数创建语句的解析功能,使得驱动器能够解析rls函数创建sql语句,按照所述rls函数创建语法从rls函数创建sql语句中获取rls函数的标识、表标识和过滤条件。在一个示例中,rls函数创建语法可以为:createrlsfunctionfun_nametotabletable_name;returnbooleanexpression。其中,fun_name表示rls函数的标识,talbe_name表示表标识,booleanexpression表示过滤条件。在本公开实施例中,在词法解析阶段,增加了对行授权sql语句的解析功能,使得驱动器能够解析行授权sql语句,按照所述行授权语法从行授权sql语句中获取用户标识和rls函数的标识。在确定所接收到的sql语句为行授权sql语句时,驱动器可以,从所接收到的sql语句中获取用户标识和rls函数的标识。在一个示例中,行授权语法可以为:grantrlsfunctionfun_nametouseruser_name[user_name]。其中,fun_name表示rls函数的标识,user_name表示用户标识。步骤s12,建立并存储从所述行授权sql语句获取的用户标识与rls函数的标识之间的第一关联关系。第一关联关系可以表示用户标识与rls函数的标识之间的关联关系。第一关联关系可以将用户与rls函数进行绑定。通过第一关联关系,可以确定用户关联的rls函数,进而确定该用户访问数据表示时的过滤条件。驱动器可以将第一关联关系存储在任意关系型数据库中,例如oracle、mysql或者db2等。在一个示例中,驱动器可以通过jdbc(javadatabaseconnectivity,java数据库连接)将第一关联关系存储在关系型数据库中。步骤s13,接收到查询sql语句时,根据所述第一关联关系,获取所述查询sql语句对应的过滤条件。查询sql语句可以用于从数据表中查询数据。查询sql语句可以为select语句。驱动器接收到查询sql语句后,可以对查询sql语句进行解析,得到查询sql语句对应的逻辑计划,即project逻辑计划。在一种可能的实现方式中,对接收到的sql语句进行词法解析,获取关键字,若关键字映射到查询语法,则按照查询语法进行词法解析,在词法解析阶段将查询sql语句转换成对应的逻辑计划。语法解析阶段有一系列的rule(规则),驱动器可以遍历每一个规则,利用这些规则对逻辑计划进行处理。在本公开实施例中,增加行权限管理规则,记为rlsrule,该规则的功能是基于第一关联关系,获取查询sql语句对应的过滤条件,以及基于该过滤条件,获取查询sql语句的查询结果。图3示出根据本公开一实施例的权限管理方法的流程图。如图3所示,接收到查询sql语句时,根据所述第一关联关系,获取所述查询sql语句对应的过滤条件可包括:步骤s131,接收到查询sql语句时,获取所述查询sql语句对应的目标用户标识以及逻辑计划。其中,目标用户标识可以为通过所述查询sql语句查询数据的用户的标识,即当前使用sparksql系统的用户的标识。目标用户标识可以为用户名或者用户id等,对此本公开不做限制。驱动器通过对查询sql语句进行解析,可以获取查询sql语句的逻辑计划。查询sql语句对应的逻辑计划的是project(映射)逻辑计划。步骤s132,从所述逻辑计划中获取目标数据表标识,所述目标数据表标识为所述查询sql语句要查询的数据表的标识。在语法解析阶段,利用行权限管理规则对上述逻辑计划进行处理时,可以从该逻辑计划中获取目标数据表标识。其中,目标数据表标识可以为查询sql语句要查询的数据表的标识。步骤s133,根据所述第一关联关系,获取所述目标用户标识对应的目标rls函数的标识。目标rls函数可以标识与目标用户关联的rls函数。第一关联关系为用户标识和rls函数的标识之间的关联关系。驱动器可以查找用户标识与目标用户标识匹配的第一关联关系,将查找到第一关联关系的rls函数的标识确定为目标rls函数的标识。步骤s134,根据所述第二关联关系,获取所述目标rls函数的标识和所述目标数据表标识对应的过滤条件。第二关联关系为rls函数的标识、数据表的标识以及过滤条件的关联关系。驱动器查找rls函数的标识与目标rls函数的标识匹配,且数据表的标识与目标数据表标识匹配的第二关联关系,将查找到的第二关联关系的过滤条件,确定为所述目标rls函数的标识和所述目标数据表标识对应的过滤条件。步骤s14,基于所述过滤条件,获取查询sql语句的查询结果。驱动器获取到过滤条件后,可以基于该过滤条件控制,对要查询的数据表进行过滤,使用户获取到满足过滤条件的查询结果。图4示出根据本公开一实施例的权限管理方法的流程图。如图4所述,基于所述过滤条件,获取查询sql语句的查询结果可包括:步骤s141,将所述过滤条件绑定在所述逻辑计划中。步骤s142,将绑定后的逻辑计划转换为物理计划,并将所述物理计划发送至spark中的执行器。步骤s143,接收所述执行器返回的结果。驱动器将过滤条件绑定在逻辑计划中得到的逻辑计划相当于条件查询sql语句(例如,selectwhere语句)的逻辑计划。驱动器可以将绑定后的逻辑计划转换为物理计划后发送至执行器进行执行,并接收执行器返回的结果。在本公开实施例中,rls函数的返回结果为数据表的过滤条件,通过行授权sql语句获取用户标识和rls函数的标识,并建立两者之间的关联关系,根据该关联关系确定查询sql语句对应的过滤条件,基于该过滤条件获取查询sql语句的查询结果,控制用户通过查询sql语句进行数据查询时,只能查询到数据表中满足过滤条件的数据,实现了sparksql的行级别权限管理,对数据进行了细粒度的权限控制。应用示例假设数据表employee(如表1所示)记录了公司所有员工的信息。xiaowang是公司信息管理员,他使用sparksql创建了数据表employee,并在该数据表中录入了所有员工信息。公司规定,各部门主管只能查看自己本部门(department)的员工信息。zhang和li为a部门的主管。表1nameagedepartmentphoneaddressxxxxxxxxxxxiaowang通过以下sql语句控制权限:sql语句1:createrlsfunctiondepart_aontableemployeereturndepartment=’a’sql语句2:grantrlsfunctiondepart_atouserzhang,li当主管zhang或者li通过以下sql语句查询员工信息:sql语句3:select*fromemployee在本公开实施例中:驱动器接收到sql语句1时,确定该sql语句1为rls函数创建sql语句,可以从该语句中获取rls函数的标识depart_a、表标识employee,以及过滤条件department=’a’。驱动器可以建立depart_a、employee和department=’a’的关联关系,作为第二关联关系,并存储该第二关联关系。驱动器接收到sql语句2时,确定该sql语句2为行授权sql语句,可以从该语句中获取用户标识zhang和li,以及rls函数的标识depart_a。驱动器可以建立zhang和depart_a的关联关系,作为第一关联关系,以及建立li和depart_a的关联关系,作为第一关联关系。以主管zhang通过sql语句3查询员工信息为例。驱动器接收到sql语句3时,确定该sql语句3为查询sql语句,可以获取目标用户标识zhang,以及逻辑计划project。驱动器可以从逻辑计划project中获取目标数据表标识employee。驱动器可以根据第一关联关系,获取目标用户标识zhang对应的目标rls函数的标识depart_a。驱动器可以根据第二关联关系,获取目标rls函数的标识depart_a和目标数据表标识employee对应的过滤条件department=’a’。驱动器可以将过滤条件department=’a’绑定在逻辑计划project中(绑定后的逻辑计划相当于select*fromemployeewheredepartment=’a’的逻辑计划)。驱动器可以将绑定后的逻辑计划转换为物理计划,并将物理计划发送至spark中的执行器,由执行器执行;接收驱动器返回的结果。这样,zhang虽然是查询的所有员工的信息,但是只能获取到a部门员工的信息。图5示出根据本公开一实施例的权限管理装置的框图。该装置可以应用于图2所示的spark架构中的驱动器。如图5所示,该装置50可包括:第一获取模块51,用于从接收到的行授权结构化查询语言sql语句中获取用户标识和行级别安全性rls函数的标识,所述rls函数的返回结果为数据表的过滤条件;第一建立模块52,用于建立并存储从所述行授权sql语句获取的用户标识与rls函数的标识之间的第一关联关系;第二获取模块53,用于接收到查询sql语句时,根据所述第一关联关系,获取所述查询sql语句对应的过滤条件;第三获取模块54,用于基于所述过滤条件,获取所述查询sql语句的查询结果。在本公开实施例中,rls函数的返回结果为数据表的过滤条件,通过行授权sql语句获取用户标识和rls函数的标识,并建立两者之间的关联关系,根据该关联关系确定查询sql语句对应的过滤条件,基于该过滤条件获取查询sql语句的查询结果,控制用户通过查询sql语句进行数据查询时,只能查询到数据表中满足过滤条件的数据,实现了sparksql的行级别权限管理,对数据进行了细粒度的权限控制。图6示出根据本公开一实施例的权限管理装置的框图。如图6所示,在一种可能的实现方式中,装置50还可包括:第四获取模块55,用于接收到rls函数创建sql语句时,从所述rls函数创建sql语句中获取rls函数的标识、数据表的标识以及过滤条件;第二建立模块56,用于建立并存储从所述rls函数创建sql语句获取的rls函数的标识、数据表的标识以及过滤条件的第二关联关系。在一种可能的实现方式中,装置50还可包括:第五获取模块57,用于对接收到的sql语句进行词法解析,获取关键字;第一确定模块58,用于当所述关键字映射到行授权语法时,确定所接收到的sql语句为行授权sql语句;第二确定模块59,用于当所述关键字映射到rls函数创建语法时,确定所接收到的sql语句为rls函数创建sql语句。在一种可能的实现方式中,所述第二获取模块53具体可用于:接收到查询sql语句时,获取所述查询sql语句对应的目标用户标识以及逻辑计划;从所述逻辑计划中获取目标数据表标识,所述目标数据表标识为所述查询sql语句要查询的数据表的标识;根据所述第一关联关系,获取所述目标用户标识对应的目标rls函数的标识;根据所述第二关联关系,获取所述目标rls函数的标识和所述目标数据表标识对应的过滤条件。在一种可能的实现方式中,所述第三获取模块54具体可用于:将所述过滤条件绑定在所述逻辑计划中;将绑定后的逻辑计划转换为物理计划,并将所述物理计划发送至spark中的执行器;接收所述执行器返回的结果。图7是根据一示例性实施例示出的一种用于权限管理装置900的框图。参照图7,该装置900可包括处理器901、存储有机器可执行指令的机器可读存储介质902。处理器901与机器可读存储介质902可经由系统总线903通信。并且,处理器901通过读取机器可读存储介质902中与权限管理逻辑对应的机器可执行指令以执行上文所述的权限管理方法。本文中提到的机器可读存储介质902可以是任何电子、磁性、光学或其它物理存储装置,可以包含或存储信息,如可执行指令、数据,等等。例如,机器可读存储介质可以是:ram(radomaccessmemory,随机存取存储器)、易失存储器、非易失性存储器、闪存、存储驱动器(如硬盘驱动器)、固态硬盘、任何类型的存储盘(如光盘、dvd等),或者类似的存储介质,或者它们的组合。以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本
技术领域
:的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本
技术领域
:的其它普通技术人员能理解本文披露的各实施例。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1