Configurar o SQL Server Audit: logins, mudanças de permissão e acesso a tabelas
SQL ServerSegurançaComando
USE master;
CREATE SERVER AUDIT [Audit_DBA]
TO FILE (FILEPATH = N'D:\Audit\', MAXSIZE = 256 MB, MAX_ROLLOVER_FILES = 20, RESERVE_DISK_SPACE = OFF)
WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE);
ALTER SERVER AUDIT [Audit_DBA] WITH (STATE = ON);
-- Server-wide (covers all databases):
CREATE SERVER AUDIT SPECIFICATION [AuditSpec_Server]
FOR SERVER AUDIT [Audit_DBA]
ADD (FAILED_LOGIN_GROUP),
ADD (SERVER_ROLE_MEMBER_CHANGE_GROUP),
ADD (DATABASE_ROLE_MEMBER_CHANGE_GROUP),
ADD (SERVER_PRINCIPAL_CHANGE_GROUP),
ADD (DATABASE_PRINCIPAL_CHANGE_GROUP),
ADD (SERVER_PERMISSION_CHANGE_GROUP),
ADD (DATABASE_PERMISSION_CHANGE_GROUP),
ADD (AUDIT_CHANGE_GROUP)
WITH (STATE = ON);
-- Database: access to a sensitive table:
USE [Musteri];
CREATE DATABASE AUDIT SPECIFICATION [AuditSpec_Musteri]
FOR SERVER AUDIT [Audit_DBA]
ADD (SELECT, INSERT, UPDATE, DELETE ON OBJECT::[dbo].[Siparis] BY [public])
WITH (STATE = ON);
-- Read:
SELECT event_time, action_id, succeeded, server_principal_name, database_name,
schema_name, object_name, LEFT(statement, 200) AS stmt, client_ip, application_name
FROM sys.fn_get_audit_file(N'D:\Audit\Audit_DBA_*.sqlaudit', DEFAULT, DEFAULT)
WHERE event_time >= DATEADD(HOUR, -24, SYSUTCDATETIME())
ORDER BY event_time DESC;O que faz
Cria um server audit que grava em arquivo; registra logins com falha, membros de roles, mudanças de principals e permissões em todo o servidor e acessos SELECT/DML a uma tabela escolhida no nível do banco, e lê os registros com T-SQL.
Quando usar
Para requisitos de auditoria/compliance (GDPR, PCI, SOX), para perguntas do tipo "quem leu/alterou esta tabela" ou quando há suspeita de escalonamento de privilégios.
Atenção
A auditoria de SELECT em uma tabela movimentada gera registros muito rapidamente e custa desempenho; restrinja por objeto e principal. ON_FAILURE = SHUTDOWN derruba o servidor quando o audit não pode ser gravado; use apenas quando exigido. A pasta do audit precisa ter permissão de escrita para a conta de serviço do SQL Server e não pode ser apagável por quem não é DBA. event_time está em UTC. Uma database audit specification é restaurada com o banco, mas fica órfã se o GUID do server audit não coincidir.
Relacionados
- Configurar TDE: master key, certificado, backup do certificado e progresso da criptografia
- Encontrar usuários órfãos e remapeá-los para logins (após restore / AG)
- Auditoria de logins e permissões: membros de sysadmin, permissões arriscadas, senhas fracas
- Criar uma ledger table, ler seu histórico de alterações e verificar a integridade