HetuEngine基于MetaStore权限管控
约束:只适用于Hive类型数据源。
HetuEngine多个集群组网进行协同计算时,元数据由管理集群集中管理,计算在所有集群进行,访问HetuEngine集群用户的权限需要在管理集群进行配置,并在所有计算实例添加拥有Hive用户组权限的同名用户。
启用MetaStore鉴权
- 登录FusionInsight Manager。
- 选择“集群 > 服务 > HetuEngine > 更多 > 停用Ranger鉴权”。
- 选择“集群 > 服务 > HetuEngine > 更多 > 重启服务”。
- 在HSConsole页面重启计算实例。
MetaStore权限
类似于Hive,HetuEngine也是建立在Hadoop上的数据仓库框架,提供类似SQL的结构化数据。
集群中的各类权限需要先授予角色,然后将用户或者用户组与角色绑定。用户只有绑定角色或者加入绑定角色的用户组,才能获得权限。
权限管理介绍
HetuEngine的权限管理是指HetuEngine中管理用户操作数据库的权限系统,以保证不同用户之间操作数据库的独立性和安全性。如果一个用户想操作另一个用户的表、数据库等,需要获取相应的权限才能进行操作,否则会被拒绝。
HetuEngine权限管理部分集成了Hive权限管理的功能。使用HetuEngine权限管理功能需要使用Hive的MetaStore服务和页面上的赋权功能。
- 页面赋权:HetuEngine仅支持页面赋权的方式。在Manager的“系统 > 权限”中,可以进行用户、用户组和角色的添加/删除操作,可以对某个角色进行赋权/撤权。
- 服务获权并判断:当接收到客户端的DDL、DML的SQL命令时,HetuEngine服务会向MetaStore服务获取客户端用户对数据库信息的已有权限,并检查是否包含了所需的所有权限,如果是则继续执行,否则拒绝该用户的操作。当通过了MetaStore的权限检查后,还需进行HDFS的ACLs权限检查。
HetuEngine权限模型
用户使用HetuEngine服务进行SQL操作,必须对HetuEngine数据库和表(含外表和视图)拥有相应的权限。完整的HetuEngine权限模型由元数据权限与HDFS文件权限组成。使用数据库或表时所需要的各种权限都是HetuEngine权限模型中的一种。
- 元数据权限
元数据权限即在元数据层上进行权限控制,与传统关系型数据库类似,HetuEngine数据库包含“建表”和“查询”权限,表和列包含“查询”、“插入”、“UPDATE”和“删除”权限。HetuEngine中还包含拥有者权限“OWNERSHIP”和集群管理员权限“ADMIN”。
- 数据文件权限,即HDFS文件权限
HetuEngine的数据库、表对应的文件保存在HDFS中。默认创建的数据库或表保存在HDFS目录“/user/hive/warehouse”。系统自动以数据库名称和数据库中表的名称创建子目录。访问数据库或者表,需要在HDFS中拥有对应文件的权限,包含“读”、“写”和“执行”权限。
用户对HetuEngine数据库或表执行不同操作时,需要关联不同的元数据权限与HDFS文件权限。例如,对HetuEngine数据表执行查询操作,需要关联元数据权限“查询”,以及HDFS文件权限“读”和“执行”。
使用FusionInsight Manager界面图形化的角色管理功能来管理HetuEngine数据库和表的权限,只需要设置元数据权限,系统会自动关联HDFS文件权限,减少界面操作,提高效率。
HetuEngine使用场景及对应权限
用户通过HetuEngine服务创建数据库需要加入Hive组,不需要角色授权。用户在Hive和HDFS中对自己创建的数据库或表拥有完整权限,可直接创建表、查询数据、删除数据、插入数据、更新数据以及授权他人访问表与对应HDFS目录与文件。
如果用户访问别人创建的表或数据库,需要授予权限。所以根据HetuEngine使用场景的不同,用户需要的权限可能也不相同。
主要场景 |
用户需要的权限 |
---|---|
使用HetuEngine表、列或数据库 |
使用其他用户创建的表、列或数据库,不同的场景需要不同的权限,例如:
|
在一些特殊HetuEngine使用场景下,需要单独设置其他权限。
场景 |
用户需要的权限 |
---|---|
创建HetuEngine数据库、表、外表,或者为已经创建的表或外表添加分区,且Hive用户指定数据文件保存在“/user/hive/warehouse”以外的HDFS目录。 |
需要此目录已经存在,客户端用户是目录的属主,且用户对目录拥有“读”、“写”和“执行”权限。同时用户对此目录上层的每一级目录都拥有“读”和“执行”权限。 |
操作Hive中所有的数据库和表。 |
需加入到supergroup用户组,并且授予“ADMIN”权限。 |
配置表、列和数据库的权限
启用MetaStore鉴权后,使用HetuEngine操作表或者数据库时,如果用户访问别人创建的表或数据库,需要授予对应的权限。为了实现更严格权限控制,HetuEngine也支持列级别的权限控制。如果要访问别人创建的表上某些列,需要授予列权限。
- 在权限管理中,为了方便用户使用,授予数据库下表的任意权限将自动关联该数据库目录的HDFS权限。为了避免产生性能问题,取消表的任意权限,系统不会自动取消数据库目录的HDFS权限,但对应的用户只能登录数据库和查看表名。
- 若为角色添加或删除数据库的查询权限,数据库中的表也将自动添加或删除查询权限。此机制为Hive实现,HetuEngine与Hive保持一致。
- HetuEngine不支持struct数据类型中列名称含有特殊字符(除字母、数字、下划线外的其他字符)。如果struct类型中列名称含有特殊字符,在FusionInsight Manager的“角色”页面进行授权时,该列将无法正确显示。
操作步骤:
- 登录FusionInsight Manager页面。
- 选择“系统 > 权限 > 角色”。
- 单击“添加角色”,输入“角色名称”和“描述”。
- 在“配置资源权限”列表,选择“待操作的集群名称 > Hive”,设置角色权限,请参见表3。
- “Hive管理员权限”:Hive管理员权限。
- “Hive读写权限”:Hive数据表管理权限,可设置与管理已创建的表的数据操作权限。
- Hive角色管理支持授予管理员权限、访问表和视图的权限,不支持数据库的授权。
- Hive管理员权限不支持管理HDFS的权限。
- 如果数据库中的表或者表中的文件数量比较多,在授权时可能需要等待一段时间。例如表的文件数量为1万时,可能需要等待2分钟。
- 单击“确定”完成,返回“角色”页面。
角色创建完成后,可参考创建HetuEngine用户创建HetuEngine用户,并为其赋予相关角色权限。
SQL语句在HetuEngine中进行处理对应的权限要求如表4所示。
操作场景 |
用户需要的权限 |
---|---|
DESCRIBE TABLE |
查询(Select) |
ANALYZE TABLE |
查询(Select)、插入(Insert) |
SHOW COLUMNS |
查询(Select) |
SHOW TABLE STATUS |
查询(Select) |
SHOW TABLE PROPERTIES |
查询(Select) |
SELECT |
查询(Select) |
EXPLAIN |
查询(Select) |
CREATE VIEW |
查询(Select)、Select授权(Grant Of Select)、建表(Create) |
CREATE TABLE |
建表(Create) |
ALTER TABLE ADD PARTITION |
插入(Insert) |
INSERT |
插入(Insert) |
INSERT OVERWRITE |
插入(Insert)、删除(Delete) |
ALTER TABLE DROP PARTITION |
需要授予Table级别的修改(Alter)、删除(Delete)和Column级别的查询(Select)权限 |
ALTER DATABASE |
Hive管理员权限(Hive Admin Privilege) |