Fa uns dies m'han demanat que llisti els usuaris que s'han loginat al servidor d'SQL Server, de forma correcta o no.
El primer que cal fer és activar el log d'usuaris per casos correctes (per defecte només es registren els incorrectes).
Després cal obtenir la informació del log d'SQL, això es fa mitjançant la stored procedure xp_readerrorlog. Aquesta stored té els següents paràmetres:
El fitxer de log que es vol llegir: 0 = actual, 1 = arxiu #1, 2 = arxiu #2, etc...
El tipus de fitxer de log: 1 o NULL = error log, 2 = SQL Agent log
String que vols buscar 1
String que vols buscar 2, per refinar més la cerca
Data d'inici
Data de fi
Ordenació dels resultats: N'asc' = ascending, N'desc' = descending
Aleshores es pot fer algo similar a:
DECLARE @tLog TABLE
(
LogDate datetime,
ProcessInfo nvarchar(50),
Value nvarchar(max)
)
DECLARE @FechaActual datetime
SELECT @FechaActual=GETDATE()
INSERTINTO @tLog
EXEC master.dbo.xp_readerrorlog 0, 1, N'Login', N'succeeded', '2015-03-26T00:00:00', @FechaActual, N'desc'SELECT MIN(LogDate) AS FechaLogin, [VALUE] FROM @tLog GROUP BY [VALUE]
És molt important posar una "N" davant dels strings de cerca per que els converteix a Unicode, si no es posa no troba resultats. Quan recuperem la taula els valors tenen el nom de l'usuari entre cometes simples, es pot fer algo com:
Usuario = DR("VALUE").ToString()
//Treiem el text que hi ha abans i despres del nom de l'usuari. El nom de l'usuari va entre cometes simples
Inicio = Usuario.IndexOf("'") + 1
Fin = Usuario.IndexOf("'", Inicio)
Usuario = Usuario.Substring(Inicio, Fin - Inicio)
I llestos!
#14/05/2015 15:00 Programació SQLServer Autor: Alex Canalda