本文介绍数据授权中的行过滤器和列脱敏,包括配置方法、使用限制及规则冲突处理。
使用限制
行过滤器使用限制
-
引擎版本:仅支持已对接 DLF ROW Filter 的计算引擎。当前仅 Serverless Spark 支持,且需使用以下版本:
-
esr-5.2.0(Spark 4.0.1,Scala 2.13)及以上
-
esr-4.8.0(Spark 3.5.2,Scala 2.12)及以上
-
esr-3.7.0(Spark 3.4.4,Scala 2.12)及以上
-
-
单一规则限制:对于同一张表,一个用户仅能设置一条复合表达式。
写权限互斥:同一用户在同一张表上,行过滤器与写权限(
ALL或UPDATE)不能同时配置。-
Schema 变更影响:若重命名或删除列名,原有的过滤器表达式将失效,必须重新设置。
-
多策略合并:当同时配置了基于 Role(角色)和 User(用户)的过滤器时,系统将使用 AND 逻辑对多个过滤器进行合并。
列脱敏使用限制
引擎版本:列脱敏规则可在 DLF 控制台配置。查询时,规则会下推至计算引擎执行。当前仅 Serverless Spark 支持,且需使用 esr-5.2.0(Spark 4.0.1,Scala 2.13)、esr-4.8.0(Spark 3.5.2,Scala 2.12)或 esr-3.7.0(Spark 3.4.4,Scala 2.12)及以上版本。
写权限互斥:同一用户在同一张表上,列脱敏规则与写权限(
ALL或UPDATE)不能同时授予。Schema 变更限制:已配置脱敏的列及其嵌套字段不能改名、删除或修改类型。变更前请先撤销该列的脱敏规则。
行过滤器
行过滤器表达式用于限制查询结果的数据范围。表达式分为简单表达式(Simple Expression)和复合表达式(Composite Expression)。
简单表达式
简单表达式定义了针对单个列的基础比较逻辑。
语法格式:
<Column Name> <Comparison Operator> <Value>
参数说明:
-
Column Name(列名):指定用于过滤的列。支持的数据类型如下:
-
逻辑型:BOOLEAN
-
字符串:CHAR, VARCHAR
-
数值型:DECIMAL, TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE
-
时间型:TIME, TIMESTAMP
-
-
Comparison Operator(比较运算符):定义比较的方式。支持的运算符请参阅下文对照表。
-
Value(值):用于比较的常量。该值的类型必须与指定列的数据类型一致。
复合表达式
复合表达式通过逻辑运算符组合多个简单表达式,以实现更复杂的过滤逻辑。
语法格式:
(<Simple Expression>) <AND/OR> (<Simple Expression>)
复合表达式支持嵌套,可使用逻辑运算符AND或OR进一步组合。
运算符对照表
支持的运算符及其在 Apache Paimon 中的对应谓词实现。
|
运算符 |
说明 |
Paimon Predicate |
示例 |
|
AND |
逻辑与 |
PredicateBuilder.and |
year > 2010 AND country <> 'US' |
|
OR |
逻辑或 |
PredicateBuilder.or |
(year > 2010) OR (month < 8) |
|
IS NULL |
为空 |
PredicateBuilder.isNull |
country IS NULL |
|
IS NOT NULL |
不为空 |
PredicateBuilder.isNotNull |
country IS NOT NULL |
|
IN |
集合包含 |
PredicateBuilder.in |
id IN (1, 2, 3) |
|
NOT IN |
集合不包含 |
PredicateBuilder.notIn |
id NOT IN (1, 2, 3) |
|
= |
等于 |
PredicateBuilder.equal |
year = 2010 |
|
<> |
不等于 |
PredicateBuilder.notEqual |
year <> 2010 |
|
< |
小于 |
PredicateBuilder.lessThan |
year < 2010 |
|
<= |
小于等于 |
PredicateBuilder.lessOrEqual |
year <= 2010 |
|
> |
大于 |
PredicateBuilder.greaterThan |
year > 2010 |
|
>= |
大于等于 |
PredicateBuilder.greaterOrEqual |
year >= 2010 |
|
BETWEEN |
范围 |
PredicateBuilder.between |
year BETWEEN 2010 AND 2025 |
列脱敏
列脱敏使指定用户或角色查询表时看到被遮盖的值,而非原始数据。例如,可以将手机号列置空,或将身份证号列替换为固定文本。
配置列脱敏
在左侧导航栏选择数据目录,依次选择目标 Catalog、数据库和表。单击权限页签,再单击授权。
在用户/角色中选择 RAM 用户/RAM 角色或 DLF 角色,然后在选择授权对象中选择授权对象。建议对具有相同脱敏需求的用户使用 DLF 角色统一授权。
在数据表中勾选 Select。未选择该权限时,无法启用列脱敏规则。
勾选启用列脱敏规则,然后为每个需要脱敏的列选择脱敏方式。
脱敏方式
效果
适用列类型
置空
整列返回空值。
任意类型。
固定文本替换
整列替换为指定的固定字符串。
仅字符串列;替换内容最长 1024 字节。
单击确定保存。保存后,可在权限页签的列脱敏规则区域查看或撤销规则。
使用须知
修改规则时,请一并提交该用户在该表上需要保持脱敏的所有列;仅提交部分列会使其余列失去脱敏。
同一列可以为多个授权对象配置规则。置空可与任意方式并存;除置空外,其他脱敏方式及其配置必须完全一致。