【发布时间】:2011-01-12 22:50:22
【问题描述】:
我有一个 C# 程序,它使用 SQL Server Management Objects (SMO) 接口触发 SQL Server Agent 作业。它看起来像:
Server ssis_server = new Server(
new ServerConnection(SERVER_NAME, SERVER_USERNAME, SERVER_PASSWORD)
);
var agent = ssis_server.JobServer;
var ssis_job = agent.Jobs[job_name];
var current_status = ssis_job.CurrentRunStatus;
if (current_status == JobExecutionStatus.Idle)
{
ssis_job.Start();
OnSuccess("Job started: " + job_name);
}
else
{
OnError("Job is already running or is not ready.");
}
我现在使用SQL Server Authentication 来简化事情,同时解决这个问题。
现在,我的问题是,除非SERVER_USERNAME 是“系统管理员”dbo 角色的一部分,否则ssis_job.CurrentRunStatus 始终是“Idle”——即使我知道作业正在运行。它不会出错,只是总是报告空闲。
如果用户是管理员,则按预期返回状态。
你说的角色成员资格?
好吧,我将SERVER_USERNAME SQL Server 登录添加到 msdb 角色 SQLAgentOperatorRole,这似乎没有帮助。
作业的所有者是系统管理员帐户 - 如果是这个问题,我不确定如何解决。
有什么想法吗?
【问题讨论】:
标签: c# security jobs status smo