Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using SMO.Agent to retrieve SQL job execution status - security issue

I've got a C# program that fires off SQL Server Agent jobs using the SQL Server Management Objects (SMO) interfaces. It looks something like:

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.");
}

I'm using SQL Server Authentication at this point to simplfy things whilst I work this out.

Now, my problem is that unless the SERVER_USERNAME is part of the 'sysadmin' dbo role, ssis_job.CurrentRunStatus is always 'Idle' - even when I know the job is running. It doesn't error out, just always reports idle.
If the user is an administrator, then the status is returned as expected.

Role membership you say?
Well, I added the SERVER_USERNAME SQL Server login to the msdb Role SQLAgentOperatorRole, that didn't seem to help.
The job's owner is a system administrator account - if that's the issue I'm not sure how to work around it.

Any ideas?

like image 333
dalyons Avatar asked Feb 04 '10 06:02

dalyons


People also ask

How can I check SQL Agent job status?

To view job activity In Object Explorer, connect to an instance of the SQL Server Database Engine, and then expand that instance. Expand SQL Server Agent. Right-click Job Activity Monitor and click View Job Activity. In the Job Activity Monitor, you can view details about each job that is defined for this server.

Why did my SQL Agent job fails?

Similar to Windows services, SQL Agent Jobs run under a user or service account configured in the job. Job failures can occur when there are permission or authentication issues with the user or service account. Common issues include: Account expired.

How do you troubleshoot errors in a SQL Server Agent job?

To resolve the problem, follow these steps: Set the SQL Server Agent service account in SQL Server Configuration Manager to the LocalSystem account. Stop and then start the SQL Server Agent service. Reset the SQL Server Agent service account in SQL Server Configuration Manager back to the original account.

How do I find failed SQL Agent jobs in the last 24 hours?

[ExecutionStatus] = [FailedJobs]. [ExecutionStatus]; And that should tell you all jobs that have not succeeded since the last time they were run for jobs that have been run in the past 24 hours...


1 Answers

You need to refresh the job by calling the Refresh() method on ssis_job before checking the status, then you will get the correct information.

like image 109
steoleary Avatar answered Oct 05 '22 01:10

steoleary