Un mio collega, Saleem Hakani, Principal Data Architect in Microsoft Corporation (e di cui potete trovare tanti articoli su http://sqlcommunity.com ) ha preparato un interessante documento su come accedere ad un server SQL del quale è stata smarrita la password di SA. Con il suo permesso ho “italianizzato”(Smile) l’articolo, che trovate di seguito.

Questo è lo scenario:

Tu sei il DBA della tua azienda, responsabile di alcuni importanti servizi che girano sui SQL Server nel tuo ambiente di produzione. Per evitare accessi non autorizzati, tu decidi di eseguire i seguenti passaggi che rappresentano le best practices per mettere in sicurezza SQL Server.

  • Hai rimosso tutti i built-in administrators dai login SQL Server.
  • Hai rimosso tutti gli utenti (ad eccezione di SA) che faceva parte del ruolo SYSADMIN (inclusi gli Windows Accounts e/o i login di SQL Server)
  • Hai impostato la password di SA in qualcosa di estremamente complesso che sarebbe estremamente difficile da immaginare o ricordare
  • Per le operazioni di manutenzione giornaliera di SQL Server, tu usi il tuo account di dominio che ha privilegi DBO sui database utente ma non ha privilegi SYSADMIN
  • Non hai documentato la tua password di SA da nessuna parte per evitare che gli altri potessero in qualche modo scoprirla. (Inoltre, non è buona pratica scrivere la password in qualche documento)

Visto che tu hai settato la password SA per essere complessa e tu solitamente usi la password di dominio per lavorare su SQL Server, l’impensabile è successo “TI SEI DIMENTICATO LA PASSWORD!!” Smile. Tu sei l’unica persona che la conosceva e ora hai la necessità di riprendere il controllo delle tue macchine SQL Server di produzione.

Cosa puoi fare adesso ? Di seguito alcune delle opzioni possibili:

1. Tu potresti provare a fare login sul server usando tutte le password che ti vengono in mente.

2. Cerchi la password disperatamente nelle tue mail o nel tuo disco (sperando di esserti dimenticato per un attimo che non è una buona pratica).

3. Provi a fare restore del database MASTER da un backup. Ma questo non ti aiuterebbe visto che non ricordi la password di SA.

4. Rebuild del database MASTER. Questo potrebbe non aiutare perché perderesti tutte le configurazioni a livello di sistema/server e tutti i settings, inclusi i login, le permission e tutti i server level objects.

5. Re-installare SQL Server 2012 e agganciare tutti i database utente. Questo ti porterebbe ad avere gli stessi problemi del punto 4.

Tutti i tuoi tentativi di login con SA sono falliti ed è tempo di chiamare il supporto tecnico.

Questo è quello che puoi realmente fare:

I requisiti sono quelli di essere amministratori locali sui Windows Server dove le instanze di SQL Server 2012 sono in esecuzione.

SQL Server permette ad ogni membro dei Local Administrators di connettersi a SQL Server con privilegi di SYSADMIN

Passaggi per prendere il controllo di SQL Server 2012 come SA

1. Avviare SQL Server 2012 in single user mode dal command prompt (in esecuzione come amministratore). (NOTA : Potresti anche avviare SQL Server in minimal configuration che mette SQL Server in single user mode)

2. Dal command prompt digitare SQLServr.exe –m (o SQLServr.exe –f) per avviare l’istanza SQL Server.

SQLServr.exe può essere recuperato dalla Binn folder nelle variabili d’ambiente. Nel caso non fosse presente nelle variabili d’ambiente, puoi navigare nella cartella Binn della macchina SQL Server, che di solito si trova su C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Binn

3. Una volta che SQL Server 2012 è stato avviato in single user mode o in minimal configuration, puoi aprire un altro command prompt come administratot e usare SQLCMD per connetterti:

SQLCMD –S <nome_server\nome_istanza>

A questo punto dovresti essere collegato in SQL Server

4. Una volta collegato puoi creare un nuovo account ed assegnare le server level permission. Creiamo ad esempio un nuovo login chiamato “mioAdmin” ed aggiungiamolo al ruolo server SysAdmin.

Per farlo è sufficiente digitare i seguenti comandi in seguito al passaggio del punto 3:

1>     CREATE LOGIN mioAdmin WITH PASSWORD=’$@L649$@m’

2>     GO

1>     SP_ADDSRVROLEMEMBER SQL_SALEEM,’SYSADMIN’

2>     GO

5. Una volta che i passaggi sopra sono stati effettuati, il prossimo passaggio è fare stop dei servizi SQL Server e fare start utilizzando le opzioni di startup regolari (non c’è più bisogno di –f e –m)

6. Fare login con l’utente “mioAdmin” da SQL Server 2012 Management Studio. Adesso l’accesso system admin dovrebbe essere ok.

7. Cercare di non dimenticare ancora la password Smile