You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Data Explorer中如何优化参数化元数据用于行级安全函数

针对Kusto行级安全(RLS)的元数据优化与表隐藏方案

1. 更查询优化的元数据存储与检索方式

针对你的场景,推荐以下两种高效且易维护的方案:

方案一:新增用户组-国家映射表,简化RLS逻辑

创建group_country_mapping表,存储用户组的AAD标识与允许访问的国家(含group_aad_id和country两列)。RLS函数通过该表动态获取当前用户可访问的国家,再关联location_and_countries得到允许的location列表,无需硬编码每个用户组的规则:

.create-or-alter function My_RLS_function(TableName:string) {
    // 动态获取当前用户所属组允许访问的国家
    let allowed_countries = group_country_mapping 
        | where current_principal_is_member_of(group_aad_id)
        | summarize make_list(country);
    // 关联元数据表得到允许的location
    let allowed_locations = location_and_countries 
        | where country in (allowed_countries)
        | summarize make_list(location);
    // 过滤时序表数据
    table(TableName)
    | where location in (allowed_locations)
}

这种方式的优势:

  • 新增/修改用户组权限时,只需更新group_country_mapping表,无需修改RLS函数,维护成本极低;
  • 两个元数据表(group_country_mapping仅10行左右,location_and_countries100行)都是极小表,Kusto对这类表的查询性能几乎可以忽略,不会影响时序表的查询效率。

方案二:将location的国家归属嵌入时序表(可选)

如果location与国家的映射几乎不会变化,可以考虑在时序表T中新增country列,直接存储每个location所属的国家。这样RLS函数无需关联元数据表,直接通过用户组与国家的映射过滤:

.create-or-alter function My_RLS_function(TableName:string) {
    let allowed_countries = group_country_mapping 
        | where current_principal_is_member_of(group_aad_id)
        | summarize make_list(country);
    table(TableName)
    | where country in (allowed_countries)
}

注意:这种方式会增加时序表的存储成本(数十亿行新增一列),仅适合映射关系长期稳定的场景。

2. 隐藏location_and_countries表的方法

完全可以实现隐藏,不让普通用户查询该表,具体操作如下:

方法一:通过安全上下文配置RLS函数

  1. 创建一个专门的AAD组(比如rls_metadata_access_group),仅将需要维护元数据表的管理员加入该组;
  2. 给该AAD组分配location_and_countries表的读取权限;
  3. 创建RLS函数时,指定函数使用该组的安全上下文执行,这样普通用户即使没有元数据表的权限,RLS函数也能正常访问:
.create-or-alter function My_RLS_function(TableName:string) 
with (security_context = 'aadgroup=rls_metadata_access_group') {
    // 函数逻辑,同之前的实现
}

普通用户直接查询location_and_countries时会因权限不足报错,但不影响RLS函数的执行。

方法二:隔离元数据表到独立数据库

将location_and_countries和group_country_mapping放在一个单独的数据库中,仅给管理员分配该数据库的访问权限,普通用户无此数据库的权限,自然无法查看元数据表。RLS函数同样需要配置安全上下文(使用有权限访问该数据库的主体),确保能正常读取元数据。

内容的提问来源于stack exchange,提问作者karl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 22:52:19