Azure Data Explorer:为用户/组配置单表及满足条件的特定记录访问权限的最优方案咨询
针对Kusto/ADX单表行级权限的最优解决方案
你遇到的这个场景确实是Kusto里单独用RLS或受限视图访问时的典型痛点,我给你推荐一个更高效的组合方案,能同时实现单表访问限制和行级数据过滤,而且操作成本远低于给所有表配置受限视图:
具体实现步骤
第一步:创建带行级过滤的视图
基于你要开放的目标表,创建一个内置过滤条件的视图,确保返回的只有符合要求的记录。比如假设你的目标表是SalesData,要给用户组SalesTeamWest仅返回西区的销售数据,创建视图的命令如下:.create-or-alter view SalesData_West with (docstring = "Filtered sales data for West region", folder = "RestrictedViews") as SalesData | where Region == "West"第二步:给视图配置受限访问
给这个过滤后的视图设置受限视图策略,仅允许目标用户/组访问它:.alter-merge view SalesData_West policy restricted_view_access enable "SalesTeamWest"第三步:限制用户对原表的访问
确保目标用户/组没有原表SalesData的直接访问权限。如果原表继承了数据库的默认权限,你可以通过拒绝命令来收回:.revoke table SalesData from (aadgroup::"SalesTeamWest")要是数据库本身默认权限就是封闭的,那只要不给他们原表的访问权限就行。
方案为什么更优?
- 同时搞定了表级控制(用户只能看到你指定的过滤视图,碰不到其他表或原表)和行级过滤(视图里已经帮你把不符合条件的数据筛掉了)
- 操作成本低:不需要给所有其他表挨个配置受限视图,只需要针对这个要开放的过滤视图做设置就好
- 完美避开了RLS和受限视图访问的冲突问题,因为这里的行过滤是直接嵌在视图里的,完全不依赖RLS策略
动态过滤的补充方案
如果你的过滤条件需要跟着用户身份变(比如每个用户只能看自己负责的数据),可以把视图换成自定义函数,用current_principal()获取当前用户信息来动态过滤:
.create-or-alter function with (docstring = "Filtered sales data for current user", folder = "RestrictedFunctions") SalesData_UserFiltered() { SalesData | where OwnerEmail == current_principal() }
之后基于这个函数创建视图,再给视图配置受限访问就可以了。
内容的提问来源于stack exchange,提问作者Bharath Kumar
相关产品推荐
相关产品推荐

