
# 配置Hive表、列或数据库的用户权限
#### 操作场景
使用Hive表或者数据库时，如果用户访问别人创建的表或数据库，需要授予对应的权限。为了实现更严格权限控制，Hive也支持列级别的权限控制。如果要访问别人创建的表上某些列，需要授予列权限。以下介绍使用Manager角色管理功能在表授权、列授权和数据库授权三个场景下的操作。
![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
- 安全模式支持配置Hive表、列或数据库的权限，普通模式不支持配置Hive表、列或数据库的权限。
- MRS 3.x及后续版本支持Ranger，如果当前组件使用了Ranger进行权限控制，须基于Ranger配置相关策略进行权限管理，具体操作可参考[添加Hive的Ranger访问权限策略](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_1858.html)。
 
#### 前提条件
- 获取一个拥有管理员权限的用户，例如"admin"。
- 请参考[创建Hive角色](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_0949.html)，在Manager界面创建一个角色，例如"hrole"，不需要设置Hive权限，设置提交Hql命令到Yarn执行的权限。
- 在Manager界面创建两个使用Hive的"人机"用户并加入"hive"组，例如"huser1"和"huser2"。"huser2"需绑定"hrole"。使用"huser1"创建一个数据库"hdb"，并在此数据库中创建表"htable"。
 
#### 操作步骤
- 表授权 用户在Hive和HDFS中对自己创建的表拥有完整权限，用户访问别人创建的表，需要授予权限。授予权限时只需要授予Hive元数据权限，HDFS文件权限将自动关联。以授予用户对应角色在表"htable"中查询、插入和删除数据的权限为例，操作步骤如下：
  MRS 3.x之前版本，表授权的操作如下：
  1. 在MRS Manager界面，选择"系统设置 \> 权限配置 \> 角色管理"。
  
  2. 在角色"hrole"所在行，单击"修改"。 ![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0000001164451640.png)
     
  
  3. 选择"Hive \> Hive Read Write Privileges"。 ![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0000001164611762.png)
     
  
  4. 在数据库列表中单击指定的数据库名称"hdb"，显示数据库中的表"htable"。
  
  5. 在表"htable"的"权限"列，勾选"Select"、"Insert"和"Delete"。
  
  6. 单击"确定"完成。
  
  
  MRS3.x及后续版本，表授权的操作如下：
  1. 在FusionInsight Manager界面，选择"系统 \> 权限 \> 角色"。
  
  2. 在角色"hrole"所在行，单击"修改"。 ![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0000001209856623.png)
     
  
  3. 选择"*待操作的集群* \> Hive \> Hive读写权限"。
     ![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0000001164616662.png)
     
  
  4. 在数据库列表中单击指定的数据库名称"hdb"，显示数据库中的表"htable"。
  
  5. 在表"htable"的"权限"列，勾选"查询"、"插入"和"删除"。
  
  6. 单击"确定"完成。
   
![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
在角色管理中，授予角色在Hive外表中查询、插入和删除数据的操作与Hive表相同，授予元数据权限将自动关联HDFS文件权限。
- 列授权 用户在Hive和HDFS中对自己创建的表拥有完整权限，用户没有权限访问别人创建的表。如果要访问别人创建的表上某些列，需要授予列权限。授予权限时只需要授予Hive元数据权限，HDFS文件权限将自动关联。以授予用户对应角色在表"htable"的列"hcol"中查询、插入数据的权限为例，操作步骤如下：
  MRS 3.x之前版本，列授权的操作如下：
  1. 在MRS Manager界面，选择"系统设置 \> 权限配置 \> 角色管理"。
  
  2. 在角色"hrole"所在行，单击"修改"。
  
  3. 选择"Hive \> Hive Read Write Privileges"。
  
  4. 在数据库列表中单击指定的数据库名称"hdb"，显示数据库中的表"htable"，单击表"htable"，显示表下的列"hcol"。
  
  5. 在列"hcol"的"权限"列，勾选"Select"和"Insert"。
  
  6. 单击"确定"完成。
  
  
  MRS3.x及后续版本，列授权的操作如下：
  1. 在FusionInsight Manager界面，选择"系统 \> 权限 \> 角色"。
  
  2. 在角色"hrole"所在行，单击"修改"。
  
  3. 选择"*待操作的集群* \> Hive \> Hive读写权限"。
  
  4. 在数据库列表中单击指定的数据库名称"hdb"，显示数据库中的表"htable"，单击表"htable"，显示表下的列"hcol"。
  
  5. 在列"hcol"的"权限"列，勾选"查询"和"插入"。
  
  6. 单击"确定"完成。
   
![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
在权限管理中，授予元数据权限将自动关联HDFS文件权限，所以列授权后会增加表对应所有文件的HDFS ACL权限。
- 数据库授权 用户在Hive和HDFS中对自己创建的数据库拥有完整权限，用户访问别人创建的数据库，需要授予权限。授予权限时只需要授予Hive元数据权限，HDFS文件权限将自动关联。以授予用户对应角色在数据库"hdb"中查询和创建表的权限为例，操作步骤如下，不支持对角色授予数据库其他的操作权限：
  MRS 3.x之前版本，数据库授权的操作如下：
  1. 在MRS Manager界面，选择"系统设置 \> 权限配置 \> 角色管理"。
  
  2. 在角色"hrole"所在行，单击"修改"。
  
  3. 选择"Hive \> Hive Read Write Privileges"。
  
  4. 在数据库"hdb"的"权限"列，勾选"Select"和"Create"。
  
  5. 单击"确定"完成。
  
  
  MRS3.x及后续版本，数据库授权的操作如下：
  1. 在FusionInsight Manager界面，选择"系统 \> 权限 \> 角色"。
  
  2. 在角色"hrole"所在行，单击"修改"。
  
  3. 选择"*待操作的集群* \> Hive \> Hive读写权限"。
  
  4. 在数据库"hdb"的"权限"列，勾选"查询"和"建表"。
  
  5. 单击"确定"完成。
   
![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
- 在权限管理中，为了方便用户使用，授予数据库下表的任意权限将自动关联该数据库目录的HDFS权限。为了避免产生性能问题，取消表的任意权限，系统不会自动取消数据库目录的HDFS权限，但对应的用户只能登录数据库和查看表名。
- 若为角色添加或删除数据库的查询权限，数据库中的表也将自动添加或删除查询权限。
 
#### 相关概念
表1使用Hive表、列或数据库场景权限一览 
| 操作场景                       | 用户需要的权限                                         |
|:---|:---|
| DESCRIBE TABLE             | 查询（Select）                                      |
| SHOW PARTITIONS            | 查询（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） |
| SHOW CREATE TABLE          | 查询（Select）、Select授权（Grant Of Select）            |
| CREATE TABLE               | 建表（Create）                                      |
| ALTER TABLE ADD PARTITION  | 插入（Insert）                                      |
| INSERT                     | 插入（Insert）                                      |
| INSERT OVERWRITE           | 插入（Insert）、删除（Delete）                           |
| LOAD                       | 插入（Insert）、删除（Delete）                           |
| ALTER TABLE DROP PARTITION | 删除（Delete）                                      |
| CREATE FUNCTION            | Hive管理员权限（Hive Admin Privilege）                 |
| DROP FUNCTION              | Hive管理员权限（Hive Admin Privilege）                 |
| ALTER DATABASE             | Hive管理员权限（Hive Admin Privilege）                 |
   
