Audyt uprawnień – kto, co i kiedy?
Zaufanie jest dobre, ale SERVER AUDIT jest lepszy.
Audyt pozwala Ci wiedzieć, kto nadał, odebrał lub zmienił uprawnienia w Twojej bazie.
Nie potrzebujesz narzędzi firm trzecich — wszystko masz wbudowane w SQL Server.
Wystarczy kilka poleceń: CREATE SERVER AUDIT, CREATE DATABASE AUDIT SPECIFICATION, i masz pełny ślad bezpieczeństwa.
„Bez logu nie ma dowodu. Bez dowodu nie ma bezpieczeństwa.”
Dlaczego audyt?
Uprawnienia to władza. A każda władza powinna zostawiać ślady.
W systemach z wieloma administratorami (lub z zespołem deweloperów z prawami sysadmina) często nie sposób ustalić, kto co zmienił.
Audyt pozwala przywrócić porządek i odpowiedzialność.
Architektura audytu
Audyt składa się z trzech warstw:
- Server Audit – definiuje, gdzie będą zapisywane zdarzenia (plik, Application Log, Security Log).
- Database Audit Specification – określa, które akcje w danej bazie są rejestrowane.
- Server Audit Specification – śledzi zdarzenia globalne, np.
SERVER_PRINCIPAL_CHANGE_GROUP.
Ważne: jeden SERVER AUDIT może być używany przez wiele specyfikacji, więc możesz budować centralny punkt zbierania zdarzeń.
Praktyczny przykład
Zacznijmy od utworzenia audytu na poziomie instancji:
| |
Teraz skonfigurujmy śledzenie zmian uprawnień w konkretnej bazie:
| |
Każde polecenie GRANT, DENY, REVOKE, czy ALTER ROLE ... ADD MEMBER zostanie zarejestrowane.
Odczyt logów audytu
Odczyt jest prosty — wszystko znajduje się w widoku sys.fn_get_audit_file:
| |
Wynik pokaże dokładnie, kto zmienił jakie uprawnienie, kiedy i na jakim obiekcie.
Jeśli masz logów z kilku dni — możesz zaimportować je do dedykowanej bazy np. DBA_AuditLogs i wizualizować w Grafanie lub Power BI.
Bonus – audyt zmian logowania
Jeśli chcesz pójść dalej, możesz dodać również monitorowanie logowań:
| |
W ten sposób widzisz nie tylko kto coś zmienił, ale też kto próbował dostać się do systemu.
Dobre praktyki
- Zapisuj logi na osobnym dysku lub zasobie sieciowym tylko do odczytu.
- Regularnie archiwizuj logi audytu, zwłaszcza przy dużej liczbie użytkowników.
- Monitoruj stan audytu —
sys.dm_server_audit_statuspokaże, czy nie został przypadkiem wyłączony. - Połącz audyt z Policy-Based Management i SQL Agent Alerts – będziesz wiedzieć natychmiast, gdy ktoś spróbuje coś zmienić.
Weryfikacja działania (hands-on, 5–10 min)
Poniżej szybki test end-to-end: tworzymy obiekt i użytkownika, nadajemy/odbieramy uprawnienia, dodajemy do roli – a potem sprawdzamy dziennik audytu.
Założenia: masz włączony
SERVER AUDIT Audit_UprawnieniaorazDATABASE AUDIT SPECIFICATION Audit_Uprawnienia_DB(jak wyżej). Ścieżka audytu toC:\SQLAudit\.
| |
Co powinieneś zobaczyć?
- Wiersze z
GRANT SELECT,REVOKE SELECTorazALTER ROLE ... ADD/DROP MEMBER. - Kolumna
server_principal_namewskaże konto, pod którym wykonano operację (Twoja sesja). succeeded = 1dla udanych operacji; nieudane dostaniesz z0.
Szybki alert „czy audyt żyje?”
Jeśli chcesz mieć heartbeat w SQL Agent (co 5 min), dodaj prosty krok T-SQL:
| |
Powiąż ten krok z Alertem agenta (Error Number = 50001) i wyślij mail/SNMP/Teams.
Zaufanie kończy się tam, gdzie zaczyna się nieświadomość.
Audyt to Twoje lustro – pokazuje, kto naprawdę pociąga za dźwignie.
Repozytorium demonstracyjne:
👉 github.com/marcinpytlik/SQLManiak/tree/master/labs/07-security/PBM_Audit