Hogyan auditáljuk a sysadmin joggal rendelkező felhasználókat?
Azt gondolnánk, hogy a sysadmin joggal rendelkező felhasználók nem csinálnak galibát, de legalábbis megbízhatóak. Ezeket tényként kezelném :) de azért vannak olyan esetek, amikor mégiscsak a körmükre kell nézni. Ilyen eset lehet, amikor egy előírás, törvény vagy egyéb szabvány megköveteli ezt, pl.: SOX, PCI DSS, HIPA.
Na akkor, hogyan is lehet ezt megcsinálni? Ez attól függ, hogy melyik verziót használom: SQL Server 2005 esetén csak a szerver oldali trace áll rendelkezésre. Ezzel most nem foglalkoznék, ha valakinek kell a script, odaadom. SQL 2008 és újabb verziók esetében Enterprise edition tartalmazza a SERVER AUDIT szolgáltatást. Nem enterprise editon esetén marad az SQL Serevr 2005-nél már említett szerver oldali trace.
SQL Server 2008 vagy újabb, enterprise editon esetén rendelkezésre áll a SERVER AUDIT és a SERVER AUDIT SPECIFICATION objektum. Ezek segítségével az alábbi megoldást szoktam javasolni, a teljesség igénye nélkül:
- az audit adatokat/auditált eseményeket file-ba mentsük,
- az audit file egy másik szeveren legyen, mint az SQL Server szolgáltatás,
- az audit file ne legyen elérhető az SQL Server sysadmin tagjai által (NTFS és share ACL korlátozás),
- az SQL Server Database Engine service account-nak csak WRITE jogot adjunk az audit file-t tartalmazó mappához (a read nem igazán kell, csak az - auditoroknak),
- az SQL Server sysadmin tagjai ne legyenek domain/enterprise admin csoport tagja (felelőségi körök szétválasztása)
Ezek után már készülhet is az audit, aminél az alábbi paramétereket adtam meg:
- max 1024 MB-os audit file-ok,
- max 5 db audit file,
- ha az audit adat beírása nem sikerül, akkor a szolgáltatás fut tovább (bizonyos esetekben ez nem engedhető meg, előírástól függ. itt most nagyon - engedékeny vagyok :) )
- főbb, szerver szintű objektumok auditálása ( részelteket lásd: http://msdn.microsoft.com/en-us/library/cc280663(v=sql.100).aspx)
1--Use ALT + Q + M to run in SQLCMD mode
2:CONNECT SERVER\instance,port
3:SETVAR AuditFilePath "C:\temp\"
4USE [master]
5GO
6
7
8CREATE SERVER AUDIT [sa_sysadmin_audit]
9TO FILE
10( FILEPATH = N'$(AuditFilePath)'
11 ,MAXSIZE = 1024 MB
12 ,MAX_ROLLOVER_FILES = 5
13 ,RESERVE_DISK_SPACE = OFF
14)
15WITH
16( QUEUE_DELAY = 1000,
17 ON_FAILURE = CONTINUE
18)
19GO
20
21ALTER SERVER AUDIT [sa_sysadmin_audit]
22WITH (STATE = ON);
23GO
24
25CREATE SERVER AUDIT SPECIFICATION [sas_sysadmin_audit_specification]
26FOR SERVER AUDIT [sa_sysadmin_audit]
27ADD (APPLICATION_ROLE_CHANGE_PASSWORD_GROUP),
28ADD (AUDIT_CHANGE_GROUP),
29ADD (BACKUP_RESTORE_GROUP),
30ADD (DATABASE_CHANGE_GROUP),
31ADD (DBCC_GROUP),
32ADD (DATABASE_PRINCIPAL_CHANGE_GROUP),
33ADD (DATABASE_PRINCIPAL_IMPERSONATION_GROUP),
34ADD (DATABASE_ROLE_MEMBER_CHANGE_GROUP),
35ADD (LOGIN_CHANGE_PASSWORD_GROUP),
36ADD (SERVER_OBJECT_CHANGE_GROUP),
37ADD (SERVER_OBJECT_PERMISSION_CHANGE_GROUP),
38ADD (SERVER_OPERATION_GROUP),
39ADD (SERVER_PERMISSION_CHANGE_GROUP),
40ADD (SERVER_PRINCIPAL_CHANGE_GROUP),
41ADD (SERVER_PRINCIPAL_IMPERSONATION_GROUP),
42ADD (SERVER_PRINCIPAL_IMPERSONATION_GROUP),
43ADD (SERVER_ROLE_MEMBER_CHANGE_GROUP),
44ADD (SERVER_STATE_CHANGE_GROUP),
45ADD (TRACE_CHANGE_GROUP)
46WITH (STATE = ON)
47GO
Ezek után már csak nézegetni kell, hogy miket állítgatnak be/el :) , ami lehetséges SSMS vagy a sys.fn_get_audit_file TVF segítségével is.