
# 配置Hive列加密功能
#### 操作场景
Hive支持对表的某一列或者多列进行加密；在创建Hive表时，可以指定要加密的列和加密算法。当使用insert语句向表中插入数据时，即可实现将对应列加密。列加密只支持存储在HDFS上的TextFile和SequenceFile文件格式的表。Hive列加密不支持视图以及Hive over HBase场景。
Hive列加密机制目前支持的加密算法有两种，在建表时指定：
- AES（对应加密类名称为：org.apache.hadoop.hive.serde2.AESRewriter）
- SM4（也称为SMS4，对应加密类名称为：org.apache.hadoop.hive.serde2.SMS4Rewriter）
![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
将原始数据从普通Hive表导入到Hive列加密表后，在不影响其他业务情况下，建议删除普通Hive表上原始数据，因为保留一张未加密的表存在安全风险。
#### 操作步骤
1. 在创建表时指定相应的加密列和加密算法： 
   **create table*\<\[db_name.\]table_name\> (\<col_name1\> \<data_type\> ,\<col_name2\> \<data_type\>,\<col_name3\> \<data_type\>,\<col_name4\> \<data_type\>)* ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ('column.encode.columns'='*\<col_name2\>,\<col_name3\>*', 'column.encode.classname'='org.apache.hadoop.hive.serde2.AESRewriter')STORED AS TEXTFILE;**
   或者使用如下语句：
   **create table *\<\[db_name.\]table_name\> (\<col_name1\> \<data_type\> ,\<col_name2\> \<data_type\>,\<col_name3\> \<data_type\>,\<col_name4\> \<data_type\>)* ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' WITH SERDEPROPERTIES ('column.encode.indices'='1,2', 'column.encode.classname'='org.apache.hadoop.hive.serde2.SMS4Rewriter') STORED AS TEXTFILE;**
   ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - 使用序号指定加密列时，序号从0开始。0代表第1列，1代表第2列，依次类推。
   
   - 创建列加密表时，表所在的目录必须是空目录。
    
   
   
2. 使用insert语法向设置列加密的表中导入数据。 
   假设test表已存在且有数据：
   **insert into table *\<table_name\>* select *\<col_list\>* from test;**
   
   
 
