Unable to run jobs after SQL server recovery

  • Hi all,

    We have Windows server 2003 (no sp), SQL server 200 SP4 both on production server and test server.

    I've restored Master, MSDB and production databases to the test SQL server. Problem we are facing is that we can not execute test SQL server agent jobs created on the production server. Problem seems to be that production server agent is ran with system account and all jobs are owned by production server system account also on the test server. On the test server the system account has ofcourse different SID.

    My question(s): How to change SIDs on the jobs. Do I have to need to change something else to be able to execute jobs.

    Another thing ofcourse is that is the agent setup optimal on the production server? This relates also to optimal configuration of user accounts in general on the production server.

    Thanks for all the replies,

    Ilkka

  • If you want to change the SID in sql 2000 you can use sp_help_revlogin

    http://www.databasejournal.com/features/mssql/article.php/2228611

    in sql 2005 you can use:

    USE master

    GO 

    IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL

      DROP PROCEDURE sp_hexadecimal

    GO

    CREATE PROCEDURE sp_hexadecimal

        @binvalue varbinary(256),

        @hexvalue varchar (514) OUTPUT

    AS

    DECLARE @charvalue varchar (514)

    DECLARE @i int

    DECLARE @length int

    DECLARE @hexstring char(16)

    SELECT @charvalue = '0x'

    SELECT @i = 1

    SELECT @length = DATALENGTH (@binvalue)

    SELECT @hexstring = '0123456789ABCDEF'

    WHILE (@i <= @length)

    BEGIN

      DECLARE @tempint int

      DECLARE @firstint int

      DECLARE @secondint int

      SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))

      SELECT @firstint = FLOOR(@tempint/16)

      SELECT @secondint = @tempint - (@firstint*16)

      SELECT @charvalue = @charvalue +

        SUBSTRING(@hexstring, @firstint+1, 1) +

        SUBSTRING(@hexstring, @secondint+1, 1)

      SELECT @i = @i + 1

    END

    SELECT @hexvalue = @charvalue

    GO

     

    IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL

      DROP PROCEDURE sp_help_revlogin

    GO

    CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS

    DECLARE @name sysname

    DECLARE @type varchar (1)

    DECLARE @hasaccess int

    DECLARE @denylogin int

    DECLARE @is_disabled int

    DECLARE @PWD_varbinary  varbinary (256)

    DECLARE @PWD_string  varchar (514)

    DECLARE @SID_varbinary varbinary (85)

    DECLARE @SID_string varchar (514)

    DECLARE @tmpstr  varchar (1024)

    DECLARE @is_policy_checked varchar (3)

    DECLARE @is_expiration_checked varchar (3)

     

    IF (@login_name IS NULL)

      DECLARE login_curs CURSOR FOR

          SELECT p.sid, p.name, p.type, p.is_disabled, l.hasaccess, l.denylogin

            FROM sys.server_principals p LEFT JOIN sys.syslogins l ON ( l.name = p.name )

            WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa'

    ELSE

      DECLARE login_curs CURSOR FOR

          SELECT p.sid, p.name, p.type, p.is_disabled, l.hasaccess, l.denylogin

            FROM sys.server_principals p LEFT JOIN sys.syslogins l ON ( l.name = p.name )

            WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name = @login_name

    OPEN login_curs

    FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @hasaccess, @denylogin

    IF (@@fetch_status = -1)

    BEGIN

      PRINT 'No login(s) found.'

      CLOSE login_curs

      DEALLOCATE login_curs

      RETURN -1

    END

    SET @tmpstr = '/* sp_help_revlogin script '

    PRINT @tmpstr

    SET @tmpstr = '** Generated ' + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'

    PRINT @tmpstr

    PRINT ''

    WHILE (@@fetch_status <> -1)

    BEGIN

      IF (@@fetch_status <> -2)

      BEGIN

        PRINT ''

        SET @tmpstr = '-- Login: ' + @name

        PRINT @tmpstr

     

        IF (@type IN ( 'G', 'U'))

        BEGIN -- NT authenticated account/group

          SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' FROM WINDOWS'

        END

        ELSE BEGIN -- SQL Server authentication

            -- obtain password and sid

            SET @PWD_varbinary = CAST( LOGINPROPERTY( @name, 'PasswordHash' ) AS varbinary (256) )

            EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT

            EXEC sp_hexadecimal @SID_varbinary, @SID_string OUT

     

            -- obtain password policy state

            SELECT @is_policy_checked =

                CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END

                FROM sys.sql_logins WHERE name = @name

            SELECT @is_expiration_checked =

                CASE is_expiration_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END

                FROM sys.sql_logins WHERE name = @name

     

            SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name )

                + ' WITH PASSWORD = ' + @PWD_string

                + ' HASHED, SID = ' + @SID_string

     

            IF ( @is_policy_checked IS NOT NULL )

            BEGIN

              SET @tmpstr = @tmpstr + ', CHECK_POLICY = ' + @is_policy_checked

            END

            IF ( @is_expiration_checked IS NOT NULL )

            BEGIN

              SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checked

            END

        END

     

        IF (@denylogin = 1)

        BEGIN -- login is denied access

          SET @tmpstr = @tmpstr + '; DENY CONNECT SQL TO ' + QUOTENAME( @name )

        END

        ELSE IF (@hasaccess = 0)

        BEGIN -- login has exists but does not have access

          SET @tmpstr = @tmpstr + '; REVOKE CONNECT SQL TO ' + QUOTENAME( @name )

        END

     

        IF (@is_disabled = 1)

        BEGIN -- login is disabled

          SET @tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' DISABLE'

        END

     

        PRINT @tmpstr

      END

      FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @hasaccess, @denylogin

      END

    CLOSE login_curs

    DEALLOCATE login_curs

     

    RETURN 0

    GO

     

    Alex S

Viewing 2 posts - 1 through 1 (of 1 total)

You must be logged in to reply to this topic. Login to reply