in

DotNetSide

Dot Net South Italy Developers User Group

Tips

Impedire avvio istanza MS SQL Server

Autore: Francesco Quaratino

Ecco alcune funzionalità poco note di MS-Sql Server, per la realizzazione di un'applicazione in grado di impedire a un'istanza di MS-Sql Server di avviarsi.

Premetto che sarà bene provare il codice che presento di seguito, SOLTANTO in ambienti molto poco critici e MAI (!!!) in ambienti di produzione. Non deve essere bello, infatti, vedere che Sql Server non rispondere ai nostri ripetuti "inviti" ad avviarsi.

Apriamo una connessione al nostro server sql, con credenziali di amministratore (per intenderci l'utente SA va benissimo), entrando nel contesto del database master.

 

--Transact SQL
USE master
GO

Iniziamo col creare una stored procedure di sistema, cioè che risiederà nel database master. Questa procedura avrà l'ingrato compito di arrestare il servizio SQL Server (mssqlserver è il servizio di default, mssql$istanzanominata in caso di istanza con nome) richiamando la stored procedure estesa xp_cmdShell.

Per crearla come stored procedure di sistema, basta denominarla con il prefisso sp_.

 

--Transact SQL
CREATE PROC sp_StopService
AS
EXEC xp_cmdshell 'net stop mssqlserver', NO_OUTPUT
GO

A questo punto, la rendiamo una "autostart procedure". In tal modo, la nostra procedura sarà eseguita automaticamente subito dopo la partenza del servizio Sql, producendo lo spiacevole effetto di arrestare lo stesso servizio.

 

--Transact SQL
sp_procoption sp_StopService, 'startup', 'true'

A questo punto, possiamo arrestare il servizio manualmente o, se preferite un po' più di suspense, riavviare il computer. Se non ci sono stati intoppi, il servizio Sql non si avvierà mai più perchè arrestato dalla nostra procedura auto-partente subito dopo l'avvio.

Per disattivare la proprietà auto-partente della sp_StopService, è necessario avviare Sql Server in modalità applicazione mediante SQLSERVR.EXE usando il il trace flag 4022. Quindi, apriamo un prompt dei comandi e dopo esserci spostati nella directory che ospita SQLSERVR.EXE, digitiamo il comando dal prompt dei comandi

(se istanza nominata, in questo esempio Sql2005 è il nome dell'istanza)

sqlservr -sSql2005 -T4022

(se istanza di default)

sqlservr -T4022

Quindi, per disattivare il comportamento auto-partente della nostra procedura, apriamo una connessione a Sql mediante credenziali amministrative entrando nel contesto del database master, e lanciamo:

 

--Transact SQL
sp_procoption sp_StopService, 'startup', 'false'

Solo adesso, saremo in grado di avviare il servizio Sql (ma prima bisogna terminare l'esecuzione di sqlservr chiudendo la finestra DOS o premendo CTRL+BREAK). Lo scherzo è bello quando dura poco :)

Only published comments... Oct 12 2006, 08:00 AM by VitoA
Filed under:

Comments

 

Maurizio Tammacco's blog said:

Questo non è un semplice tip, infatti sottintende parecchio di più. Sto parlando di come impedire ad...

October 20, 2006 5:34 PM
Powered by Community Server (Commercial Edition), by Telligent Systems