
# 添加Spark2x的Ranger访问权限策略
#### 操作场景
Ranger管理员可通过Ranger为Spark2x用户进行相关的权限设置。
![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
1. Spark2x开启或关闭Ranger鉴权后，需要重启Spark2x服务。
2. 需要重新下载客户端，或手动刷新客户端配置文件"*客户端安装目录* /Spark2x/spark/conf/spark-defaults.conf"：
   开启Ranger鉴权：spark.ranger.plugin.authorization.enable=true，同时需要修改参数"spark.sql.authorization.enabled"值为"true"。
   关闭Ranger鉴权：spark.ranger.plugin.authorization.enable=false
   
3. Spark2x中，spark-beeline（即连接到JDBCServer的应用）支持Ranger的IP过滤策略（即Ranger权限策略中的**Policy Conditions**），spark-submit与spark-sql不支持。
 
#### 前提条件
- 已安装Ranger服务且服务运行正常。
- 已启用Hive服务的Ranger鉴权功能，并且需要先重启Hive服务，再重启Spark服务，再启用Spark服务的Ranger鉴权。启用Spark服务的Ranger鉴权后再重启Spark服务。
- 已创建用户需要配置权限的用户、用户组或Role。
- 创建的用户已加入hive用户组。
 
#### 操作步骤
1. 使用Ranger管理员用户**rangeradmin** 登录Ranger管理页面，具体操作可参考[登录Ranger WebUI界面](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_1850.html)。
2. 在首页中单击"HADOOP SQL"区域的组件插件名称如"Hive"。 
   ![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0000001389495820.png)
   
   
3. 在"Access"页签单击"Add New Policy"，添加Spark2x权限控制策略。 
   ![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0000001205945405.png)
   
   
4. 根据业务需求配置相关参数。 
   表1Spark2x权限参数 
   | 参数名称              | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   |:---|:---|
   | Policy Name       | 策略名称，可自定义，不能与本服务内其他策略名称重复。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | Policy Conditions | IP过滤策略，可自定义，配置当前策略适用的主机节点，可填写一个或多个IP或IP段，并且IP填写支持"\*"通配符，例如：192.168.1.10,192.168.1.20或者192.168.1.\*。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   | Policy Label      | 为当前策略指定一个标签，您可以根据这些标签搜索报告和筛选策略。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   | database          | 适用该策略的Spark2x数据库名称。 "Include"策略适用于当前输入的对象，"Exclude"表示策略适用于除去当前输入内容之外的其他对象。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | table             | 适用该策略的Spark2x表名称。 如果需要添加基于UDF的策略，可切换为UDF，然后输入UDF的名称。 "Include"策略适用于当前输入的对象，"Exclude"表示策略适用于除去当前输入内容之外的其他对象。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | column            | 适用该策略的列名，填写\*时表示所有列。 "Include"策略适用于当前输入的对象，"Exclude"表示策略适用于除去当前输入内容之外的其他对象。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | Description       | 策略描述信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | Audit Logging     | 是否审计此策略。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | Allow Conditions  | 策略允许条件，配置本策略内允许的权限及例外。 在"Select Role"、"Select Group"、"Select User"列选择已创建好的需要授予权限的Role、用户组或用户，单击"Add Conditions"，添加策略适用的IP地址范围，然后再单击"Add Permissions"，添加对应权限。 - select：查询权限  - update：更新权限  - Create：创建权限  - Drop：drop操作权限  - Alter：alter操作权限  - Index：索引操作权限  - All：所有执行权限  - Read：可读权限  - Write：可写权限  - Temporary UDF Admin：临时UDF管理权限  - Select/Deselect All：全选/取消全选   如需添加多条权限控制规则，可单击![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0265769762.png)按钮添加。 如需当前条件中的用户或用户组管理本条策略，可勾选"Delegate Admin"，这些用户将成为受委托的管理员。被委托的管理员可以更新、删除本策略，它还可以基于原始策略创建子策略。 |
   | Deny Conditions   | 策略拒绝条件，配置本策略内拒绝的权限及例外，配置方法与"Allow Conditions"类似。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
      
   表2设置权限 
   | 任务场景         | 角色授权操作                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   |:---|:---|
   | role admin操作 | 1. 在首页中单击"Settings"，选择"Roles \> Add New Role"。  2. 设置"Role Name"为"admin"，在"Users"区域，单击"Select User"，选择对应用户名。  3. 单击Add Users按钮，在对应用户名所在行勾选"Is Role Admin"，单击"Save"保存配置。   说明： 用户绑定Hive管理员角色后，在每个维护操作会话中，还需要执行以下操作： 1. 以客户端安装用户，登录安装Hive客户端的节点。  2. 执行以下命令配置环境变量。 例如，Spark2x客户端安装目录为"/opt/client"，执行**source /opt/client/bigdata_env**   3. 执行以下命令认证用户。 **kinit Spark2x** *业务用户*   4. 执行以下命令登录客户端工具。 **spark-beeline**   5. 执行以下命令更新用户的管理员权限。 **set role admin;**    |
   | 创建库表操作       | 1. 在"Policy Name"填写策略名称。  2. "database"右侧填写并选择对应的数据库（如果是创建库，需填写将要创建的库名称，或填写"\*"表示任意名称的数据库，然后选择所写名称），在"table"与"column"右侧填写并选择对应的表名称、列名称，均支持通配符（"\*"）匹配。  3. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  4. 单击"Add Permissions"，勾选"Create"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | 删除库表操作       | 1. 在"Policy Name"填写策略名称。  2. "database"右侧填写并选择对应的数据库（如果是删除库，需填写将要创建的库名称，或填写"\*"表示任意名称的数据库，然后选择所写名称），在"table"与"column"右侧填写并选择对应的表名称、列名称，均支持通配符（"\*"）匹配。  3. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  4. 单击"Add Permissions"，勾选"Drop"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   | ALTER操作      | 1. 在"Policy Name"填写策略名称。  2. "database"右侧填写并选择对应的数据库，在"table"右侧填写并选择对应的表，在"column"右侧填写并选择对应的列名称，支持通配符（"\*"）匹配。  3. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  4. 单击"Add Permissions"，勾选"Alter"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | LOAD操作       | 1. 在"Policy Name"填写策略名称。  2. "database"右侧填写并选择对应的数据库，在"table"右侧填写并选择对应的表，在"column"右侧填写并选择对应的列名称，支持通配符（"\*"）匹配。  3. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  4. 单击"Add Permissions"，勾选"update"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | INSERT操作     | 1. 在"Policy Name"填写策略名称。  2. "database"右侧填写并选择对应的数据库，在"table"右侧填写并选择对应的表，在"column"右侧填写并选择对应的列名称，支持通配符（"\*"）匹配。  3. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  4. 单击"Add Permissions"，勾选"update"。  5. 用户还需要具有Yarn任务队列的"submit-app"权限，默认情况下，hadoop用户组具有向所有Yarn任务队列"submit-app"权限。具体配置请参考[添加Yarn的Ranger访问权限策略](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_1859.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | GRANT操作      | 1. 在"Policy Name"填写策略名称。  2. "database"右侧填写并选择对应的数据库，在"table"右侧填写并选择对应的表，在"column"右侧填写并选择对应的列名称，支持通配符（"\*"）匹配。  3. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  4. 勾选"Delegate Admin"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | ADD JAR操作    | 1. 在"Policy Name"填写策略名称。  2. 单击"database"并在下拉菜单中选择"global"。在"global"右侧填写并选择"\*"。  3. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  4. 单击"Add Permissions"，勾选"Temporary UDF Admin"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | VIEW与INDEX权限 | 1. 在"Policy Name"填写策略名称。  2. "database"右侧填写并选择对应的数据库，在"table"右侧填写并选择对应的VIEW或INDEX名称，在"column"右侧填写并选择"\*"。  3. 在"Allow Conditions"区域，单击"Select User"下选择框选择用户。  4. 单击"Add Permissions"，参照表格上述相关操作，根据需求，给用户勾选相应权限。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | 其他用户库表操作     | 1. 参照表格上述操作添加对应权限。  2. 给当前用户添加其他用户库表的HDFS路径的读、写、执行权限，具体配置请参考[添加HDFS的Ranger访问权限策略](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_1856.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
      
   ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
   在Ranger上为用户添加Spark SQL的访问策略后，需要在HDFS的访问策略中添加相应的路径访问策略，否则无法访问数据文件，具体请参考[添加HDFS的Ranger访问权限策略](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_1856.html)。
   - Ranger策略中global策略仅用于联合Temporary UDF Admin权限，用来控制UDF包的上传。
   
   - 通过Ranger对Spark SQL进行权限控制时，不支持empower语法。
   
   - 开启Ranger鉴权后，对视图操作时，默认需要具备相关表的权限，如果需要对视图进行独立鉴权，不依赖相关表的权限，需要将参数spark.ranger.plugin.viewaccesscontrol.enable设置为true。
     - 使用非Spark-beeline方式提交作业时，需要在"*客户端安装目录*/Spark/spark/conf/spark-defaults.conf"中设置该参数。
     
     - 使用Spark-beeline方式提交作业时，需要在"*客户端安装目录*/Spark/spark/conf/spark-defaults.conf"和服务端"JDBCserver \> 自定义配置" 中设置该参数。
      
    
   
   
5. 单击"Add"，在策略列表可查看策略的基本信息。等待策略生效后，验证相关权限是否正常。 
   如果需要禁用某条策略，可单击![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0265769766.png)按钮编辑该策略，设置策略开关为"Disabled"。
   如果不再使用某条策略，可单击![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0265769774.png)按钮删除该策略。
   
   
 
#### Spark2x表数据脱敏
Ranger支持对Spark2x数据进行脱敏处理（Data Masking），可对用户执行的select操作的返回结果进行处理，以屏蔽敏感信息。
1. 修改服务端和客户端spark.ranger.plugin.masking.enable参数值为true。 
   - 服务端：登录FusionInsight Manage页面，选择"集群 \> 服务 \> Spark2x \> 配置 \> 全部配置"，搜索并修改所有的spark.ranger.plugin.masking.enable参数值为true，保存配置并重启服务。
   
   - 客户端：登录Spark客户端节点，进入目录"*{客户端安装目录}*/Spark/spark/conf/spark-defaults.conf"，修改spark.ranger.plugin.masking.enable参数值为true。
   
   
   
   
2. 登录Ranger WebUI界面，在首页单击"HADOOP SQL"区域的组件插件名称如"Hive"。
3. 在"Masking"页签单击"Add New Policy"，添加Spark2x权限控制策略。
4. 根据业务需求配置相关参数。 
   表3Spark2x数据脱敏参数 
   | 参数名称              | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   |:---|:---|
   | Policy Name       | 策略名称，可自定义，不能与本服务内其他策略名称重复。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | Policy Conditions | IP过滤策略，可自定义，配置当前策略适用的主机节点，可填写一个或多个IP或IP段，并且IP填写支持"\*"通配符，例如：192.168.1.10,192.168.1.20或者192.168.1.\*。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | Policy Label      | 为当前策略指定一个标签，您可以根据这些标签搜索报告和筛选策略。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   | Hive Database     | 配置当前策略适用的Spark2x中的数据库名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | Hive Table        | 配置当前策略适用的Spark2x中的表名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | Hive Column       | 配置当前策略适用的Spark2x中的列名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | Description       | 策略描述信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | Audit Logging     | 是否审计此策略。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | Mask Conditions   | 在"Select Group"、"Select User"列选择已创建好的需要授予权限的用户组或用户，单击"Add Conditions"，添加策略适用的IP地址范围，然后再单击"Add Permissions"，勾选"select"权限。 单击"Select Masking Option"，选择数据脱敏时的处理策略： - Redact：用x屏蔽所有字母字符，用0屏蔽所有数字字符。  - Partial mask: show last 4：只显示最后的4个字符。  - Partial mask: show first 4：只显示开始的4个字符。  - Hash：对数据进行Hash处理。  - Nullify：用NULL值替换原值。  - Unmasked(retain original value)：不脱敏，显示原数据。  - Date: show only year：日期格式数据只显示年份信息。  - Custom：可使用任何有效Hive UDF（返回与被屏蔽的列中的数据类型相同的数据类型）来自定义策略。   如需添加多列的脱敏策略，可单击![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0265769779.png)按钮添加。 |
   | Deny Conditions   | 策略拒绝条件，配置本策略内拒绝的权限及例外，配置方法与"Allow Conditions"类似。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
      
   
   
 
#### Spark2x行级别数据过滤
Ranger支持用户对Spark2x数据表执行select操作时进行行级别的数据过滤。
1. 修改服务端和客户端spark.ranger.plugin.rowfilter.enable参数值为true。 
   - 服务端：登录FusionInsight Manager页面，选择"集群 \> 服务 \> Spark2x \> 配置 \> 全部配置"，搜索并修改所有的spark.ranger.plugin.rowfilter.enable参数值为true，保存配置并重启服务。
   
   - 客户端：登录Spark客户端节点，进入目录"*{客户端安装目录}*/Spark/spark/conf/spark-defaults.conf"，修改spark.ranger.plugin.rowfilter.enable参数值为true。
   
   
   
   
2. 登录Ranger WebUI界面，在首页单击"HADOOP SQL"区域的组件插件名称如"Hive"。
3. 在"Row Level Filter"页签单击"Add New Policy"，添加行数据过滤策略。
4. 根据业务需求配置相关参数。 
   表4Spark2x行数据过滤参数 
   | 参数名称                  | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   |:---|:---|
   | Policy Name           | 策略名称，可自定义，不能与本服务内其他策略名称重复。                                                                                                                                                                                                                                                                                                                                                                                                             |
   | Policy Conditions     | IP过滤策略，可自定义，配置当前策略适用的主机节点，可填写一个或多个IP或IP段，并且IP填写支持"\*"通配符，例如：192.168.1.10,192.168.1.20或者192.168.1.\*。                                                                                                                                                                                                                                                                                                                                   |
   | Policy Label          | 为当前策略指定一个标签，您可以根据这些标签搜索报告和筛选策略。                                                                                                                                                                                                                                                                                                                                                                                                        |
   | Hive Database         | 配置当前策略适用的Spark2x中的数据库名称。                                                                                                                                                                                                                                                                                                                                                                                                               |
   | Hive Table            | 配置当前策略适用的Spark2x中的表名称。                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | Description           | 策略描述信息。                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | Audit Logging         | 是否审计此策略。                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | Row Filter Conditions | 在"Select Role"、"Select Group"、"Select User"列选择已创建好的需要授予权限的对象，单击"Add Conditions"，添加策略适用的IP地址范围，然后再单击"Add Permissions"，勾选"select"权限。 单击"Row Level Filter"，填写数据过滤规则。 例如过滤表A中"name"列"zhangsan"行的数据，过滤规则为：name \<\> 'zhangsan'。更多信息可参考Ranger官方文档。 如需添加更多规则，可单击![](https://support.huaweicloud.com/cmpntguide-mrs/zh-cn_image_0265769786.png)按钮添加。 |
      
   
   
5. 单击"Add"，在策略列表可查看策略的基本信息。
6. 用户通过Spark2x客户端对配置了数据脱敏策略的表执行select操作，系统将对数据进行处理后进行展示。
 
