如何配置Kusto权限:让用户仅执行指定函数而无法查询表?
让Corp账号执行函数但无法直接查询表的解决方案
问题根源
你之前给Table1配置Restricted View Access策略后,普通的Database Viewer权限账号(比如Corp)会被彻底限制——既不能直接查询Table1,连依赖这个表的函数也没法执行,因为这个策略会阻断所有非UnrestrictedViewer账号的间接访问路径。
具体操作步骤
要实现目标,得调整权限逻辑,按下面的步骤来:
1. 移除Table1的Restricted View Access策略
这个策略是核心阻碍,先把它删掉:
ALTER TABLE Table1 DROP POLICY RestrictedViewAccessPolicy;
2. 配置精细化权限
- 撤销Corp对Table1的直接访问权限,确保它碰不到原表:
REVOKE SELECT ON Table1 FROM [Corp]; - 给Corp开放函数fnGetTable1的执行权限:
GRANT EXECUTE ON fnGetTable1 TO [Corp]; - 关键配置:让函数以所有者身份执行。这样Corp调用函数时,会借用函数所有者的权限访问Table1,自身不需要直接权限。修改函数时加上
EXECUTE AS OWNER:CREATE OR ALTER FUNCTION fnGetTable1() RETURNS TABLE (...) WITH EXECUTE AS OWNER AS BEGIN -- 这里编写你的函数逻辑,比如 SELECT * FROM Table1 WHERE ... END;
验证方法
- 用Corp账号尝试直接查询Table1:
SELECT * FROM Table1;应该返回权限错误。 - 用Corp账号执行函数:
SELECT * FROM fnGetTable1();应该能正常返回结果。
额外说明
如果其他表需要保留Restricted View Access策略,完全没问题——只针对Table1移除该策略,再按上面的权限配置操作即可,不会影响其他表的限制规则。
内容的提问来源于stack exchange,提问作者Vinny
相关产品推荐
相关产品推荐

