Uma das principais atividades de um administrador de banco de dados é a proteção aos dados. Estabelecer e validar uma política de acesso ao banco de dados é fundamental. O controle de acesso pode ser definido através de comandos de DCL (Data Control Language) – GRANT, REVOKE e DENY.
Porém, apenas restringir o acesso pode não ser suficiente para compor a rotina de segurança do ambiente. Em alguns cenários é essencial também auditar quem, quando e quais os tipos de manipulação de dados foram realizados no banco de dados. Por isso, o SQL Server desde a versão 2008 Enterprise traz consigo uma tecnologia voltada para auditoria de eventos do servidor e específicos para banco de dados o SQL Server AUDIT. No SQL Server 2016 Service Pack 1 o Database Audit Specification ficou disponível para outras edições do SQL Server, como a Standard.
O SQL Server Audit é formado basicamente por três componentes: SQL Server Audit, Server Audit Specification e Database Audit Specification.
SQL Server Audit: objeto que coleta eventos monitorados no servidor (Server Audit Specification) ou em um ou mais banco de dados (Database Audit Specification). Podemos ter um ou mais objetos do SQL Server Audit por instância. Essas coletas são baseadas em Extended Events (xEvents) e foram desenvolvidas para trazer baixo impacto no ambiente*. Durante a configuração do SQL Server Audit é especificado um diretório para armazenar os logs, também há configurações que definem a frequência de escrita e o comportamento caso não seja possível auditar.
Para criarmos uma auditoria via interface gráfica do Management Studio, devemos ir ao Object Explorer, expandir a instância, clicar com o botão direito do mouse na pasta de Security e escolher a opção de “Audit…”.
Na janela de Create Audit devemos especificar o nome da AUDIT, o Queue delay (tempo máximo decorrido antes da auditora realizar uma ação), o On Audit Log Failure (se queremos prosseguir com a audit, falhar a operação que seria auditada ou desligar o serviço do SQL Server), o local de armazenamento, número máximo de arquivos que serão mantidos para auditoria e se o espaço será reservado ou não no disco.

Em T-SQL podemos executar o comando a seguir para criar a auditoria:
CREATE SERVER AUDIT [AuditNativa]
TO FILE
( FILEPATH = N'D:\temp'
,MAXSIZE = 0 MB
,MAX_ROLLOVER_FILES = 2147483647
,RESERVE_DISK_SPACE = OFF
) WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE);
Uma vez configurado o AUDIT, podemos agora definir o que será auditado, para isto temos que utilizar outros dois componentes: Server Audit Specification e Database Audit Specification.
Server Audit Specification: é o mecanismo que captura ações que ocorrem no contexto da instância e registra em um AUDIT. Para criarmos uma Server Audit Specification, no Object Explorer nós devemos clicar com o botão direito do mouse na pasta de Security da instância e escolher a opção de “Server Audit Specification…”.

Na janela temos a opção de nomear o Server Audit Specification e escolher qual o Audit que armazenará os registros capturados por essa coleta. Nas Actions temos 44 grupos de comandos que podem ser capturados e auditados. Dentre as opções disponíveis podemos armazenar tentativas falhas de logons, alterações de permissões, execução de comandos DBCC dentre outras.
CREATE SERVER AUDIT SPECIFICATION [ServerAuditSpecification-20210412-145936]
FOR SERVER AUDIT [AuditNativa]
ADD (FAILED_LOGIN_GROUP),
ADD (DBCC_GROUP);
Ao terminar a configuração basta iniciarmos o Server Audit Specification e o Audit clicando com o botão direito sobre cada um deles e escolhendo a opção “Enable”.
Outra opção de auditora é o Database Audit Specification que permite capturar eventos no escopo de um banco de dados.
Database Audit Specification: ações realizadas no contexto de banco de dados são capturadas e armazenadas em um AUDIT. É possível armazenar dados de um Database Audit Specification de um ou mais banco de dados em um mesmo Server Audit. Também podemos armazenar dados de um Server Audit Specification no mesmo Server Audit.
Para configurarmos um Database Audit Specification via interface gráfica, devemos clicar com o botão direito sobre a estrutura de pasta Security do banco de dados desejado e escolher a opção “Database Audit Specification…”.

No Database Audit Specification temos a opção de auditar ações realizadas por um usuário em um determinado objeto ou schema. Desta forma, temos um mecanismo leve para capturar por exemplo ações de SELECT em tabelas com dados pessoais, constituindo uma importante ferramenta para controle de acesso a dados pessoais.
Além de AUDITAR operações de DML (INSERT, UPDATE, DELETE e MERGE) e DQL (SELECT) também podemos auditar eventos relacionados a segurança de dados.
Abaixo segue exemplo de como capturar todos os eventos de SELECT realizados no schema dbo pelos membros da database role public.
CREATE DATABASE AUDIT SPECIFICATION [DatabaseAuditSpecification-20210412-153408]
FOR SERVER AUDIT [AuditNativa]
ADD (SELECT ON SCHEMA::[dbo] BY [public]);
Na semana que vem faremos alguns exemplos de relatórios que podem ser criados a partir de consultas nas auditorias configuradas, que pode ser tornar um ativo muito importante na gestão de acesso à dados pessoais.
Ficou com alguma dúvida de como implantar auditorias no Microsoft SQL Server? Entre em contato conosco ou deixe um comentário.