[ c00l3D @ 23.06.2009. 11:34 ] @
Interesuje me na koji način se može pratiti koji se korisnik prijavio na SQL server i šta je sve uradio.

Na primjer:
Prijavim se sa korisnikom 'sa' sa windows auth. na neku bazu privremenaBaza, i izvrsim neki selekt svih podataka iz tabele 'test'. Na koji se način može pratiti ovo odnosno da na kraju dobijem tabelu sličnu ovoj:

datum korisnik kompjuter akcija
1.1.2009 sa IME Prijavio se sa korisnikom 'sa'
1.1.2009 sa IME Otvorio bazu 'privremenaBaza'
1.1.2009 sa IME Uradio selekt nad tabelom 'test'

Najviše me interesuje prva tačka tabele, tj. koji se korisnik prijavio i u koliko sati.
[ mmix @ 23.06.2009. 11:49 ] @
SQL Server 2008 Books Online - Auditing (Database Engine)
[ c00l3D @ 24.06.2009. 09:19 ] @
Hvala na brzom odgovoru, gledao sam sta radi i kako i sve je to super samo problem je sto ovo ne moze da zapamti ni da logira akcije koje je neki korisnik uradio, na primjer korisnik 'mmix' dodjelio db_owner nad bazom 'test' korisniku 'c00l3D'.

Da li postoji neki način za ovo (vjerovatno postoji samo ga ja ne znam) ???

Napomena:
Sistem vec koristi SLQ Server 2005. Pokusao sam da ukljucim Audit ali ne mogu da vidim node Audit ili kako vec na Security tabu.

Koristio sam sljedeci fazon da ukljucim audit ali nisam uspio da logiram akcije koje mi gore trebaju nego mi samo ispise:
"Login succeeded for user 'NT AUTHORITY\SYSTEM'. Connection: trusted. [CLIENT: <local machine>]"


a navedeno sam ukljucio sa:

Code:

DECLARE @traceID int
DECLARE @maxfilesize bigint
DECLARE @on bit
set @maxfilesize = 5 
set @on = 1
EXEC sp_trace_create @TraceID OUTPUT, 6, N'C:\AuditTrace.trc', @MaxFileSize, 
NULL
EXEC sp_trace_setevent @TraceID, 109, 7, @on

SP_CONFIGURE 'show advanced options', 1; -- c2 audit mode is an advanced option
GO
RECONFIGURE;
GO
SP_CONFIGURE 'c2 audit mode', 1;
GO
RECONFIGURE;
GO


i onda sam gledao logove sa

Code:

SELECT * FROM fn_trace_gettable
('C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\log.trc', default)
WHERE StartTime > GETDATE() - 1
order by StartTime desc
[ mmix @ 24.06.2009. 12:06 ] @
Batali sistemski log, kreiraj svoj u koji ces trpati ono sto tebi treba, dakle za pocetak:

Code:
CREATE SERVER AUDIT [MojAudit001]
TO FILE (FILEPATH = N'C:\Temp') WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE);
GO


Promeni folder samo gde hoces da ti idu logovi.

Sad treba da mu kazes sta da ti trpa u logove a to radis kroz "Server Audit Specification" i "Database Audit Specifications" na nivou pojedinacnih baza.

Npr server-level za sve logine i logoutove u mojaudit...
Code:
CREATE SERVER AUDIT SPECIFICATION [LoginSpecifikacija] FOR SERVER AUDIT [MojAudit001]
ADD (SUCCESSFUL_LOGIN_GROUP), ADD (FAILED_LOGIN_GROUP), ADD (LOGOUT_GROUP);
GO


Recimo hocemo da vidimo u bazi XYZ ko menja permissions i ko radi select nad tabelom tabela, dodamo i to u log
Code:
USE [XYZ]
GO
CREATE DATABASE AUDIT SPECIFICATION [XYZSpecifikacijaZaPermission] FOR SERVER AUDIT [MojAudit001]
ADD (DATABASE_OBJECT_PERMISSION_CHANGE_GROUP), ADD (SCHEMA_OBJECT_PERMISSION_CHANGE_GROUP), 
ADD (SELECT ON OBJECT::[dbo].[tabela] BY [dbo])
GO


Na kraju aktiviras sve to

Code:
ALTER SERVER AUDIT [MojAudit001] WITH (STATE = ON);
GO
ALTER SERVER AUDIT SPECIFICATION [LoginSpecifikacija]  WITH (STATE = ON);
GO
ALTER SERVER AUDIT SPECIFICATION [XYZSpecifikacijaZaPermission]  WITH (STATE = ON);
GO


Sve ovo inace moze iz odgovarajucih menija u server menadzeru.

I sad ce sve te informacije da idu u log koji mozes da vidis na isti nacin na koji gledas sistemski, samo koristis fn_get_audit_file za citanje istog:

Code:
select action_id, session_server_principal_name, database_principal_name, statement 
from sys.fn_get_audit_file ('C:\Temp\MojAudit*',default,default)
WHERE event_time > GETDATE() - 1
order by event_time desc


npr za dva granta (G), select (SL) i login (LGIS) s tim da imas jos dosta polja u logu koja ti daju vise detalja o akciji.

Code:
action_id  session_server_principal_name  database_principal_name  statement
----------------------------------------------------------------------------------------------------
G          SOLARIS\Administrator          dbo                      GRANT REFERENCES ON [dbo].[tabela] TO [guest]
G          SOLARIS\Administrator          dbo                      GRANT ALTER ON [dbo].[tabela] TO [guest]
SL         SOLARIS\Administrator          dbo                      SELECT * FROM [XYZ].[dbo].[tabela]
LGIS                                                               -- network protocol: LPC ...




[ c00l3D @ 01.07.2009. 12:02 ] @
Jesi li siguran da ovo radi pod SQL Server 2005-icom ???

Posto cim pokrenem ovaj prvi query izbaci mi gresku "Error sintax near SERVER" (tako nesto). ???
[ mmix @ 01.07.2009. 12:56 ] @
ah, 2005, promaklo mi je to u tvojoj drugoj poruci. Ne, ne radi na 2005. Za 2005 moras da pribavis neki externi audit sistem a i tad nisam siguran da moze da hvata select-e, mozes eventualno da iskoristis profiler ali ce ti tu biti tesko da ocistis zito od kukolja.

Sto se jednostavno ne upgradujes na 2008? Izasao je i SP1 vec.
[ c00l3D @ 01.07.2009. 13:21 ] @
Ma znam koristim ga na drugim projektima,ali sistem koji odrzavam je na 2005 a migracija sa 2005 na 2008 bi bila velika jer sistem je ogroman sa nekoliko hiljada korisnika i nekoliko drugih aplikacija koje se kace na sistem. Davno bi ja to uradio da se ja pitam al sta je tu je. Haj sad cu nesto pokusati sa DDL trigerima ili mesto izmajmunisati pa ako nadjem javim.

Thx za trud, ako nista mogu ga iskoristiti za neki od sistema na kojim sad radim :)