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)
--Use ALT + Q + M to run in SQLCMD mode
:CONNECT SERVER\instance,port
:SETVAR AuditFilePath "C:\temp\"
USE [master]
GO


CREATE SERVER AUDIT [sa_sysadmin_audit]
TO FILE 
(	FILEPATH = N'$(AuditFilePath)'
	,MAXSIZE = 1024 MB
	,MAX_ROLLOVER_FILES = 5
	,RESERVE_DISK_SPACE = OFF
)
WITH
(	QUEUE_DELAY = 1000,
	ON_FAILURE = CONTINUE
)
GO

ALTER SERVER AUDIT [sa_sysadmin_audit]
WITH (STATE = ON);
GO

CREATE SERVER AUDIT SPECIFICATION [sas_sysadmin_audit_specification]
FOR SERVER AUDIT [sa_sysadmin_audit]
ADD (APPLICATION_ROLE_CHANGE_PASSWORD_GROUP),
ADD (AUDIT_CHANGE_GROUP),
ADD (BACKUP_RESTORE_GROUP),
ADD (DATABASE_CHANGE_GROUP),
ADD (DBCC_GROUP),
ADD (DATABASE_PRINCIPAL_CHANGE_GROUP),
ADD (DATABASE_PRINCIPAL_IMPERSONATION_GROUP),
ADD (DATABASE_ROLE_MEMBER_CHANGE_GROUP),
ADD (LOGIN_CHANGE_PASSWORD_GROUP),
ADD (SERVER_OBJECT_CHANGE_GROUP),
ADD (SERVER_OBJECT_PERMISSION_CHANGE_GROUP),
ADD (SERVER_OPERATION_GROUP),
ADD (SERVER_PERMISSION_CHANGE_GROUP),
ADD (SERVER_PRINCIPAL_CHANGE_GROUP),
ADD (SERVER_PRINCIPAL_IMPERSONATION_GROUP),
ADD (SERVER_PRINCIPAL_IMPERSONATION_GROUP),
ADD (SERVER_ROLE_MEMBER_CHANGE_GROUP),
ADD (SERVER_STATE_CHANGE_GROUP),
ADD (TRACE_CHANGE_GROUP)
WITH (STATE = ON)
GO

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.

 

Comments (5) -

  • Kovács Zsolt

    5/23/2013 8:20:29 PM | Reply

    Szia!


    Lenne kérdésem a cikkel kapcsolatban.

    Ha jól látom a gyenge pont, hogy az SQL szerver szolgáltatás tud írni a fájlba. Tehát, ha a sysadmin egy SQL user és bekapcsolja az xp_cmdshell-t, akkor direkbe tud írni a fájlba.
    Ez így helytálló? És kivédhető?


    A másikat meg inkább majd személyesen Smile


    És grat a cikkhez, adtál jó ötleteket!


    Zsolt

  • janos

    5/23/2013 10:59:07 PM | Reply

    Szia Zsolt, sajnos az a szomorú hírem van, hogy annyira megbízható ez az audit, mint a sysadmin server role-ban található principal-ok tulajdonosai. Éppen ezért fontos, hogy csak megbízható személyek rendelkezzenek ezzel a jogosultsági szinttel. De arra is volt példa nálam, hogy ketten kellettünk ahhoz, hogy sysadminknt be tudjak lépni.

  • Bélus

    6/1/2015 1:39:09 PM | Reply

    Sziasztok, bocs, de én nem látok lényeges előnyt AUDIT -ban, a TRACE -hez képest. Kicsit kevesebb erőforrást használ, talán.. Még valami?

    kösz.

    • Berke János

      6/1/2015 1:53:59 PM | Reply

      Pedig sokkal jobb a helyzet, sokszor a trace el sem indul (nagy tranzakció számnál pl.) nem is beszélve arról, hogy van olyan eset amit a trace segítségével nem lehet, de az sp_audit_write proci segítségével igen ;)

    • Berke János

      6/1/2015 1:57:27 PM | Reply

      Arról nem is beszélve, hogy az audit logolja a ki/be kapcsolást, a trace nem.

Add comment