setTableSensitiveColumn

语法

setTableSensitiveColumn(table, colName, option, [func])

详情

将表 tablecolName 列设置或取消设置为敏感列。

设置为敏感列后,仅该表的创建者、管理员和具有 DB_SENSITIVE_VIEW 或 TABLE_SENSITIVE_VIEW 权限的用户可以访问该列的明文数据,其他用户仅可访问经 func 脱敏处理后的数据。

参数

table 一个 DFS 表对象。

colName STRING 类型标量,表示列名。

option BOOL 类型标量,true 表示将 colName 设置为敏感列,false 表示取消设置该列为敏感列。

func 可选参数,是一个一元函数,表示脱敏算法。仅当 option = true 时支持设置此参数。默认算法为将目标列数据处理为空值。当该算法需要作用于不同类型时,UDF 内部应定义对不同类型的处理逻辑。

例子

// 建库建表
login(`admin,`123456)
db = database(directory="dfs://sensitive", partitionType=VALUE, partitionScheme=1..5)
t = table(1..5 as tag, ["John","Emily","Michael","James","Tommy"] as userId, format(rand(100000,5),"000000") as password)
pt = createPartitionedTable(dbHandle=db, table=t, tableName="pt", partitionColumns="tag")
pt.tableInsert(t)

// 设置敏感列
def encryptId(str){
    return str[0]+"******"
}
setSensitiveColumn(table=loadTable("dfs://sensitive","pt"), colName="userId", option=true, func=encryptId)

def encryptPw(str) {
    return regexReplace(str, "[0-9]+", "#")
}
setSensitiveColumn(table=loadTable("dfs://sensitive","pt"), colName="password", option=true, func=encryptPw)

// 创建用户 user1
createUser(`user1,`123456)
grant(userId=user1, accessType=TABLE_READ, objs="dfs://sensitive/pt")

// user1 读取脱敏数据
login(`user1,`123456)
select * from loadTable("dfs://sensitive","pt")

// 为 user1 赋权
login(`admin,`123456)
grant(userId=user1, accessType=TABLE_SENSITIVE_VIEW, objs="dfs://sensitive/pt")

// user1 读取敏感数据
login(`user1,`123456)
select * from loadTable("dfs://sensitive","pt")