SQL Server 代理不遵守“执行为”权限

dlh*_*dlh 7 sql-server-2008-r2 sql-server-agent

我有一个奇怪的权限问题。最近发生的事情导致配置为以特定用户身份运行的现有 SQL Server 代理作业停止工作。他们以前工作过;他们现在抛出基本权限错误(例如,SELECT 权限被拒绝)。

这是一个特定的测试用例。用户johndoe具有服务器级sysadmin角色。johndoe在 SQL Server Management Studio 中运行时,以下查询工作正常:

select * from TableA into TableB
Run Code Online (Sandbox Code Playgroud)

但是,当我将完全相同的查询放入单步 SQL Server 代理作业中,并将该步骤配置为以用户身份运行时johndoe,我收到以下错误。

以用户身份执行:johndoe。对象“TableA”、数据库“MyDatabase”、架构“dbo”的 SELECT 权限被拒绝。[SQLSTATE 42000](错误 229)。步骤失败。

关于什么可能导致这种看似自发的变化的任何建议?

Stu*_*ore 3

您是否检查过哪个 SQL 用户实际上正在运行查询?根据权限级别,SQL 代理可能允许用户“模拟”更高级别的帐户。

使用 T-SQL 步骤创建作业:

SELECT ORIGINAL_LOGIN(), SUSER_NAME(), USER_NAME();
Run Code Online (Sandbox Code Playgroud)

使其将输出记录到表或文本文件中,并查看实际运行最终查询的用户。如果这不是您认为应该是的用户,那么您需要回溯以找出模拟的来源。

我在使用筛选视图的 CRM Dynamics 数据库上遇到了问题,其中指定的 CRM 用户可以看到他们的筛选数据。如果作业使用系统帐户模拟,它将不会返回任何数据,因为系统帐户不作为 CRM 用户存在。