数据脱敏
Ranger支持对Hive查询结果进行数据脱敏。在执行SELECT查询并返回结果时,可以对敏感字段进行动态掩码处理,避免敏感信息以明文形式暴露。Ranger提供以下几种常见的脱敏方式:
1、Redact:全替换,将原始字符串整体替换为固定字符,通常用于彻底隐藏敏感信息。
2、Partial mask:部分替换,仅保留字符串中的部分内容,其余字符使用固定字符替换,例如只展示前4位或后4位。
3、Hash:哈希替换,将原始字符串转换为对应的哈希值,从而在隐藏原文的同时保留一定的可比对性。
4、Nullify:空值替换,将字段值直接替换为 NULL。
5、Date:日期脱敏,按照指定的日期格式输出脱敏结果,常见做法是仅保留年份。
6、Custom:自定义表达式,支持通过 SQL 表达式或 UDF 自定义脱敏逻辑,适用于更灵活的个性化场景。
操作步骤
1、在Ranger WebUI配置页面点击Hadoop SQL下的Hive页签,您可以对Hive数据进行脱敏处理。
2、单击上方的Masking页签。
3、单击右上角的Add New Policy。
4、在Create Policy页面,配置相关参数。
参数说明如下:
| 参数 | 描述 | 示例 |
|---|---|---|
| Policy Name | Policy的名称。可以自定义。 | test_policy |
| Hive Database | 添加Hive中的数据库。 | ranger_mask_demo |
| Hive Table | 添加表。 | user_sensitive_info |
| Hive Column | 可添加列名。 | id_card |
| Select User | 指定添加此策略的用户。 | hdfs |
| Access Types | 选择授予的权限。 | select |
| Select Masking Option | 选择脱敏方式。 | hash |
5、单击Add按钮添加
Demo
1、准备工作
进入Hive客户端,输入如下SQL创建Demo必要的库表和数据。
CREATE DATABASE IF NOT EXISTS ranger_mask_demo;
USE ranger_mask_demo;
DROP TABLE IF EXISTS user_sensitive_info;
CREATE TABLE user_sensitive_info (
user_id BIGINT,
user_name STRING,
phone_number STRING,
id_card STRING,
email STRING,
bank_card STRING,
address STRING,
birthday DATE
)
STORED AS PARQUET;
INSERT INTO user_sensitive_info VALUES
(1, 'Alice', '13812345678', '110101199001011234', 'alice@example.com', '6222020202020202020', 'Beijing Chaoyang District', DATE '1990-01-01'),
(2, 'Bob', '13987654321', '310101198805083456', 'bob@example.com', '6222020202020202021', 'Shanghai Pudong New Area', DATE '1988-05-08'),
(3, 'Charlie', '13711112222', '440301199512123333', 'charlie@example.com', '6222020202020202022', 'Shenzhen Nanshan District', DATE '1995-12-12'),
(4, 'David', '13699990000', '330102199203154444', 'david@example.com', '6222020202020202023', 'Hangzhou Xihu District', DATE '1992-03-15'),
(5, 'Eva', '13588887777', '420106199811226666', 'eva@example.com', '6222020202020202024', 'Wuhan Hongshan District', DATE '1998-11-22');
SELECT * FROM user_sensitive_info;2、脱敏模式测试
Redact
Redact:会将字段中的所有字符统一替换为固定字符,通常是X,并且替换后的字符串长度保持不变。测试结果如下:
Hive测试结果
Spark测试结果
Partial mask-First 4
Partial mask:show first 4表示仅保留原始字符串的前4个字符,其余部分使用固定字符替换。
Hive测试结果
Spark测试结果
Partial mask-Last 4
Partial mask: show last 4表示仅保留原始字符串的后4个字符,其余部分使用固定字符替换。
Hive测试
Spark测试
Hash
Hash:会将原始字符串转换为对应的哈希值进行展示,不再返回明文内容。
Hive测试
Spark测试
Nullify
Nullify:会将原始字段值直接替换为NULL,适用于完全禁止展示该字段内容的场景。
Hive测试结果
Spark测试结果
Date: show only year
Date: show only year会对日期字段进行脱敏,只保留年份信息,月份和日期默认显示为 01-01。
Hive测试结果
Spark测试结果
Custom
Custom:支持通过自定义表达式实现个性化脱敏逻辑,也可以结合UDF完成更复杂的处理。
本示例中,使用以下表达式对邮箱后缀进行隐藏。
concat(substr(email, 1, instr(email, '@')), 'UNKNOWN')该表达式会保留邮箱用户名和@符号,并将域名部分统一替换为UNKNOWN。
Hive测试
Spark测试