V předchozí části miniseriálu jsem se dostal k zaznamenávání serverových událostí. Dnes budu pokračovat událostmi na úrovni databází.
K jejich zaznamenávání slouží objekt Database Audit Specification, kterých lze pro každou databázi vytvořit několik. Podmínkou pro jeho vytvoření je jen existence samotného Auditu. Neni tedy nutné mít vytvořen objekt Server Audit Specification.

Stejně jako skupiny událostí pro specifikaci server auditu, lze na webu technet.microsoft.com najít i skupiny událostí pro databázový audit. Oproti zmíněnému seznamu obsahuje SQL Server Management Studio navíc volby APPLICATION_ROLE_CHANGE_PASSWORD_GROUP, AUDIT_CHANGE_GROUP, BACKUP_RESTORE_GROUP a DBCC_GROUP.

Vytvoření Database Audit Specification

Jako vždy prvně v SQL Server Management Studiu

Nový objekt Database Audit Specification Specifikaci databázového auditu vytvoříme volbou v kontextové nabídce Database Audit Specification, ve složce Security konkrétní databáze.

Každá specifikace musí mít unikátní jméno a přiřazení k objektu Auditu. Pak už jen stačí vybrat skupiny událostí, které chceme zaznamenávat. Nejzajímavější skupinu tvoří příkazy pro manipulaci s daty. Auditování se neomezuje jen na volání konkrétního příkazu, ale je spuštěno i v případech nepřímého použití daného příkazu. Tedy například Audit příkazu INSERT bude proveden i při použití uvnitř procedury, či volání triggeru. Některé ze skupin, které lze ve specifikaci použít, lze použít pro konkrétní instanci objektu, nebo pro celou zvolenou databázi.

Při výběru objektů jsou použity checkboxy pro možnost volby více objektů současně. Moje zkušenost je však taková, že pro konkrétní záznam ve specifikaci (jeden řádek v seznamu akcí) je použit jen jeden z vybraných objektů. Pokud tedy chcete auditovat příkaz SELECT pro dva uživatele, musíte vytvořit dva záznamy ve specifikaci.

Nastavení Database Audit SpecificationNastavení Database Audit SpecificationNastavení Database Audit Specification

Hotovou specifikaci databázového auditu je opět nutné pomocí kontextové nabídky povolit.

Audit log V logu je možné dohledat i konkrétní dotaz, který audit vyvolal. Hodnoty parametrů použitých v dotazu se však nedozvíme.

Stejnou specifikaci lze samozřejmě vytvořit také pomocí Transact-SQL

SQL:
USE pokus;

CREATE DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecification-pokus]
FOR SERVER AUDIT [Audit-pokus]
ADD (EXECUTE ON dbo.getLide BY testLogin),
ADD (EXECUTE ON dbo.getLide BY testLogin2),
ADD (SELECT ON dbo.lide BY testLogin),
ADD (DELETE ON DATABASE::pokus BY testLogin2);

ALTER DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecification-pokus]
WITH (STATE = ON);

Případně lze použít zkráceny zápis, kdy je příkaz EXECUTE použit rovnou pro dva uživatele. Rovněž povolení specifikace je provedeno ihned pri vytvoření.

SQL:
USE pokus;

CREATE DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecification-pokus]
FOR SERVER AUDIT [Audit-pokus]
ADD (EXECUTE ON dbo.getLide BY testLogin,testLogin2),
ADD (SELECT ON dbo.lide BY testLogin),
ADD (DELETE ON DATABASE::pokus BY testLogin2)
WITH (STATE = ON);