Tuesday, August 30, 2011

Using Proxy Accounts in SQL Server Agent Jobs

When using SQL Server, in many cases you will might need to set up a SQL Server Agent job that will be accessing a resource within the domain.
For example, you want to include a step in a SQL Server Agent job that based on some logic, will be handling a Windows service on a server within the domain by using the Operating System (CmdExec) SQL Server subsystem.
In order for the job to be successfully executed, the specific job's execution context should be allowed access to the target resource in the domain.
If you are using a domain user as a service account for the SQL Server Agent in the specific instance, you can assign the necessary access rights to that user account.
However, there is also another way which I personally prefer; using a Proxy Account for executing the specific job step :)

In order to be able to do this you must perform the following actions within the instance of SQL Server:
  1. Create a credential
  2. Create a Proxy Account that uses the credential you created in the first step  
For creating a credential, in SSMS you navigate to: Security -- Credentials
You can then create the credential by providing an identity (i.e. a domain user) along with its password.

For creating a Proxy Account, in SSMS you navigate to: SQL Server Agent -- Proxies
You can then create a new Proxy Account by giving it a name and performing the following:
- Provide the credential you earlier created
- Enter a description (optional)
- Set the subsystems for which the Proxy Account will be active. These are:
------- ActiveX Script
------- Operating system (CmdExec)
------- Replication Distributor
------- Replication Merge
------- Replication Queue Reader
------- Replication Snapshot
------- Replication Transaction-Log Reader
------- SQL Server Analysis Services Command
------- SQL Server Analysis Services Query
------- SQL Server Integration Services Package

That's it!
You can now proceed and set up the SQL Server Agent job along with its steps, and in the step you want to use the Proxy Account you select it in the "Run as" drop down box.

Whenever the specific job step runs, it will be executed in the context of the provided Proxy Account.

* Note that in order to be able to use a Proxy Account in a specific job step, the Proxy Account needs to be activated for the specific subsystem (i.e. Operating system - CmdExec).

I hope you found this post useful!

My Latest Projects:

Check out my latest eBook on SQL Server:
Tuning SQL Server - Ebook

Easily secure your SQL Server instances! Try out DBA Security Advisor!
DBA Security Advisor for SQL Server by SQLArtBits
DBA Security Advisor was developed by SQLArtBits. The tool was being carefully developed for an entire year and it contains comprehensive security checks and recommendations based on proven SQL Server security best practices. Feel free to download and use the Community Edition which is free and if you find it useful, you can consider upgrading to the Enterprise Edition!

Artemakis Artemiou [MVP]

Author & Editor

Artemakis Artemiou is a Senior SQL Server Architect, Software Developer and Microsoft Data Platform MVP. He is also an author, regular blogger, president of Cyprus.NET User Group and CY Country leader of INETA-EU. He is also the creator of DBA Security Advisor and In-Memory OLTP Simulator. Artemakis is a frequent guest author of worldwide well-respected online journals where he writes articles focusing on many SQL Server topics.

Reference: The SQL Server and .NET Hub (http://www.sqlnethub.com)