
# 配置MetaStore支持表属性中的敏感信息加密存储
#### 操作场景
MetaStore支持创建表时，将表属性中的敏感信息在数据库中加密存储，查询时再将其解密返回引擎侧，此功能默认开启。
#### 约束与限制
- 此功能将表属性中的敏感信息加密后在数据库中存储，返回MetaStore客户端的表属性仍为明文。
- 多个MRS集群对接同一个元数据库的场景不支持此功能，包含加密信息的表仅可本集群使用，其他集群无法解密。
- 迁移场景包含加密表属性的表的元数据在新集群无法解密，需要在新集群重新创建表。
- 该章节仅适用于MRS 3.6.0-LTS.1及之后版本。
 
#### 配置表属性中的敏感信息加密存储
1. 登录Manager页面，选择"集群 \> 服务 \> Hive \> 配置 \> 全部配置"，在搜索框中搜索并修改以下参数： 
   - metastore-ext.encrypt.parameters.enable：是否加密表属性中的敏感信息。
     - true（默认值）：加密表属性中的敏感信息，即表属性中的敏感信息将在数据库中密文存储。
     
     - false：不加密表属性中的敏感信息，即表属性中的敏感信息将在数据库中明文存储，请谨慎操作。
      
   
   - metastore-ext.encrypt.parameters：需要加密的表属性，多个表属性使用逗号分隔，不支持正则配置，默认值为"password,flink.password,flink.properties.sasl.jaas.config"。
   
   - hive-ext.mask.parameters：Hive中执行**show** 、**desc**语句查看表信息时，客户端返回结果中包含这些关键字的表属性将被脱敏，配置为空时不脱敏展示表属性原值，多个配置使用逗号分隔，不支持正则配置，默认值为"password,flink.properties.sasl.jaas.config"。
   
   
   
   
2. 单击"保存"保存配置。
3. 单击"实例"，勾选所有配置过期的实例，选择"更多 \> 重启实例"，输入当前用户密码并单击"确定"重启所有配置过期的实例。
4. 验证表属性中的敏感信息是否加密存储。以下示例为在集群已启用Kerberos认证（安全模式）的FlinkSQL Client中创建Kafka表进行演示。 
   1. 登录Flink客户端所在节点，执行以下命令： 切换至客户端安装目录：
      ```
      cd 客户端安装目录
      ```
      配置环境变量：
      ```
      source bigdata_env
      ```
      认证用户，集群未启用Kerberos认证（普通模式）请跳过该操作：
      ```
      kinit 组件业务用户
      ```
      
   
   2. 参考[FlinkSQL Client提交作业](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_249266.html)章节，进入sql-client，修改并执行以下命令创建Kafka表：
      1. 创建Catalog，例如"myhive"：
         ```
         CREATE CATALOG myhive WITH (
         'type' = 'hive',
         'hive-version' = '3.1.0',
         'default-database' = 'default',
         'hive-conf-dir' = 'Hive配置文件目录'
         );
         ```
         
      
      2. 创建Kafka表：
         ```
         CREATE TABLE myhive.`default`.KafkaSource (
         `user_id` VARCHAR,
         `user_name` VARCHAR,
         `age` INT
         ) WITH (
         'connector' = 'kafka',
         'topic' = 'Topic名称',
         'properties.bootstrap.servers' = 'Kafka Broker节点:端口号',
         'properties.group.id' = 'testGroup',
         'scan.startup.mode' = 'latest-offset',
         'format' = 'csv',
         'properties.security.protocol' = 'SASL_PLAINTEXT',
         'properties.sasl.mechanism' = 'PLAIN',
         'properties.sasl.jaas.config' = 'org.apache.kafka.common.security.plain.PlainLoginModule required username="xxx" password="xxx";' );
         ```
         
       
   
   3. 以**root** 用户登录DBServer主节点，执行以下命令登录Hive元数据库：
      1. 切换至**omm** 用户：
         ```
         su - omm
         ```
         
      
      2. 配置环境变量：
         ```
         source $DBSERVER_HOME/.dbservice_profile
         ```
         
      
      3. 使用具备读**hivemeta** 库的用户登录Hive元数据库，例如用户为**metauser** ：
         ```
         gsql -p 20051 -U metauser -W PASSWD -d hivemeta
         ```
         
       
   
   4. 使用实际的数据库名、表名替换到以下SQL中并执行：
      ```
      select * from TABLE_PARAMS where exists(select 1 from DBS inner join TBLS on DBS.NAME='数据库名' and TBLS.TBL_NAME='表名' and DBS.DB_ID=TBLS.DB_ID where TBLS.TBL_ID=TABLE_PARAMS.TBL_ID);
      ```
      命令执行后，可以查看到"flink.properties.sasl.jaas.config"属性已加密存储。
      图1表属性加密存储   
      ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002522850830.png "点击放大") 
   
   
   
   
 
