大数据环境下Hive访问控制技术研究

2018-02-12 12:24陈娇朱焱丁国富
软件导刊 2018年12期
关键词:大数据环境访问控制

陈娇 朱焱 丁国富

摘要:为增强Hive数据仓库平台的数据安全性,从大数据安全下的访问控制问题着手,利用HPL/SQL工具设计实现批量授权方案,增强其授权操作的便捷性。根据Hive的安全体系结构,探索其在访问控制方面的漏洞,深入源码改进其实现机制。通过改进Hive用户识别机制,使Hive能从客户端与命令行端正确识别当前用户,增强了安全性,为下一步授权工作打下了基础。批量授权方案能正确、快速、自动地为大批量用户授权,操作便利。

关键词:大数据环境;访问控制;Hive数据仓库;Hive数据安全

Research and Verification of Hive Data Warehouse Access

Control Technology in Big Data Environment

CHEN Jiao ZHU Yan DING Guo fu 2

(1.Institute of Information Science and technology, Southwest Jiaotong University;

2.Institute of Advanced Design and Manufacturing, School of Mechanical

Engineering, Southwest Jiaotong University, Chengdu 611756, China)

Abstract:In order to enhance the data security of the Hive data warehouse platform, the HPL/SQL tool is designed from the access control problem under the big data security to realize the batch authorization scheme and enhance the convenience of its authorization operation. According to Hive's security architecture, the vulnerability in access control is explored, and the source code to improve its implementation mechanismis is deepened . By improving the Hive user identification mechanism, Hive can correctly identify the current user from the client and the command line, enhances security, and lays the foundation for the next authorization work. The batch authorization scheme can authorize large volume users correctly, quickly, and automatically, and it is easy to operate.

Key Words:big data environment; access control; hive data warehouse; Hive data security

0 引言

大数据时代数据成为一种资产[1]。Hadoop作为大数据存储和处理的分布式框架,广泛应用于教育、社交媒体等领域。Hive是基于Hadoop的NewSQL软件,适用于开发管理和分析大数据的数据仓库应用。Hive数据仓库可以管理数据量巨大的结构化、半结构化数据[2],通过切片、切块、钻下、卷上等技术分析大数据,获得模式和规律,为政务、商务、金融、教育等提供决策支持。但Hive数据仓库要阻止非法用户的恶意访问,保证数据管理和分析的可靠性。

目前大数据安全研究领域主要在大数据隐私保护和大数据访问控制等方面,文献[3]列出了大数据安全所面临的十大挑战。冯登国等 [4]提出大数据安全面临的挑战主要体现在大数据中的用户隐私保护、大数据的可信性、如何实现大数据访问控制几个方面。

云计算环境中有许多不同类型的访问控制管理系统,如自主访问控制[5](DAC)、强制访问控制[6](MAC)、基于角色的访问控制[7](RBAC)、基于属性的访问控制[8](ABAC)以及基于策略的访问控制[9](PBAC),它們大多是基于身份验证的。例如DAC、MAC、RBAC,根据一组访问控制列表规则验证请求者身份,一旦请求者身份通过认证或请求者被授权,则允许访问相关数据。在ABAC中,除了一系列请求者的相关属性,还需要一些其它属性验证请求者身份[10]。基于策略的PCAL不考虑身份,而是考虑在一组已定义的策略和规则中,访问请求是否被验证。Hadoop增量安全模型[11]实现了基于属性的访问控制(ABAC)或基于角色的访问控制(RBAC)。

Colombo等 [12]第一次将ABAC集成在NoSQL数据库(MongoDB)中。针对Hadoop的数据存储安全,Rong等 [13]提出了两种访问控制方案,第一种结合BigTorrent协议和数据加密,该方案保证只有在请求者拥有解密访问令牌的密钥情况下才能访问,但数据拥有者对谁下载了这些访问令牌文件并且访问这些块却一无所知。针对这个问题,提出了第二种访问控制方案,并且保证数据拥有者可以控制和审计对数据的访问。

USBKey[14]是一种常用的身份认证方式,但在大数据平台上不可能对每位用户提供一个 USBKey[15]。Sun 等[16]提出了云计算环境中基于同态签名的身份认证机制,Wang 等[17]提出了基于公共第三方审计和数据拥有者授权管理的云安全存储服务。

针对Hadoop的MapReduce计算框架的安全问题,Indrajit Roy等 [18]提出了一套分布式计算系统Airavat,其使用DIFC(decentralized information flow control)保证系统免受未经授权的访问,并结合SELinux的安全特性,防止资源泄露[19]。本文从大数据安全访问控制着手,增强Hive平台的数据安全性并实现半自动化授权,以提高访问授权时的方便性。

1 Hive平台架构

图1显示Hive的平台架构以及其与Hadoop的交互方式。Hive对外提供3个接口:命令行(CLI)、网页端用户接口(WUI)、客户端(Client)。CLI是Hive的命令行模式,WUI(Web User Inteface)是一个简单网页界面,通过該界面可对Hive进行简单操作,JDBC/ODBC是Hive客户端,可通过ThriftServer组件由编程方式访问Hive。

2 Hive安全体系

与传统的RDBMS类似,Hive的安全体系也分为三级架构,按其安全级别由低到高分别为数据仓库服务器级、数据仓库级、语句与对象级,如图2所示。若要访问数据仓库服务器,必须先成为Hive的登录用户,登录用户可以分配到某个角色或用户组。要使用某个数据仓库的某些信息,必须是该数据仓库的拥有者或超级管理员;如要访问某数据仓库下的某个对象,或执行某个命令语句,还必须为该用户授予所要操作对象或命令的权限。

2.1 Hive登录用户

从图1可以看出,登录Hive有3种不同的方式,登录方式不同,Hive对登录用户的管理也有所不同,下面以CLI命令端和JDBC客户端为例详细讨论。

在CLI命令行端中,Hive登录用户即是操作系统登录用户,Hive平台对当前系统用户进行权限认证。

在由JDBC访问Hive时,需要通过Thrift Server协议连接。默认的Hive配置没有开启客户端用户身份验证,任何用户都可通过JDBC连接至Hive并作为超级用户操纵Hive中的数据,这是不合理的。为了增强Hive平台的安全性,需要对通过Thrift Server协议连接,对Hive用户身份进行验证。在Hive配置文件中,有几个HiveServer2用户身份验证的可选项供用户选择,如NOSASL、NONE、LDAP、KERBEROS、PAM、CUSTOM。CUSTOM是由用户通过编程自定义的身份验证机制,可通过PasswdAuthenticationProvider接口实现。

本文采用CUSTOM验证机制,当用户名和密码都通过验证,则通过hiveServer2将用户与Hive连接。用户名及密码经过加密算法后预存在本地文件中,从而保障Hive安全体系中“Hive登录用户级别”的安全性。

2.2 数据仓库对象授权

若用户需要访问数据仓库中数据对象,例如查询表中内容,除了需要成功登录Hive平台外,还需要通过GRANT授权语句获得操作该对象的权限。数据对象包括表、视图。权限包括SELECT(查询)、INSERT(添加)、UPDATE(修改)、DELETE(删除)、ALL(全部)5种权限。例如GRANT SELECT ON tableName to USER|ROLE userName/roleName,可使某用户或角色具有查询表的权限。类似的,可通过GRANT授权语句对用户授予增、删、改权限。由于数据仓库对象只包括表、视图,不包括数据仓库本身,所以不能对数据仓库进行授权操作。

2.3 数据库语句授权

在Hive中,限定某些操作只能由具有特定角色的用户使用。在Hive中有两个特殊角色——public和admin。所有用户都属于角色public,给public角色赋权就相当于给所有用户赋权。属于角色admin的用户称为超级管理员,即使没有显式地赋予权限,也具有对数据仓库的全部权限。另外,只有拥有admin角色的用户才拥有执行某些特定语句的权限,例如create role、drop role、show roles等。在使用这些特权时,必须先将角色切换到admin的角色(set role admin),否则即使某个拥有admin的角色也无法进行特权操作。可通过修改Hive配置文件中的hive.users.in.admin.role属性设置得到角色admin,也可让具有admin角色的用户授予。

3 Hive当前用户识别

不同用户拥有不同角色,不同角色拥有不同的操作权限,这是M∶N的对应关系。通过对用户角色权限的控制达到控制用户操作的目的。

在Hive中对当前用户的识别问题需要特别处理。连接Hive主要有两种方式:①命令行方式,直接在命令行下执行操作;②客户端方式,通过Java等编程语言连接Hive。由于客户端方式连接Hive必须经过ThriftServer(hiveServer)协议,导致通过命令行方式和客户端方式连接Hive后有区别。在通过客户端连接Hive时,Hive不能正确识别当前用户,即使是具有不同权限的用户连接Hive后,能够执行的操作也并无差别,造成安全性降低,为此本文提出融合式用户识别技术。

默认的Hive认证机制使用HadoopDefaultAuthenticator(以下简称HDA)获取当前用户名,并对其进行权限验证。但是经过分析Hive源码发现,HDA获取的当前用户是操作系统当前的登录用户,并不是实际意义上的执行HQL(Hive 中类SQL的查询语言)的用户。例如用户user1通过JDBC连接Hive后,对Hive数据仓库进行数据管理和分析操作,理论上Hive应当识别当前用户为user1,然后对user1进行权限认证,判断其是否具有相关权限,但实际上HDA捕获到的当前用户依然为OS登录用户。不管user1具有什么权限,是何身份,其具有的权限都是当前OS登录用户所具有的权限。在这种情况下,为不同用户分配不同角色变得无效。

为解决上述问题, Hive提供了另一种名为SessionStateAuthenticator(以下简称SSA)的验证机制。经过分析源代码以及实验,发现使用SSA可以正确识别通过客户端连接的Hive用户,但是对命令行方式下的用户识别失效,全都返回null。

为了对客户端用户以及命令行端用户进行统一管理,通过比较和分析,融合这两种认证机制实现自定义的Authenticator(MyAuthenticator),使其不仅可以正确识别通过客户端连接的用户,也能正确识别命令行的当前用户。

HDA和SSA实际上都是对HiveAuthenticationProvider接口的具体实现。在HDA中重写了父类中的setConf方法,在该方法中实现了对用户名的初始化,追踪可得知获取的用户名即是系统当前登录用户,故在使用HDA机制时不能正确获取客户端连接的用户。而在SSA中,重写了其父类的setSessionState方法,该方法实现了设置当前的sessionState,在sessionState中包含了当前环境中的一系列参数。在重写父类getUserName(获取当前用户名)的方法中,返回的是当前sessionState中的用户,故而在使用SSA中,不能获取当前系统登录用户。通过对比这两种实现机制,重新提出HiveAuthenticationProvider接口,并重写setConf、setSessionState和getUserName这几个关键方法。在获取用户名时,既获取了系统当前登录用户,也获取通过客户端连接的用户,进一步完善了Hive的安全机制。表1列出本文提出的MyAuthenticator与Hive已有的Authenticator的比较。

4 Hive批量授权

在实际应用中,授权工作复杂、耗时。由于一个用户可能同时具有多个角色,具体应用中用户数目也比较大,如果对每个用户进行手工授权/收权,无疑会耗时耗力。而Hive的组授权是基于操作系统(linux)的,只有在linux中真实存在的用户以及真实存在的组才能对其进行组授权,这一机制无疑大大降低了Hive授权的灵活性。实际上并不需要“真实”存在的用户,用户仅仅是一系列角色的承载体。比如通过客户端连接Hive用户,实际上并不一定是系统登录用户。如何对这类“虚拟”用户快速、便捷地授权,是需要考虑的另一个重要问题。

在Hive中,可以通过hive f ‘文件名方式调用存储在以sql为后缀名的文件代码,并在调用时为文件中的语句传递参数。使用此种方式为用户进行单次授权,只需将用户名及对应的角色传递给文件中的授权语句即可。若要实现批量授权则需要不断调用hive f,并为其传递参数,直到授权完成为止,但在Hive中没有类似的循环功能。

Hive2.0版本之后,Hive中集成了一个HPL/SQL的开源工具[20]。该工具不仅支持Hive,还支持在SparkSQL或其它NoSQL中实现管理和访问控制机制,甚至支持RDBMS中类似Oracle PL/SQL的功能,极大方便了用户使用。以前Hive中较难实现的功能,现可通过HPL/SQL方便地实现,比如自定义变量、基于一个结果集的游标、循环等。本文利用HPL/SQL實现对用户的批量授权。

借鉴关系型数据库中的表结构,设置用户表,包含属性用户ID和用户名。角色表可列出所有存在的角色名,每个角色有一个唯一的ID值(相当于关系型数据库中的主键)。最后,设置一个用户-角色表,存储用户与角色之间的对应关系。

基于表2、表3、表4所示的表结构,利用HPLSQL实现批量赋权。HPLSQL中提供了类似关系型数据库中的游标(cursor),用它可记录并遍历一个结果集。通过查询用户-权限表中的用户名以及角色名,将结果集保存在游标中。然后遍历游标中的数据,将数据作为参数传递给Hive授权语句并调用授权语句,便可实现批量赋权。

核心代码段1定义了一个游标,其中存储了从用户-角色表中查询出的用户名和其对应的角色名,步骤③从游标的下一行中取出数据并存储在名为uname和rname的变量中,步骤⑤将变量uname和rname中存储的用户名与角色名传递给 ‘hivehqlfilePath.sql文件中的HQL代码,并调用相关语句执行授权操作。核心代码段2表示在文件‘hivehqlPath.sql中存储的代码。首先将当前用户所属角色切换至admin,然后接收从核心代码段1步骤⑤中传递的数据,调用授权语句。最后调用hplsql -f test.sql,执行核心代码段1所示代码,实现批量赋权。

核心代码段(1)(test.sql):

①declare cur CURSOR FOR ‘select uname rolename from…where…;

②declare cur;

③fetch cur into uname, rname;

④while SQLCODE=0 THEN

⑤hive-hiveconf userName=uname-hiveconf roleName=rname-f‘hivehqlfilePah.sql

⑥FETCH cur INTO uname, rname;

⑦end while;

⑧close cur;

核心代码段(2)(hivehqlPath.sql):

①set role admin;

②grant${hiveconf:roleName} to user${hiveconf:userName};

5 结语

本文从大数据安全角度出发,在Hive数据仓库平台上从身份认证及访问控制两方面进行相关实验,阐述了存在的问题及解决办法。将Hive安全体系分成三级结构并逐层分析,结合源码对Hive安全体系机制加以改进。实验开始时因为没有意识到Hive针对不同连接方式的用户采取的验证机制不同,所以走了一些弯路。通过阅读资料以及对比实验才发现问题,由此创造性地对Hive机制作了改进。当然,针对不同需求用户可通过分析源码实现自定义机制。另外,由于Hive本身并不支持传统数据中的存储过程,故本文结合HPL/SQL工具,通过找出两者的结合点,编程实现批量授权,提高了Hive数据平台的安全性以及授权操作的方便性,用户也可使用HPL/SQL实现所需功能。

参考文献:

[1] 冯勤群.大数据背景下数据库安全保障体系研究[J].软件导刊,2013,12(1):156 158.

[2] CAPRIOLO E, WAMPLER D,RUTBERGLEN. HIVE编程指南[M]. 曹坤,译.北京:人民邮电出版社, 2013.

[3] CLOUDE SECURITY ALLIENCE.Top ten big data security and privacy challenges[EB/OL].www.cloudsecurityalliance.org, 2012.

[4] 冯登国,张敏,李昊.大数据安全与隐私保护[J].计算机学报,2014,37(1):246 258.

[5] ASSOCIATION N C S. A guide to understanding discretionary access control in trusted systems[EB/OL]. https:∥link.springer.com/chapter/10.1007%2F11734628_17, 1987.

[6] OSBORN S, SANDHU R, MUNAWER Q. Configuring role based access control to enforce mandatory and discretionary access control policies[M]. ACM, 2000.

[7] FERRAIOLO D F, SANDHU R, GAVRILA S, et al. Proposed NIST standard for role based access control[M]. TISSEC, 2001.

[8] HU V, FERRAIOLO D, KUHN R, et al. Guide to attribute based access control (ABAC) definition and considerations[M]. ITLB, 2013.

[9] DIXIT S S. Method for policy based and granular approach to role based access control, US 20100031312 A1[P]. 2010.

[10] HABIBA M, ISLAM M R, ALI A B M S. Access control management for cloud[C].IEEE International Conference on Trust, Security and Privacy in Computing and Communications. IEEE, 2013:485 492.

[11] VINOD SHARMA , PROF N K JOSHI. The evolution of big data security through hadoop incremental security model[J]. International Journal of Innovative Research in Science. Engineering and Technology,2015,4(5):158 164.

[12] COLOMBO P, FERRARI E. Towards a unifying attribute based access control approach for NOSQL datastores[C]. IEEE, International Conference on Data Engineering, 2017.

[13] RONG C, QUAN Z, CHAKRAVORTY A. On access control schemes for Hadoop data storage[C]. International Conference on Cloud Computing and Big Data. IEEE, 2014:641 645.

[14] 曹喆,王以剛.基于USBKey的身份认证机制的研究与实现[J]. 计算机应用与软件,2011,28(2):284 286.

[15] 夏云.非结构化大数据存储系统安全性增强技术研究[D].成都:电子科技大学,2015.

[16] WANG Z, SUN G, CHEN D. A new definition of homomorphic signature for identity management in mobile cloud computing[J]. Journal of Computer & System Sciences, 2014, 80(3):546 553.

[17] WANG C, REN K, LOU W, et al. Toward publicly auditable secure cloud data storage services[J]. Network IEEE, 2010, 24(4):19 24.

[18] ROY I, SETTY S T V, KILZER A, et al. Airavat:security and privacy for MapReduce[M].Usenix Symposium on Networked Systems Design and Implementation, NSDI 2010(4):28 30.

[19] 陈文捷,蔡立志.大数据安全及其评估[J].计算机应用与软件,2016,33(4):34 38.

[20] Hive扩展功能(六)—HPL/SQL(可使用存储过程)[EB/OL].http:∥www.hplsql.org/configuration.

猜你喜欢
大数据环境访问控制
ONVIF的全新主张:一致性及最访问控制的Profile A
基于大数据环境的新闻编辑理念变革创新机制
动态自适应访问控制模型
浅析云计算环境下等级保护访问控制测评技术
大数据平台访问控制方法的设计与实现
基于岗位映射的应急组织间跨域访问控制研究