在 Hive 中,数据加密通常不是由 Hive 自身“单独”完成的,而是结合 Hadoop 生态的安全机制一起来实现。下面从常见、可落地的角度,系统说明 Hive 中的数据加密方式。
| 加密层级 | 技术手段 | 说明 |
|---|---|---|
| 存储加密 | HDFS Transparent Encryption | 最常用、最推荐 |
| 传输加密 | SSL/TLS(HiveServer2) | 防止网络窃听 |
| 列级加密 | 应用层 / UDF / 自定义 | 细粒度、灵活性高 |
| 表级 / 文件级 | ORC / Parquet + Key | 较少单独使用 |
| 权限控制 | Ranger / Sentry | 配合加密使用 |
hadoop key create hive_key
hdfs dfs -mkdir /user/hive/warehouse/encrypted.db
hdfs crypto -createZone \
-keyName hive_key \
-path /user/hive/warehouse/encrypted.db
CREATE DATABASE encrypted_db
LOCATION '/user/hive/warehouse/encrypted.db';
USE encrypted_db;
CREATE TABLE user_info (
id BIGINT,
name STRING
);
✅ 效果
<property>
<name>hive.server2.use.SSL</name>
<value>true</value>
</property>
<property>
<name>hive.server2.keystore.path</name>
<value>/path/to/keystore.jks</value>
</property>
<property>
<name>hive.server2.keystore.password</name>
<value>keystore_password</value>
</property>
beeline -u "jdbc:hive2://host:10000/default;ssl=true"
✅ 防止:
在写入前加密,读取后解密。
-- 写入
INSERT INTO user_info
SELECT
id,
aes_encrypt(name, 'secret_key')
FROM raw_table;
-- 读取
SELECT
id,
aes_decrypt(name, 'secret_key')
FROM user_info;
⚠️ 注意:
aes_encrypt 支持有限public class EncryptUDF extends UDF {
public String evaluate(String input) {
// AES / SM4 / RSA
}
}
ADD JAR /path/encrypt-udf.jar;
CREATE TEMPORARY FUNCTION encrypt AS 'com.xxx.EncryptUDF';
SELECT encrypt(name) FROM user_info;
✅ 适合:
加密 ≠ 安全
必须配合权限控制
用户 A → 有加密表权限 → 可查
用户 B → 无权限 → 拒绝访问
| 场景 | 推荐方案 |
|---|---|
| 合规要求(等保、金融) | HDFS 透明加密 |
| 敏感字段保护 | 列级加密 + Ranger |
| 多租户大数据平台 | HDFS 加密 + Ranger |
| 数据交换 / 导出 | 列级加密 |
Hive 数据加密 = HDFS 透明加密(存储) + SSL(传输) + 列级加密(敏感字段) + Ranger(权限)
如果你愿意,我可以:
你现在的 Hive 是 CDH / HDP / 社区版 / 云上 EMR 哪种?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。