CN114039792B - 一种数据访问权限控制方法、装置、设备及可读存储介质 - Google Patents
一种数据访问权限控制方法、装置、设备及可读存储介质 Download PDFInfo
- Publication number
- CN114039792B CN114039792B CN202111400869.1A CN202111400869A CN114039792B CN 114039792 B CN114039792 B CN 114039792B CN 202111400869 A CN202111400869 A CN 202111400869A CN 114039792 B CN114039792 B CN 114039792B
- Authority
- CN
- China
- Prior art keywords
- authentication
- information
- client
- operation type
- grammar
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/08—Network architectures or network communication protocols for network security for authentication of entities
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/10—Network architectures or network communication protocols for network security for controlling access to devices or network resources
- H04L63/101—Access control lists [ACL]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种数据访问权限控制方法,该方法对数据服务组件进行侵入性改造,拦截数据服务组件中接收到的针对数据库的操作命令,植入认证鉴权逻辑,由客户端对操作命令进行根据操作类型提取相应的表字段信息后交由服务端进行鉴权处理,服务端返回鉴权结果后经由客户端进行相应的操作拦截以及放行,该方法以服务的方式嵌入至数据服务组件中实现数据访问权限的控制,直接在数据服务组件中进行权限控制,不存在多组件间的兼容性问题;同时针对所有操作命令进行鉴权,保障了数据访问的安全性;同时该方法无大型计算,占用资源小,实现了表、列轻量级身份验证。本发明还公开了一种数据访问权限控制装置、设备及可读存储介质,具有相应的技术效果。
Description
技术领域
本发明涉及信息安全技术领域,特别是涉及一种数据访问权限控制方法、装置、设备及可读存储介质。
背景技术
数据作为信息的重要载体,其安全访问在各个应用领域占有非常重要的地位。随着国家信息安全法规的出台、行业监管力度的不断加强,为了满足数据隔离需求,各个机构都需通过不同方式对权限系统进行升级改造。由于互联网信息量庞大,再加上数据清洗、数据分析、数据建模、数据融合等环节逻辑复杂,传统型数据库已经不能满足现有数据生产需求,所以各大数据厂商开始采用云存储、Spark计算引擎相结合的模式来完成数据处理任务,给业界带来了极大的技术挑战。
随着对数据身份鉴权要求越来越严格,对访问身份分类越来越精细,对数据的访问鉴权,不仅仅是对访问路径的身份鉴权,还要精确到表、字段级别的安全验证。目前业界对于鉴权的处理方式存在着各种安全漏洞,复用开源组件实现鉴权,存在很多语法不兼容的问题,导致鉴权不彻底;基于zeppline的鉴权方式在鉴权失败后,为了保证有权限的任务能正常执行,就直接赋予用户最高权限,导致身份权限无端放大,数据安全性无法保障;另外其他一些鉴权方式也存在着逻辑复杂、内存占用大、普适性差等缺点,已经不能完全满足数据安全访问需求,容易导致数据安全事故频发,进而扰乱市场的稳定秩序。
综上所述,如何实现全面兼容的数据鉴权方案,保障数据安全性,是目前本领域技术人员急需解决的技术问题。
发明内容
本发明的目的是提供一种数据访问权限控制方法、装置、设备及可读存储介质,以实现全面兼容的数据鉴权方案,保障数据安全性。
为解决上述技术问题,本发明提供如下技术方案:
一种数据访问权限控制方法,基于搭建于数据服务组件中的客户端以及服务端,该方法包括:
所述服务端接收所述客户端发送的鉴权请求;其中,所述鉴权请求为根据操作命令的操作类型提取鉴权信息后封装得到,所述操作命令为在所述数据服务组件拦截到的针对数据库的操作命令;
提取所述鉴权请求中的鉴权信息,并确定所述鉴权信息对应的操作类型;
根据所述操作类型调用相应的鉴权操作进行表字段级别鉴权处理,并获取鉴权结果;
将所述鉴权结果返回至所述客户端,以便所述客户端根据所述鉴权结果进行操作调度。
可选地,所述根据所述操作类型调用相应的鉴权操作进行表字段级别鉴权处理,包括:
若所述操作类型为读操作,将所述鉴权信息发送至身份鉴权平台进行表字段级别鉴权处理;
若所述操作类型为写操作,判断所述操作类型是否属于非兼容性语法写操作;
若不属于所述非兼容性语法写操作,将所述鉴权信息发送至hiveserver2进行表字段级别鉴权处理;
若属于所述非兼容性语法写操作,调取所述鉴权信息对应创建的表名下的字段信息,将所述字段信息封装至鉴权请求中,并将所述鉴权请求发送至身份鉴权平台进行表字段级别鉴权处理。
可选地,在所述将所述鉴权信息发送至身份鉴权平台进行表字段级别鉴权处理之前,还包括:
判断所述鉴权信息中是否存在不确定字段;
若存在,调取所述不确定字段对应的表下所有字段信息,作为目标信息;
将所述目标信息替换所述不确定字段。
可选地,在所述获取鉴权结果之后,还包括:
若所述鉴权结果显示鉴权成功,根据用户身份获取所述用户有权限的表的存储路径;
对所述存储路径进行去重整合封装,得到权限列表;
判断所述权限列表中是否存在当前待访问表的存储路径;
若存在,生成验证成功的表存储路径验证结果;
若不存在,生成验证失败的表存储路径验证结果;
则相应地,所述将所述鉴权结果返回至所述客户端,以便所述客户端根据所述鉴权结果进行操作调度,具体为:将所述鉴权结果以及所述表存储路径验证结果返回至所述客户端,以便所述客户端根据所述鉴权结果以及所述表存储路径验证结果进行操作调度。
一种服务端,搭建于数据服务组件,所述服务端包括:
请求接收单元,用于接收所述客户端发送的鉴权请求;其中,所述鉴权请求为根据操作命令的操作类型提取鉴权信息后封装得到,所述操作命令为在所述数据服务组件拦截到的针对数据库的操作命令;
请求识别单元,用于提取所述鉴权请求中的鉴权信息,并确定所述鉴权信息对应的操作类型;
鉴权处理单元,用于根据所述操作类型调用相应的鉴权操作进行表字段级别鉴权处理,并获取鉴权结果;
鉴权反馈单元,用于将所述鉴权结果返回至所述客户端,以便所述客户端根据所述鉴权结果进行操作调度。
一种数据访问权限控制方法,基于搭建于数据服务组件中的客户端以及服务端,该方法包括:
所述客户端拦截所述数据服务组件中接收到的针对数据库的操作命令;
确定所述操作命令的操作类型;
对所述操作命令进行语法树解析,以提取与所述操作类型对应的表字信息,作为鉴权信息;
将所述鉴权信息封装至鉴权请求中,并将所述鉴权请求发送至所述服务端,以便所述服务端根据所述操作类型调用相应的鉴权操作进行表字段级别鉴权处理;
若返回的鉴权结果显示鉴权成功,将所述操作命令提交至执行调度序列;若返回的鉴权结果显示鉴权失败,输出操作异常。
可选地,在所述对所述操作命令进行语法树解析之前,还包括:
确定所述操作命令的嵌套层数,并判断所述嵌套层数是否达到阈值;
若达到,对所述操作命令进行查询拆解,得到若干子命令;其中,各所述子命令的嵌套层数均低于所述阈值;
则相应地,对所述操作命令进行语法树解析,具体为:对各所述子命令进行语义解析。
一种客户端,搭建于数据服务组件,包括:
命令拦截单元,用于拦截所述数据服务组件中接收到的针对数据库的操作命令;
类型确定单元,用于确定所述操作命令的操作类型;
信息提取单元,用于对所述操作命令进行语法树解析,以提取与所述操作类型对应的表字信息,作为鉴权信息;
鉴权请求单元,用于将所述鉴权信息封装至鉴权请求中,并将所述鉴权请求发送至所述服务端,以便所述服务端根据所述操作类型调用相应的鉴权操作进行表字段级别鉴权处理;
命令反馈单元,用于若返回的鉴权结果显示鉴权成功,将所述操作命令提交至执行调度序列;若返回的鉴权结果显示鉴权失败,输出操作异常。
一种计算机设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如上所述基于服务端的数据访问权限控制方法,和/或,如上所述基于客户端的数据访问权限控制方法的步骤。
一种可读存储介质,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上所述基于服务端的数据访问权限控制方法,和/或,如上所述基于客户端的数据访问权限控制方法的步骤。
本发明实施例所提供的方法,对数据服务组件进行侵入性改造,拦截数据服务组件中接收到的针对数据库的操作命令,植入认证鉴权逻辑,由客户端对操作命令进行根据操作类型提取相应的表字段信息后交由服务端进行鉴权处理,服务端返回鉴权结果后经由客户端进行相应的操作拦截以及放行,该方法通过客户端和服务端以服务的方式嵌入至数据服务组件中实现数据访问权限的控制,对数据服务组件的原生代码变动小,同时直接在数据服务组件中进行权限控制,不存在多组件间的兼容性问题,解决了业界数据鉴权方案中语法不兼容的难题;同时针对所有操作命令进行鉴权,不存在权限无端放大的问题,保障了数据访问的安全性;同时该方法无大型计算,体量小,占用资源小,实现了表、列轻量级身份验证,构建了高度普适性的鉴权体系。
相应地,本发明实施例还提供了与上述数据访问权限控制方法相对应的数据访问权限控制装置、设备和可读存储介质,具有上述技术效果,在此不再赘述。
附图说明
为了更清楚地说明本发明实施例或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中一种数据访问权限控制方法的信令图;
图2为本发明实施例中一种嵌入接口示意图;
图3为本发明实施例中一种双重鉴权执行示意图;
图4为本发明实施例中一种客户端的结构示意图;
图5为本发明实施例中一种服务端的结构示意图;
图6为本发明实施例中一种计算机设备的结构示意图。
具体实施方式
本发明的核心是提供一种数据访问权限控制方法,可以实现全面兼容的数据鉴权方案,保障数据安全性。
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
数据的安全访问对于各个领域的安全运行以及发展都具有非常重要的地位。根据前期调研和众多数据比对发现,目前业界对于包括Spark、数据库在内的与用户侧对接的数据服务组件的鉴权处理主要方式主要包括以下几种(以下以数据服务组件为Spark为例进行介绍,其他数据服务组件比如数据库的鉴权处理方式在此不再赘述,均可参照下述介绍):
(1)基于Hive的Spark鉴权模式;
基于Hive(基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制)的Spark鉴权模式通过使用hive llap服务所拥有的用户身份识别及用户输入SQL解析,联合Ranger的访问权限控制功能结合形成中介服务,通过SparkSQL thriftserver(其中thrift指一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务,本方案中其主要用于客户端模块和服务端模块的信息传递)服务对接此中介服务达到了控制权限控制的目的。业界复用Hive的鉴权模式,采用原生的Hive鉴权接口,使用该方案的厂商,对Spark和Hive语法不兼容的地方,选择了忽略的处理方式。
虽然Spark的语法完全符合SQL99标准,但由于其本身的特殊语法构造和特定使用方式,导致Spark和Hive的语法不完全兼容。对于简单的SQL(单层查询)鉴权,复用HiveDriver鉴权类可以兼容,对于略复杂的SQL(例如多层嵌套查询),就会出现语法解析错误、鉴权失败的情况,进而导致任务异常退出,致使本应有权限完成的任务无法执行成功。因此复用开源组件实现鉴权,存在很多语法不兼容的问题,导致鉴权不彻底。
(2)基于zeppline的Spark鉴权模式;
实现zeppelin多租户,不同用户提交的query对应到不同的yarn的队列上,同时对用户提交的query实现表级鉴权,增强访问安全性。对zeppelin使用编码模式提交的SQL进行鉴权,达到全面开放zeppelin的spark应用。为了实现权限验证,zeppelin通过jdbc访问spark的ThriftServer,在执行query语句之前,对用户角色和语句进行权限验证,用http连接Hive提供的RESTful接口auth服务,提供用户role和cmd来进行权限验证,验证通过后再把query语句提交给spark的ThriftServer进行处理。
由于各种因素(包括但不限于外部组件本身故障、语法不兼容、信道传输问题等)导致鉴权失败后,为了保证有权限的任务能正常执行,就直接赋予用户最高权限,导致身份权限无端放大,在一定程度上,数据资产安全受到了严重威胁。因此该方法为保证所有任务能正常执行,适配鉴权失败场景,导致权限无端放大,数据安全性难以保障。
(3)基于kyuubi的Spark鉴权模式;
kyuubi中sparksession是通过反射获取到的,改造源码注入spark.sql.extensions,在kyuubi的启动脚本中添加参数spark.sql.extensions,并指定权限认证类。获取spark的逻辑执行计划,然后通过自定义Optimizer规则,在自定义Rule中完成权限认证。如果鉴权成功,则继续完成任务的其他执行阶段,如果鉴权失败,则直接报错提示并退出客户端。
但是该方法在当日处理请求过多时,如果不加以控制和优化处理,经常导致第三方服务GC(AVA/.NET的垃圾回收器,程序运行在内存中,需要不断通过该机制回收前期申请了,但现在不再使用的内存空间)严重,甚至出现内存泄露的现象,极易出现服务雪崩状态,导致鉴权服务不可用,进而使整个业务产品线瘫痪。故障出现后,排查链路长,涉及服务多,故障排查周期长。因此该方法借助外界组件完成鉴权,服务过于臃肿,导致故障频发,维护难度大。
(4)基于自研产品的Spark鉴权模式。
借助于公司自研产品的数据鉴权系统,首先将用户提交的SQL进行拆解,拆解出表名信息,将表名信息封装成系统能识别的格式,然后提交到数据鉴权系统进行表级别鉴权,然后将鉴权标示返回给Spark入口。如果状态码为1(鉴权成功),则将SQL继续执行,如果状态码为0(鉴权失败),则中止该操作。
而借助于公司自研产品完成鉴权动作,导致Spark鉴权模块无法解耦,无法与开源社区融合,推广性和普适性较差。
对数据的分级分类,不仅仅是对访问路径的身份鉴权,还要精确到表、字段级别的安全验证。基于此,本发明主要解决的技术问题如下:1、解决业界数据鉴权方案中语法不兼容、权限无端放大的难题。2、实现表、列轻量级身份验证,构建高度普适性的鉴权体系。
请参考图1,图1为本发明实施例中一种数据访问权限控制方法的信令图,该方法基于搭建于数据服务组件中的客户端以及服务端,数据服务组件指与用户侧对接的数据引擎,比如数据库、数据处理计算引擎(比如Spark(一种专为大规模数据处理而设计的快速通用的计算引擎,一般用于数据分析、数据建模等领域))等,本发明中针对数据服务组件进行数据访问权限的控制,本实施例中对于应用的数据服务组件的类型不做限定,可以根据实际使用需要确定。
本方法中对数据服务组件进行侵入式改造,侵入式改造主要包括两部分:添加了Java-Agent(以下简称客户端)以及SparkSqlServer(以下简称服务端)。
其中,客户端和服务端主要功能如下:
客户端:主要负责获取必要的认证凭证、SQL拦截、代码注入、SQL语法树解析等。
服务端:主要负责获取ACL信息、SQL鉴权、DDL(Mysql中的数据定义语言,主要操作包括创建/删除数据库、创建/删除表、更新表列信息等)操作处理等。
基于上述客户端以及服务端,该方法包括以下步骤:
S110、客户端拦截数据服务组件中接收到的针对数据库的操作命令;
客户端设置于数据服务组件中,传统下数据服务组件不具有鉴权功能,只能通过外部设备或组件实现,从而容易出现鉴权不完全以及不兼容的问题,本实施例中将客户端嵌入至数据服务组件中,避免了语法不兼容的问题,有客户端拦截数据服务组件中接收到的所有针对数据库的操作命令进行鉴权处理,避免了鉴权不完全的问题。
其中,由于本实施例中对于应用的数据服务组件的类型不做限定,相应地应用于不同数据服务组件中时拦截操作命令的实现方式也不同,因此拦截操作命令可以根据实际应用场景进行设定。为加深理解,本实施例中以应用的数据服务组件为Spark为例,Spark可以通过三种接口(spark-sql模式、spark-jdbc模式、spark-shell模式)进行SQL(访问和处理数据库的标准的计算机语言,即针对数据库的操作命令)的执行,如图2所示,但是无论采用哪种方式启动任务,最终都会经过sparksession方法处理,所以客户端可以从sparksession方法进行针对数据库的操作命令的拦截、注入。
S111、客户端确定操作命令的操作类型;
客户端拦截到用户的操作命令后,首先利用自定义规则将操作命令进行分类,可以分为读操作和写操作类型,也可以进一步针对读操作和写操作进行操作类型的细化分类,本实施例中针对不同操作类型的操作命令提取不同的鉴权信息进行鉴权,因此操作类型的划分具体可以根据实际鉴权需要进行设定,在此不做限定。
S112、客户端对操作命令进行语法树解析,以提取与操作类型对应的表字信息,作为鉴权信息;
根据操作类型对操作命令进行语法解析,提取出不同操作类型中待鉴权的信息,比如读操作可以获取对应的表名、字段名,写操作可以获取对应的表名等,针对不同操作类型相应提取的表字信息(指表、字段级别的信息)类型可以根据实际鉴权需要进行设定,在此不再赘述。
S113、客户端将鉴权信息封装至鉴权请求中,并将鉴权请求发送至服务端;
将鉴权信息(包括用户名、表名、字段名称等信息)发送到服务端,以便服务端调用身份鉴权平台进行身份验证,其中鉴权请求的发送可以通过Thrift服务,也可以通过其他网络通信传输,如Http服务等,在此不做限定。
S120、服务端接收客户端发送的鉴权请求;提取鉴权请求中的鉴权信息,并确定鉴权信息对应的操作类型;
服务端与客户端一同搭建于数据服务组件,服务端主要用于处理鉴权请求,还可以用于提供路径权限的ACL信息,其他功能本实施例中不做限定,可以根据实际功能调度需要进行相应设定。
具体地,服务端接收到客户端发送的鉴权请求时,接收鉴权请求并提取出鉴权请求中的鉴权信息,确定出鉴权信息对应的操作类型,以便于根据不同的操作类型进行相应的访问权限校验。其中,操作类型的确定可以根据鉴权信息的信息种类,也可以通过标志等方式确定,在此不再赘述。
S121、服务端根据操作类型调用相应的鉴权操作进行表字段级别鉴权处理,并获取鉴权结果;
由于不同操作类型对应的鉴权信息不同,相应的鉴权方式也有所差异,针对鉴权信息的鉴权操作,本实施例中不做限定,可以参照相关技术中的鉴权技术,也可以调用合适的第三方进行鉴权,比如鉴权平台,Hive(一种基于Hadoop的数据仓库工具,可以用来进行数据提取、转化、加载)等。需要说明的是,针对不同的鉴权信息可以采用不同的鉴权方式,以满足不同的鉴权需求。
在为不同操作类型的鉴权信息配置相应的表、字段级别的鉴权操作后,根据当前待鉴权的信息的操作类型,匹配并调用相应的鉴权操作进行鉴权处理,得到相应的鉴权结果。
S122、服务端将鉴权结果返回至客户端;
鉴权结果可以以状态码的形式发送,比如以suc表示鉴权成功,以fail表示鉴权失败,也可以以消息或命令的形式发送,在此不做限定。
服务端将数据鉴权结果发送给客户端,鉴权结果的发送方式可以参照鉴权请求的发送方式,均可参照相关技术的介绍,在此不再赘述。
S114、若返回的鉴权结果显示鉴权成功,客户端将操作命令提交至执行调度序列;若返回的鉴权结果显示鉴权失败,客户端输出操作异常。
当服务端返回鉴权结果时,如果返回的鉴权结果表明鉴权成功,即具有操作权限,则客户端将操作命令提交至执行调度序列,予以放行,继续执行任务,比如允许读取或者写入等;如果返回的鉴权结果表明鉴权失败,即当前操作命令经验证不具有操作权限,客户端可以输出操作异常,直接抛出异常以终止任务。
基于上述介绍,本实施例提供的数据访问权限控制方法中,对数据服务组件进行侵入性改造,拦截数据服务组件中接收到的针对数据库的操作命令,植入认证鉴权逻辑,由客户端对操作命令进行根据操作类型提取相应的表字段信息后交由服务端进行鉴权处理,服务端返回鉴权结果后经由客户端进行相应的操作拦截以及放行,该方法通过客户端和服务端以服务的方式嵌入至数据服务组件中实现数据访问权限的控制,对数据服务组件的原生代码变动小,同时直接在数据服务组件中进行权限控制,不存在多组件间的兼容性问题,解决了业界数据鉴权方案中语法不兼容的难题;同时针对所有操作命令进行鉴权,不存在权限无端放大的问题,保障了数据访问的安全性;同时该方法无大型计算,体量小,占用资源小,实现了表、列轻量级身份验证,构建了高度普适性的鉴权体系。
需要说明的是,基于上述实施例,本发明实施例还提供了相应的改进方案。在优选/改进实施例中涉及与上述实施例中相同步骤或相应步骤之间可相互参考,相应的有益效果也可相互参照,在本文的优选/改进实施例中不再一一赘述。
上述实施例中对于服务端对不同操作类型的鉴权信息进行表字段级别鉴权处理的具体实现方式不做限定,本实施例中主要介绍一种信息鉴权方式,具体可以包括以下步骤:
(1)若操作类型为读操作,将鉴权信息发送至身份鉴权平台进行表字段级别鉴权处理;
对于读请求,可以发送至外部的身份鉴权平台进行表字段级别鉴权处理,身份鉴权平台可以保证对于全部读请求的有效鉴权,且处理速度以及精准度较高,因此本实施例中提出调用身份鉴权平台对读请求进行鉴权处理。当然,也可以调用其他第三方或采用其他的鉴权方式,均可参照本实施例的介绍,在此不再赘述。
需要说明的是,如果鉴权信息的封装形式无法被身份鉴权平台识别时,在将鉴权信息发送至身份鉴权平台之前,需要将其封装成能被公司身份鉴权平台识别的数组集合,具体步骤的设置可以根据实际鉴权信息的类型以及平台可识别的数据类型进行相应调整,在此不做限定。
(2)若操作类型为写操作,判断操作类型是否属于非兼容性语法写操作;
若操作类型为写入,由于写入操作包含的类型较多,进行单一鉴权处理时容易出现鉴权不完全、不彻底的问题,为避免这一问题,本实施例中提出针对写操作进行分类型差异化鉴权操作。具体地,判断写操作是否属于非兼容性语法写操作,其中,非兼容性语法写操作指数据服务组件相对其他组件特殊的语法操作,即hive不兼容spark的语法,比如create table tablename as select等特殊操作。该类操作一般鉴权组件难以兼容识别,本实施例中将其与其他操作分别进行鉴权处理。(3)若不属于非兼容性语法写操作,将鉴权信息发送至hiveserver2(一个服务接口,是远程客户端可以执行对Hive的查询并返回结果,本方案中其主要用于鉴权并执行特殊SQL)进行表字段级别鉴权处理;
若不属于非兼容性语法写操作,即写操作属于除create table tablename asselect以外的其他兼容性DDL操作,将鉴权信息发送给HiveServer2进行鉴权并执行(此处的DDL操作均由Hive执行,不再交由数据服务组件处理),将hiveserver2的处理结果(鉴权、执行状态)反馈给客户端。
此时客户端在收到反馈信息后,如果鉴权成功并执行完成,客户端可以在代码嵌入位置将原SQL请求更新为use currentdb(当前数据库名称)命令,避免任务重复执行;如果鉴权或执行失败,客户端可以直接抛出异常信息。
(4)若属于非兼容性语法写操作,调取鉴权信息对应创建的表名下的字段信息,将字段信息封装至鉴权请求中,并将鉴权请求发送至身份鉴权平台进行表字段级别鉴权处理。
对于特殊请求(例如create table tablename as select操作),根据用户创建的表名,(向Hive Metastore(Hive的一个服务组件,主要存储表的元数据信息,本方案中其主要充当查询表字段信息的角色)发送)查询元数据请求,获取表字段信息。获取信息后,将获取的表、字段信息、访问用户、权限信息等要鉴权的信息封装成身份鉴权平台规定的数据格式。提交鉴权请求给身份鉴权平台,将封装的鉴权信息写入身份鉴权平台,以便身份鉴权平台根据接收到的鉴权信息进行表字段级别鉴权处理。
本实施例中仅以上述鉴权方式为例进行介绍,其中调用的鉴权组件以及方式可以根据使用需要自由调配,本实施例中提出的组件组合具有较高的执行效率和高可用特性,其他鉴权方式的实现均可参照本实施例的介绍,在此不再赘述。
另外,基于上述实施例,为进一步提升鉴权的全面性,经研究发现某些操作请求中可能存在一些不确定字段,比如“select*”,这种字段提取至鉴权信息后可能会导致字段对应的实际信息无法被鉴权等情况,则进一步地,在服务端将鉴权信息发送至身份鉴权平台进行表字段级别鉴权处理之前,可以首先判断鉴权信息中是否存在不确定字段;若存在,调取不确定字段对应的表下所有字段信息,作为目标信息;将目标信息替换不确定字段,以避免信息被漏检。
该方法中在鉴权集合中存在比如“select*”这种不确定字段的信息时,首先连接Hive Metastore(一种元数据查询组件)获取该表的所有字段,将鉴权集合中的不确定信息*替换成获取的字段信息,可以保证鉴权的全面性。
基于上述实施例,为提升对复杂命令的兼容性以及针对复杂操作命令的鉴权效率,则在客户端对操作命令进行语法树解析之前,可以进一步执行以下步骤:
(1)确定操作命令的嵌套层数,并判断嵌套层数是否达到阈值;
(2)若达到,对操作命令进行查询拆解,得到若干子命令;其中,各子命令的嵌套层数均低于阈值;
则相应地,客户端对操作命令进行语法树解析,具体为:对各子命令进行语义解析。
对于复杂的查询(多层嵌套查询),先将其拆解成简单查询(单层查询),将拆解后的操作命令进行词义解析、语法解析、构建语法树等语法树解析步骤得到最终的鉴权集合,具体地语法树解析可以调用Antrl(一种语法解析器,可以根据输入自动生成语法树并可视化的显示出来的开源语法分析器,例如输入一个SQL,可以解析出其表名、字段名等信息),也可以调用其他组件,在此不做限定。
本实施例提供的命令处理方法中通过对复杂命令拆解为简单命令,相比原有直接针对复杂命令进行鉴权,该种命令拆解方式可以显著提升处理效率。
另外,上述实施例中服务端处理了鉴权请求,仅仅是能访问数据的第一步,如果鉴权成功,只说明该用户有了表、字段级别的权限,要想真正访问表数据,还需要保证其拥有该表存储路径的权限,为此,本实施例中提出进一步获取ACL信息进行路径权限的校验,如图3所示为一种双重鉴权执行示意图,图中以数据服务组件为Spark为例。
主要处理流程如下:
(1)在获取鉴权结果之后若鉴权结果显示鉴权成功,根据用户身份获取用户有权限的表的存储路径;
在启动客户端的时候,服务端可以根据用户身份连接Mysql(一种关系型数据库管理系统,同时客户端模块获取必要的认证凭证,进行SQL拦截、代码注入、SQL语法树解析等;服务端模块获取ACL信息进行SQL鉴权、DDL操作处理等,以实现访问云存储数据、表、字段鉴权的目的。
本方案中其主要用于存储表元数据信息)元数据来获取该用户有权限表的Location(表存储路径)。
(2)对存储路径进行去重整合封装,得到权限列表;
处理存储路径信息:对所有Location进行去重、整合,封装成云服务能够识别的ACL信息(一种基于包过滤的访问控制技术,它可以根据设定的条件对接口上的数据包进行过滤,允许其通过或丢弃,本方案中可以简单认定为一个封装了鉴权路径信息的权限列表)。
(3)判断权限列表中是否存在当前待访问表的存储路径;
如果ACL信息中包含访问表的Location,直接返回查询数据,执行步骤(4)。
(4)若存在,生成验证成功的表存储路径验证结果;
(5)若不存在,生成验证失败的表存储路径验证结果;
如果表存储路径不存在于云服务提供的路径范围内,则生成验证失败的表存储路径验证结果,报异常。
则相应地,将鉴权结果返回至客户端,以便客户端根据鉴权结果进行操作调度,具体为:将鉴权结果以及表存储路径验证结果返回至客户端,以便客户端根据鉴权结果以及表存储路径验证结果进行操作调度。
本实施例中在表、字段级别的鉴权之后,又进行了表存储路径的权限校验,可以严密保障表数据访问的安全性。
相应于上面的方法实施例,本发明实施例还提供了一种客户端,该客户端搭建于数据服务组件中,下文描述的客户端与上文描述的数据访问权限控制方法可相互对应参照。
参见图4所示,该客户端主要包括以下模块:
命令拦截单元110主要用于拦截数据服务组件中接收到的针对数据库的操作命令;
类型确定单元120主要用于确定操作命令的操作类型;
信息提取单元130主要用于对操作命令进行语法树解析,以提取与操作类型对应的表字信息,作为鉴权信息;
鉴权请求单元140主要用于将鉴权信息封装至鉴权请求中,并将鉴权请求发送至服务端,以便服务端根据操作类型调用相应的鉴权操作进行表字段级别鉴权处理;
命令反馈单元150主要用于若返回的鉴权结果显示鉴权成功,将操作命令提交至执行调度序列;若返回的鉴权结果显示鉴权失败,输出操作异常。
相应于上面的方法实施例,本发明实施例还提供了一种服务端,该服务端搭建于数据服务组件中,下文描述的服务端与上文描述的数据访问权限控制方法可相互对应参照。
参见图5所示,该服务端主要包括以下模块:
请求接收单元210主要用于接收客户端发送的鉴权请求;其中,鉴权请求为根据操作命令的操作类型提取鉴权信息后封装得到,操作命令为在数据服务组件拦截到的针对数据库的操作命令;
请求识别单元220主要用于提取鉴权请求中的鉴权信息,并确定鉴权信息对应的操作类型;
鉴权处理单元230主要用于根据操作类型调用相应的鉴权操作进行表字段级别鉴权处理,并获取鉴权结果;
鉴权反馈单元240主要用于将鉴权结果返回至客户端,以便客户端根据鉴权结果进行操作调度。
相应于上面的方法实施例,本发明实施例还提供了一种计算机设备,下文描述的一种计算机设备与上文描述的数据访问权限控制方法可相互对应参照。
该计算机设备包括:
存储器,用于存储计算机程序;
处理器,用于执行计算机程序时实现上述方法实施例的基于客户端的数据访问权限控制方法,或,基于服务端的数据访问权限控制方法,或同时实现基于客户端的数据访问权限控制方法以及基于服务端的数据访问权限控制方法的步骤。
具体的,请参考图6,为本实施例提供的一种计算机设备的具体结构示意图,该计算机设备可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(central processing units,CPU)322(例如,一个或一个以上处理器)和存储器332,存储器332存储有一个或一个以上的计算机应用程序342或数据344。其中,存储器332可以是短暂存储或持久存储。存储在存储器332的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对数据处理设备中的一系列指令操作。更进一步地,中央处理器322可以设置为与存储器332通信,在计算机设备301上执行存储器332中的一系列指令操作。
计算机设备301还可以包括一个或一个以上电源326,一个或一个以上有线或无线网络接口350,一个或一个以上输入输出接口358,和/或,一个或一个以上操作系统341。
上文所描述的数据访问权限控制方法中的步骤可以由计算机设备的结构实现。
相应于上面的方法实施例,本发明实施例还提供了一种可读存储介质,下文描述的一种可读存储介质与上文描述的一种数据访问权限控制方法可相互对应参照。
一种可读存储介质,可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述方法实施例的数据访问权限控制方法的步骤。
该可读存储介质具体可以为U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可存储程序代码的可读存储介质。
本领域技术人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
Claims (9)
1.一种数据访问权限控制方法,其特征在于,基于搭建于数据服务组件中的客户端以及服务端,该方法包括:
所述服务端接收所述客户端发送的鉴权请求;其中,所述鉴权请求为根据操作命令的操作类型提取鉴权信息后封装得到,所述操作命令为在所述数据服务组件拦截到的针对数据库的操作命令;
提取所述鉴权请求中的鉴权信息,并确定所述鉴权信息对应的操作类型;
根据所述操作类型调用相应的鉴权操作进行表字段级别鉴权处理,并获取鉴权结果;
将所述鉴权结果返回至所述客户端,以便所述客户端根据所述鉴权结果进行操作调度,
所述根据所述操作类型调用相应的鉴权操作进行表字段级别鉴权处理,包括:
若所述操作类型为读操作,将所述鉴权信息发送至身份鉴权平台进行表字段级别鉴权处理;
若所述操作类型为写操作,判断所述操作类型是否属于非兼容性语法写操作;
若不属于所述非兼容性语法写操作,将所述鉴权信息发送至hiveserver2进行表字段级别鉴权处理;
若属于所述非兼容性语法写操作,调取所述鉴权信息对应创建的表名下的字段信息,将所述字段信息封装至鉴权请求中,并将所述鉴权请求发送至身份鉴权平台进行表字段级别鉴权处理。
2.根据权利要求1所述的数据访问权限控制方法,其特征在于,在所述将所述鉴权信息发送至身份鉴权平台进行表字段级别鉴权处理之前,还包括:
判断所述鉴权信息中是否存在不确定字段;
若存在,调取所述不确定字段对应的表下所有字段信息,作为目标信息;
将所述目标信息替换所述不确定字段。
3.根据权利要求1至2任一项所述的数据访问权限控制方法,其特征在于,在所述获取鉴权结果之后,还包括:
若所述鉴权结果显示鉴权成功,根据用户身份获取所述用户有权限的表的存储路径;
对所述存储路径进行去重整合封装,得到权限列表;
判断所述权限列表中是否存在当前待访问表的存储路径;
若存在,生成验证成功的表存储路径验证结果;
若不存在,生成验证失败的表存储路径验证结果;
则相应地,所述将所述鉴权结果返回至所述客户端,以便所述客户端根据所述鉴权结果进行操作调度,具体为:将所述鉴权结果以及所述表存储路径验证结果返回至所述客户端,以便所述客户端根据所述鉴权结果以及所述表存储路径验证结果进行操作调度。
4.一种服务端,其特征在于,搭建于数据服务组件,所述服务端包括:
请求接收单元,用于接收客户端发送的鉴权请求;其中,所述鉴权请求为根据操作命令的操作类型提取鉴权信息后封装得到,所述操作命令为在所述数据服务组件拦截到的针对数据库的操作命令;
请求识别单元,用于提取所述鉴权请求中的鉴权信息,并确定所述鉴权信息对应的操作类型;
鉴权处理单元,用于根据所述操作类型调用相应的鉴权操作进行表字段级别鉴权处理,并获取鉴权结果;
鉴权反馈单元,用于将所述鉴权结果返回至所述客户端,以便所述客户端根据所述鉴权结果进行操作调度,
所述根据所述操作类型调用相应的鉴权操作进行表字段级别鉴权处理,包括:
若所述操作类型为读操作,将所述鉴权信息发送至身份鉴权平台进行表字段级别鉴权处理;
若所述操作类型为写操作,判断所述操作类型是否属于非兼容性语法写操作;
若不属于所述非兼容性语法写操作,将所述鉴权信息发送至hiveserver2进行表字段级别鉴权处理;
若属于所述非兼容性语法写操作,调取所述鉴权信息对应创建的表名下的字段信息,将所述字段信息封装至鉴权请求中,并将所述鉴权请求发送至身份鉴权平台进行表字段级别鉴权处理。
5.一种数据访问权限控制方法,其特征在于,基于搭建于数据服务组件中的客户端以及服务端,该方法包括:
所述客户端拦截所述数据服务组件中接收到的针对数据库的操作命令;
确定所述操作命令的操作类型;
对所述操作命令进行语法树解析,以提取与所述操作类型对应的表字信息,作为鉴权信息;
将所述鉴权信息封装至鉴权请求中,并将所述鉴权请求发送至所述服务端,以便所述服务端根据所述操作类型调用相应的鉴权操作进行表字段级别鉴权处理;
若返回的鉴权结果显示鉴权成功,将所述操作命令提交至执行调度序列;若返回的鉴权结果显示鉴权失败,输出操作异常,所述根据所述操作类型调用相应的鉴权操作进行表字段级别鉴权处理,包括:
若所述操作类型为读操作,将所述鉴权信息发送至身份鉴权平台进行表字段级别鉴权处理;
若所述操作类型为写操作,判断所述操作类型是否属于非兼容性语法写操作;
若不属于所述非兼容性语法写操作,将所述鉴权信息发送至hiveserver2进行表字段级别鉴权处理;
若属于所述非兼容性语法写操作,调取所述鉴权信息对应创建的表名下的字段信息,将所述字段信息封装至鉴权请求中,并将所述鉴权请求发送至身份鉴权平台进行表字段级别鉴权处理。
6.根据权利要求5所述的数据访问权限控制方法,其特征在于,在所述对所述操作命令进行语法树解析之前,还包括:
确定所述操作命令的嵌套层数,并判断所述嵌套层数是否达到阈值;
若达到,对所述操作命令进行查询拆解,得到若干子命令;其中,各所述子命令的嵌套层数均低于所述阈值;
则相应地,对所述操作命令进行语法树解析,具体为:对各所述子命令进行语义解析。
7.一种客户端,其特征在于,搭建于数据服务组件,包括:
命令拦截单元,用于拦截所述数据服务组件中接收到的针对数据库的操作命令;
类型确定单元,用于确定所述操作命令的操作类型;
信息提取单元,用于对所述操作命令进行语法树解析,以提取与所述操作类型对应的表字信息,作为鉴权信息;
鉴权请求单元,用于将所述鉴权信息封装至鉴权请求中,并将所述鉴权请求发送至服务端,以便所述服务端根据所述操作类型调用相应的鉴权操作进行表字段级别鉴权处理;
命令反馈单元,用于若返回的鉴权结果显示鉴权成功,将所述操作命令提交至执行调度序列;若返回的鉴权结果显示鉴权失败,输出操作异常,
所述根据所述操作类型调用相应的鉴权操作进行表字段级别鉴权处理,包括:
若所述操作类型为读操作,将所述鉴权信息发送至身份鉴权平台进行表字段级别鉴权处理;
若所述操作类型为写操作,判断所述操作类型是否属于非兼容性语法写操作;
若不属于所述非兼容性语法写操作,将所述鉴权信息发送至hiveserver2进行表字段级别鉴权处理;
若属于所述非兼容性语法写操作,调取所述鉴权信息对应创建的表名下的字段信息,将所述字段信息封装至鉴权请求中,并将所述鉴权请求发送至身份鉴权平台进行表字段级别鉴权处理。
8.一种计算机设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至3任一项所述数据访问权限控制方法,和/或,如权利要求5或6所述数据访问权限控制方法的步骤。
9.一种可读存储介质,其特征在于,所述可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至3任一项所述数据访问权限控制方法,和/或,如权利要求5或6所述数据访问权限控制方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111400869.1A CN114039792B (zh) | 2021-11-19 | 2021-11-19 | 一种数据访问权限控制方法、装置、设备及可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111400869.1A CN114039792B (zh) | 2021-11-19 | 2021-11-19 | 一种数据访问权限控制方法、装置、设备及可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114039792A CN114039792A (zh) | 2022-02-11 |
CN114039792B true CN114039792B (zh) | 2023-08-11 |
Family
ID=80145368
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111400869.1A Active CN114039792B (zh) | 2021-11-19 | 2021-11-19 | 一种数据访问权限控制方法、装置、设备及可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114039792B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115061826B (zh) * | 2022-02-28 | 2024-02-13 | 华为技术有限公司 | 一种组件通信方法及计算设备 |
CN114692208B (zh) * | 2022-05-31 | 2022-09-27 | 中建电子商务有限责任公司 | 一种数据查询服务权限的处理方法 |
CN116796306B (zh) * | 2023-08-15 | 2023-11-14 | 浩鲸云计算科技股份有限公司 | 一种同一租户下notebook表权限控制的方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102100097A (zh) * | 2008-11-27 | 2011-06-15 | 中兴通讯股份有限公司 | 一种移动终端的鉴权方法及系统 |
CN109726535A (zh) * | 2018-12-29 | 2019-05-07 | 杭州数澜科技有限公司 | 一种用于大数据平台的数据权限管理的方法和系统 |
CN110677399A (zh) * | 2019-09-20 | 2020-01-10 | 中国联合网络通信集团有限公司 | 鉴权方法及装置 |
CN112948842A (zh) * | 2019-12-10 | 2021-06-11 | 华为技术有限公司 | 一种鉴权方法及相关设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7490242B2 (en) * | 2004-02-09 | 2009-02-10 | International Business Machines Corporation | Secure management of authentication information |
-
2021
- 2021-11-19 CN CN202111400869.1A patent/CN114039792B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102100097A (zh) * | 2008-11-27 | 2011-06-15 | 中兴通讯股份有限公司 | 一种移动终端的鉴权方法及系统 |
CN109726535A (zh) * | 2018-12-29 | 2019-05-07 | 杭州数澜科技有限公司 | 一种用于大数据平台的数据权限管理的方法和系统 |
CN110677399A (zh) * | 2019-09-20 | 2020-01-10 | 中国联合网络通信集团有限公司 | 鉴权方法及装置 |
CN112948842A (zh) * | 2019-12-10 | 2021-06-11 | 华为技术有限公司 | 一种鉴权方法及相关设备 |
Non-Patent Citations (1)
Title |
---|
吴庆杰 ; 田鹏 ; .异构认证系统间身份同步的设计与实现.华东师范大学学报(自然科学版).2015,(S1),全文. * |
Also Published As
Publication number | Publication date |
---|---|
CN114039792A (zh) | 2022-02-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114039792B (zh) | 一种数据访问权限控制方法、装置、设备及可读存储介质 | |
US11392586B2 (en) | Data protection method and device and storage medium | |
CN106777101B (zh) | 数据处理引擎 | |
EP2616965B1 (en) | Support for a parameterized query/view in complex event processing | |
CN105574082A (zh) | 基于Storm的流处理方法及系统 | |
KR20140112427A (ko) | 아파치 하둡을 위한 로우 레이턴시 쿼리 엔진 | |
CN111414381B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN112988485A (zh) | 电力物联网设备模拟测试方法及装置 | |
CN109669976A (zh) | 基于etl的数据服务方法及设备 | |
CN113127520B (zh) | 一种基于代理模式的分布式数据库sql审核拦截方法及装置 | |
US20190073600A1 (en) | Skipping maintenance mode of applications | |
CN110674161A (zh) | 上线sql的方法、系统、存储介质及sql操作平台 | |
CN109857757A (zh) | 数据库间的语句转换方法、系统和终端 | |
US20240143576A1 (en) | Registering additional type systems using a hub data model for data processing | |
CN115203750A (zh) | 基于Hive插件对Hive数据权限管控及安全审计方法及系统 | |
CN101930361A (zh) | 在线数据存储服务提供方法及系统 | |
WO2022033079A1 (zh) | 一种皮基站配置方法、装置、存储介质和电子装置 | |
WO2020151209A1 (zh) | 一种基于多维数据变量的数据交互方法及平台 | |
CN113849492A (zh) | 为多场景业务提供标准化数据质量校验的系统 | |
CN116578585B (zh) | 数据查询方法、装置、电子设备及存储介质 | |
CN107944288B (zh) | 一种数据访问控制方法和装置 | |
CN117421302A (zh) | 一种数据处理方法及相关设备 | |
US20150347506A1 (en) | Methods and apparatus for specifying query execution plans in database management systems | |
CN112487075A (zh) | 一种集成关系型和非关系型数据库数据转换的算子 | |
CN115982278A (zh) | 基于mpp数据库的自助式实时数据比对方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |