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

如何通过视图所有者的带授予选项的VIEW ANY DEFINITION实现用户查询视图?

解决方案

问题核心在于SQL Server视图默认采用调用者权限(EXECUTE AS CALLER):当用户OMEGACAADM查询视图时,会以自身权限访问底层的master.sys.server_triggers,而非视图架构所有者OMEGACA的权限。哪怕所有者拥有VIEW ANY DEFINITION权限,也不会自动传递给调用者。

正确做法是将视图切换为所有者权限上下文,让视图执行时使用架构所有者OMEGACA的权限访问系统对象,具体步骤如下:

1. 修改视图定义,指定执行上下文为所有者

重新创建或修改视图,添加EXECUTE AS OWNER子句:

ALTER VIEW [OMEGACA].[V_SYS_MANAGE_ACC]
WITH EXECUTE AS OWNER
AS
    SELECT        
        name, object_id, parent_class, parent_class_desc, parent_id, 
        type, type_desc, create_date,modify_date, is_ms_shipped, is_disabled
    FROM 
        master.sys.server_triggers
    WHERE
        name = 'OMEGACA_ACC' 
        AND parent_class_desc = 'SERVER'

2. 确认架构所有者OMEGACA的权限有效性

确保OMEGACA登录账号已具备访问master.sys.server_triggers的权限——你之前授予的VIEW ANY DEFINITION权限已满足需求,无需额外调整。

3. 验证OMEGACAADM的视图查询权限

确认OMEGACAADM用户已拥有视图[OMEGACA].[V_SYS_MANAGE_ACC]的SELECT权限(你已提前配置)。

完成以上操作后,OMEGACAADM查询该视图时,会以OMEGACA的权限访问底层系统视图,即可正常返回预期数据,无需直接为OMEGACAADM授予VIEW ANY DEFINITION权限。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:55:08