本文介紹資料授權中的行過濾器和列脫敏,包括配置方法、使用限制及規則衝突處理。
使用限制
行過濾器使用限制
-
引擎版本:僅支援已對接 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 位元組。
單擊确定儲存。儲存後,可在权限頁簽的列脫敏規則地區查看或撤銷規則。
使用須知
修改規則時,請一併提交該使用者在該表上需要保持脫敏的所有列;僅提交部分列會使其餘列失去脫敏。
同一列可以為多個授權對象配置規則。置空可與任意方式並存;除置空外,其他脫敏方式及其配置必須完全一致。