大约一年前,我开始从事一个项目,以设置一个运行存储过程的作业。我现在回到这里来完成它。当我运行该作业时,我收到一条错误消息,指出该作业正在“构建”用户下运行(这是我们系统上的有效帐户)。
但是我不知道为什么要这样做。我以自己的用户 ID (keith.miller) 登录,但我看不到工作中的任何内容。以下是我的工作创建 SQL 的重要部分:
EXEC msdb.dbo.sp_add_job @job_name=N'Restore Database',
@enabled=1,
@notify_level_eventlog=0,
@notify_level_email=0,
@notify_level_netsend=0,
@notify_level_page=0,
@delete_level=0,
@description=N'No description available.',
@category_name=N'[Uncategorized (Local)]',
@owner_login_name=N'XXX\Keith.Miller', @job_id = @jobId OUTPUT
EXEC msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Restore',
@step_id=1,
@cmdexec_success_code=0,
@on_success_action=1,
@on_success_step_id=0,
@on_fail_action=2,
@on_fail_step_id=0,
@retry_attempts=0,
@retry_interval=0,
@os_run_priority=0, @subsystem=N'TSQL',
@command=N'EXEC dbo.spRestoreDatabase',
@database_name=N'master',
@flags=0
如果我以“构建”身份登录时创建作业,会发生这种情况吗?有没有一种方法可以检查这个,或者我可以在其他地方查看为什么正在使用构建用户?
如果您没有使用代理(因为作业步骤脚本显示您没有使用),那么我可以想到两种可能性。我通常只看到用于接触 SQL 外部世界(文件系统操作等)的作业步骤的代理,所以可能不是这个。
首先,查看操作系统中运行SQL Agent服务的账户(SQL Configuration Manager/Services.msc)。默认情况下,代理以此用户身份运行。
第二种也是更罕见的可能性是过程本身有一个 Execute As 命令,它正在改变过程的执行者。这更难设置,甚至更难看到它正确设置以确保它是安全的,所以我很确定情况并非如此。