Run administrative scripts on demand as a regular user

Leave a comment

Why?

Sometimes you have tasks that need high permissions on your SQL Server. Naturally you can run them yourself (since you apparently is sysadmin…) and you could also schedule the scripts. But what if scheduling isn’t good enough. The database isn’t updated for days (script runs every 5 minutes, killing performance) and then the user doen’t have the patience to wait for 5 minutes, until the next “load” schedule is due. It’s a loose-loose situation.
A common solution is to give the user sysadmin rights, but it is more often than not – A BAD IDEA!

Suggested solution:

Categories

I suggest you add a category for the jobs you want to handle like this. I also show how to create a category for the Alert, but if you don’t want to do it there is an alert category named [Uncategorized] that you can use. (The default category for jobs are [Uncategorized (Local)])

IF NOT EXISTS (SELECT name FROM dbo.syscategories WHERE name=N'Jobs executed by alerts' AND category_class=1)
BEGIN
EXEC dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'Jobs executed by alerts'
END
IF NOT EXISTS (SELECT name FROM dbo.syscategories WHERE name=N'Admin Alerts' AND category_class=2)
BEGIN
EXEC dbo.sp_add_category @class=N'ALERT', @type=N'NONE', @name=N'Admin Alerts'
END

The job

You can create a job in the SQL Server Agent, owned by [sa] just as you would do when you want to schedule the script normally. Add steps as needed and test the job to make sure it works as expected.

DECLARE @jobId BINARY(16)
EXEC msdb.dbo.sp_add_job @job_name=N'Job That Requires Sysadmin', 
		@description=N'This job has a task that must be started by a user who isn''t sysadmin.', 
		@category_name=N'Jobs executed by alerts', 
		@owner_login_name=N'sa', 
		@job_id = @jobId OUTPUT

EXEC msdb.dbo.sp_add_jobstep @job_id=@jobId, 
        @step_name=N'DBCC CHECKDB', 
		@step_id=1, 
		@subsystem=N'TSQL', 
		@command=N'DBCC CHECKDB (''master'')', 
		@database_name=N'master'

EXEC msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
EXEC msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'

Sample result

The Alert

To be able to trigger the job, you will need an Alert. The alerts can react on different events in the SQL Server, however in this article I will focus on Error Numbers. Alerts only respond to error numbers that are written to the Windows Event log, so we need to begin with adding an error message that writes to the Event log by default. That is accomplished with the @with_log = ‘TRUE’. The @msgnum (the Error number) must be an integer ranging from 50001 to the upper [int]-datatype limit.

EXEC sp_addmessage @msgnum = 1337000, @severity = 10,   
   @msgtext = N'The Login named [%s] required Job [Job That Requires Sysadmin] to be run.',   
   @with_log = 'TRUE', @replace = 'REPLACE'

And now there is only the alert creation left. First you would need the Job Id of the job:

SELECT job_id FROM sysjobs WHERE name = 'Job That Requires Sysadmin'

With this information, you just create the alert, and connect the Alert to the Job with the @job_id:

EXEC msdb.dbo.sp_add_alert @name=N'Alert that listens to 1337000', 
		@message_id=1337000, 
		@delay_between_responses=30, 
		@category_name=N'Admin Alerts',  
		@include_event_description_in=0, 
		@job_id='3DF78369-EF6B-4212-871E-2B4DF8AB5E4E'
	GO

Sample result:

The @delay_between_responses parameter makes the Alert wait before it triggers the job again. This is a very good idea when the Job takes a while to run. Make sure you time the job execution (from when you tested that it worked) and set the delay time accordingly.

Running the job!

Connected to the SQL Server as pretty much any user. Run the following command:

RAISERROR(1337000, 10, 1, 'Wedham_Demo_User');

Naturally, you can send any string as the last parameter. The string is inserted into the error message in the position of %s. This message will show up in the Windows Event log.
Feel free to run this from a Command prompt using sqlcmd, or from a custom made C# application, anything that lets a user connect to SQL Server will do!

sqlcmd /S. /Usql /Psql /Q"RAISERROR( 1337000, 10, 1, 'Wedham_Demo_User');"
Yes, I know. Seriously bad password...


Busy conference fall!

Leave a comment

The summer is coming to an end. It was a productive summer this year. A lot of diving and orca whatching. And I even had time for a trip to Microsoft before rushing in to the conference season 🙂

I’m speaking at SQL Saturdays in Cambridge and Katowitze so far, apart from arranging the SQL Saturday Gothenburg for the third time. This year the Gothenburg day is in a new place, the Lindholmen Science park. I hope that will be good for us all.

Another proud moment!

Leave a comment

I am happy, proud to announce that I am speaking at the Sqlday conference in Poland.

The conference as a whole will be amazing with a lot of fantastic sessions and speakers – and me! I am very humbled to be selected to participate in this group of experts. If you have nothing to do between May 15 and 17, join me and a lot of others. It’ll be worth your time!

My session details can be found here.

Summer and SQL Saturday with precon

Leave a comment

Summer is approaching and with that the long awaited time to schedule all sessions for the SQL Saturday in Gothenburg. This year we will have even more intresting sessions than last year and also a precon. The precon tracks are already out and the schedule will be set at the end of this week. The earlybird discount is running out, so grab your tickets soon!

And most of all: have a wonderful summer and be prepaired in August. I know I will…

Two more SQL Saturday opportunities

Leave a comment

Right when I was prepairing my session for the #sqlsat525 in Rheinland, I got notified that one of my sessions was selected for the #sqlsat520 in Cambridge.

I’m happy, humbled and a bit proud to have been given this exciting assignment. If you are the least bit interested in SQL Server, you really have to join one of the (totaly free) SQL Saturdays all over the globe. Especially considering the imminent SQL Server 2016 launch.

SQL Saturday #536 PRECON!

Leave a comment

The second SQL Saturday #536 in Sweden is taking place on August 27. The location is at the same place as before (Scandic Opalen), but we have some exciting news.

There will be 2 amazing pre-conference sessions this year. The precon info is located at http://sqlweekday.azurewebsites.net/ and the session links will take you directly to EventBrite, where the tickets sale occurrs.

Uwe Ricken will talk about how to Analyze and tune your SQL Server like a PRO

Mark Broadbent will deliver a Real World SQL Server High Availability Masterclass

SQL Saturday information

Leave a comment

Many things has happened…

Apart from arranging the first SQL Saturday in Sweden that took place in Gothenburg on September 5., I am very proud to have been selected speaker at the first SQL Saturday in Serbia. Sql Saturday #475. If you happen to have a Saturday (November 28.) to spare, please join me and many others for a wonderful event. How can I say it’ll be a wonderful event? Well, it’s an event about SQL Server. Need I say more? 🙂

I’ve learned a lot from arranging an SQL Saturday, and I will take the lessons learned and use them next year. Yes, there will also be an SQL Saturday Gothenburg in 2016 as well!

TechEd Europe 2014

Leave a comment

I have been selected to staff at TechEd in Barcelona. So if you are there, go to the Data Platform Booth. That’s where I’ll be standing answering questions all day long. I’m also representing SQL Server at the “Ask the experts” session once again. That’ll be really exciting! Before that I hope to make it in time for the SQL Server Saturday that also is in Barcelona.

Did you attend any Microsoft class and need the lab files?

Leave a comment

Well, they are a bit difficult to get from the virtual machines, and almost impossible if you have been using LabsOnline.

Microsoft has compiled a page with a lot of lab files and setup scripts here:

https://www.microsoft.com/learning/en-us/companion-moc.aspx

I guess they are pretty useless without the lab instructions, but feel free to download them 🙂

And speaking of download… The SQL Server sample database location is still codeplex…

http://msftdbprodsamples.codeplex.com/

Happy sampling

Another session selected

Leave a comment

This time in Oslo. (http://sqlsaturday.com/317/eventhome.aspx)
I hear Norway is nice this time of the year, and my aunt was eaten by a moose…
No seriously 🙂 My session is only one of many and all of them are worthy your attendance. There are still room, last time I checked so go!!!

Older Entries