giovedì 24 settembre 2015

Query su MS SQL, Autenticazione di Windows risolta anche fuori dal dominio

Per lavoro uso un Notebook e mi trovo ad operare in ambienti diversi con domini diversi.
Per lavoro mi trovo costretto ad effettuare query sul database di Microsoft, ma quando mi imbatto nell'autenticazione di tipo Windows Autentication sono dolori, devo farmi "prestare" un PC nel dominio da qualcuno che può accedere al Database su cui devo operare, e non sempre è facile.
Ho trovato un workaround a questo problema che non sempre è risolutivo, ma che in diversi casi mi ha tolto dai pasticci.





Prima di tutto ho utilizzato Sqlcmd di Microsoft. Grazie a questa utility è possibile effettuare query, di qualsiasi tipo, dal prompt dei comandi.
Il suo uso è abbastanza semplice, Microsoft stessa ci fornisce le istruzioni per farlo.
A queste istruzioni, senza inserire l'utenza, dobbiamo aggiungere la nostra query e poi richiamarla dal comando runas di Microsoft opportunamente parametrizzato.

Di seguito il mio esempio:
runas /netonly /env /utente:[dominio]\[Utente] LaMiaQuery.bat
Eseguendo questo comando riceveremo subito il seguente prompt:

Immettere la password per [dominio]\[Utente]:
E dovremmo digitare la password dell'utenza indicata.

I parametri /netonly /env indicano al comando runas che l'utenza non deve essere verificata all'interno della sistema in uso, ma solo dal dominio.
Il fatto di non dover inserire la password all'interno del comando fa si che la stessa non rimanga scritta in chiaro da nessuna parte (OTTIMO).

Nell'uso di sqlcmd ecco il contenuto di LaMiaQuery.bat
sqlcmd -S SQLServer[\IstanzaSQL] -h -1 -W -s ; -q"SELECT * FROM LaMiaTabella"
I parametri sono sicuramente da ottimizzare in base alle esigenze come la query eseguita.

AGGIORNAMENTO  20151106
La soluzione trovata risulta ottima quando devo utilizzare delle query salvate, ma ritorna un po' macchinosa quando bisogna studiare come fare la query, in assenza di una una documentazione del DB in uso.
Di conseguenza la soluzione più comoda, in questo caso è eseguire il seguente comando da prompt MS DOS:
runas /noprofile /netonly /utente:DOMINIO\User "C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe -S NomeServer\NomeIstanza -E"
Una volta eseguito il comando verrà richiesta, dalla finestra DOS, lapassword per l'utente indicato.

Qualcuno ha trovato altre soluzioni? Le esponga per favore.