Mamy dwa poziomy audytu jaki możemy przeprowadzić w SQL Server, tj.
- na samej instancji, zbieranie info z serwera
- na bazie i zbieranie logów z konkretnej bazy danych
1. Audyt na bazie danych
1.1) Polega na stworzeniu konfiguracji Audytu, a następnie Specyfikacji Audytu per baza
1.2) Tworzymy Audyt. Rozwijamy drzewko instancji, wybieramy Security/Audits/New Audit...
1.3) Wpisujemy gdzie logować zebrane dane, u mnie do pliku 20GB nadpisujący się.
![]() |
Tworzenie nowego audytu |
1.4) Tworzymy specyfikację audytu dla bazy.
1.5) Rozwijamy drzewo instancji, wybieramy konkretną bazę danych, dalej Security/Database Audit Specifications/New Database Audit Specification...
1.6) Wpisujemy co chcemy logować, tj.
- Audit Action Type (typ akcji), u mnie instrukcja SELECT
- Object Class (klasa obiektu), u mnie to będzie typ SCHEMA
- Object Name (nazwa obiektu), u mnie to będzie dbo ze SCHEMA
- Principal Name (główny powiązany), u mnie to będzie każdy kto leży do grupy public, a więc wszyscy
w
polu Audit wybieramy nasz wcześniej stworzony obiekt Audit, i koniec.
Audyt jeszcze nie działa włączamy go na poziomie obiektu Audit.
![]() |
Specyfikacja audytu na bazę |
2. Audyt na serwerze
Podobnie jak w pkt 1, tworzymy konfigurację Audytu, tj. gdzie będziemy logować, ja wykorzystam tu ten sam obiekt
2.1) Tworzymy specyfikację audytu dla serwera. Rozwijamy drzewo instancji i dalej Security/Audits/Server Audit Specification/New Server Audit Specification...
Wpisujemy co chcemy logować, tj.
- Audit Action Type (typ akcji), u mnie instrukcja SUCCESSFUL_LOGIN_GROUP (czyli kto się zalogował)
- Object Class (klasa obiektu), brak, tu typ akcji nie pozwala na wybranie obiektu
- Object Name (nazwa obiektu), brak, tu typ akcji nie pozwala na wybranie obiektu
- Principal Name (główny powiązany), brak, tu typ akcji nie pozwala na wybranie obiektu
w polu Audit wybieramy nasz wcześniej stworzony obiekt Audit, i koniec. Audyt jeszcze nie działa włączamy go na poziomie obiektu Audit.
PS: Dokładne opisy wszystkich akcji jakie możemy logować są na MSDN
w tabelach per db: Database-level audit action groups
w tabeli per serwer: Server-level audit action groups
![]() |
Specyfikacja audytu na serwer |
3. Czytanie logów
Mając już logowanie, możemy czytać te logi bezpośrednio funkcją systemową sys.fn_get_audit_file, ew. zapakować to w widok na bazie master i czytać już globalnie i filtrować przez kolumnę database_name
SELECT *
FROM sys.fn_get_audit_file(
'Y:\AuditLogs\*.sqlaudit',
DEFAULT,
DEFAULT
);
GO