CREATE SERVER AUDIT (Transact-SQL)

Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure

Cria um objeto de auditoria do servidor usando a Auditoria do SQL Server. Para obter mais informações, confira Auditoria do SQL Server (Mecanismo de Banco de Dados).

Convenções de sintaxe de Transact-SQL

Sintaxe

CREATE SERVER AUDIT audit_name
{
    TO { [ FILE (<file_options> [ , ...n ] ) ] | APPLICATION_LOG | SECURITY_LOG | URL | EXTERNAL_MONITOR }
    [ WITH ( <audit_options> [ , ...n ] ) ]
    [ WHERE <predicate_expression> ]
}
[ ; ]

<file_options>::=
{
    FILEPATH = 'os_file_path'
    [ , MAXSIZE = { max_size { MB | GB | TB } | UNLIMITED } ]
    [ , { MAX_ROLLOVER_FILES = { integer | UNLIMITED } } | { MAX_FILES = integer } ]
    [ , RESERVE_DISK_SPACE = { ON | OFF } ]
}

<audit_options> ::=
{
    [ QUEUE_DELAY = integer ]
    [ , ON_FAILURE = { CONTINUE | SHUTDOWN | FAIL_OPERATION } ]
    [ , AUDIT_GUID = uniqueidentifier ]
    [ , OPERATOR_AUDIT = { ON | OFF } ]
}

<predicate_expression> ::=
{
    [ NOT ] <predicate_factor>
    [ { AND | OR } [ NOT ] { <predicate_factor> } ]
    [ , ...n ]
}

<predicate_factor>::=
    event_field_name { = | < > | != | > | >= | < | <= | LIKE } { number | ' string ' }

Argumentos

TO { FILE | APPLICATION_LOG | SECURITY_LOG | URL | EXTERNAL_MONITOR }

Determina o local do destino da auditoria. As opções são um arquivo binário, o log do Aplicativo do Windows ou o log de Segurança do Windows. O SQL Server não poderá gravar no log de segurança do Windows se não forem definidas configurações adicionais no Windows. Para obter mais informações, veja Gravar eventos de auditoria do SQL Server no log de segurança.

A URL de destino não tem suporte para SQL Server.

Importante

Na Instância Gerenciada de SQL do Azure, a Auditoria do SQL funciona no nível do servidor. Os locais só podem ser URL ou EXTERNAL_MONITOR.

FILEPATH = 'os_file_path'

O caminho do log de auditoria. O nome do arquivo é gerado com base no nome da auditoria e no GUID da auditoria. Se esse caminho for inválido, a auditoria não será criada.

A FILEPATH de destino não tem suporte para a Instância Gerenciada de SQL do Azure. Você precisará usar PATH em vez disso.

MAXSIZE = max_size

Especifica o tamanho máximo até o qual o arquivo de auditoria pode crescer. O valor de max_size deve ser um inteiro seguido de MB, GB, TB ou UNLIMITED. O tamanho mínimo que você pode especificar para max_size é 2 MB e o máximo é 2.147.483.647 TB. Quando UNLIMITED é especificado, o arquivo aumenta até que o disco esteja completo. (0 também indica UNLIMITED.) A especificação de um valor inferior a 2 MB gera o erro MSG_MAXSIZE_TOO_SMALL. O valor padrão é UNLIMITED.

A MAXSIZE de destino não tem suporte para a Instância Gerenciada de SQL do Azure.

MAX_ROLLOVER_FILES = { inteiro | UNLIMITED }

Especifica o número máximo de arquivos a serem retidos no sistema de arquivos além do arquivo atual. O valor de MAX_ROLLOVER_FILES deve ser um inteiro ou UNLIMITED. O valor padrão é UNLIMITED. Este parâmetro é avaliado sempre que a auditoria é reiniciada (o que pode ocorrer quando a instância do Mecanismo de Banco de Dados é reiniciada ou quando a auditoria é desativada e, em seguida, reativada) ou quando um novo arquivo é necessário porque o MAXSIZE foi alcançado. Quando MAX_ROLLOVER_FILES é avaliado, se o número de arquivos excede a configuração de MAX_ROLLOVER_FILES, o arquivo mais antigo é excluído. Como resultado, quando a configuração de MAX_ROLLOVER_FILES é 0, um novo arquivo é criado sempre que a configuração de MAX_ROLLOVER_FILES é avaliada. Somente um arquivo é excluído automaticamente quando a configuração de MAX_ROLLOVER_FILES é avaliada, portanto, quando o valor de MAX_ROLLOVER_FILES é reduzido, o número de arquivos não diminui, a menos que os arquivos antigos sejam excluídos manualmente. O número máximo de arquivos que pode ser especificado é 2.147.483.647.

MAX_ROLLOVER_FILES não tem suporte para Instância Gerenciada de SQL do Azure.

MAX_FILES = inteiro

Aplica-se a: SQL Server 2012 (11.x) e posterior.

Especifica o número máximo de arquivos de auditoria que pode ser criado. Não substitui o primeiro arquivo quando o limite é atingido. Quando o limite de MAX_FILES é atingido, qualquer ação que causa a geração de eventos adicionais falha com um erro.

RESERVE_DISK_SPACE = { ON | OFF }

Essa opção pré-aloca o arquivo no disco para o valor MAXSIZE. Aplica-se apenas se MAXSIZE não for igual a UNLIMITED. O valor padrão é OFF.

A RESERVE_DISK_SPACE de destino não tem suporte para a Instância Gerenciada de SQL do Azure.

QUEUE_DELAY = inteiro

Determina a hora, em milissegundos, que pode decorrer antes que o processamento das ações de auditoria seja forçado. Um valor 0 indica entrega síncrona. O valor mínimo de atraso de consulta configurável é 1000 (1 segundo), que é o padrão. O máximo é 2147483647 (2.147.483.647 segundos ou 24 dias, 20 horas, 31 minutos, 23.647 segundos). Especificar um número inválido gera o erro MSG_INVALID_QUEUE_DELAY.

ON_FAILURE = { CONTINUE | SHUTDOWN | FAIL_OPERATION }

Indica se a instância que grava no destino deverá falhar, continuar ou parar o SQL Server se o destino não puder gravar no log de auditoria. O valor padrão é CONTINUE.

CONTINUE

SQL Server As operações continuam. Os registros de auditoria não são retidos. A auditoria continua tentando registrar eventos em log e retoma se a condição de falha é resolvida. A seleção da opção Continuar pode permitir atividades não auditadas, o que pode violar as políticas de segurança. Use essa opção, quando continuar a operação do Mecanismo de Banco de Dados é mais importante do que manter uma auditoria completa.

SHUTDOWN

Força a instância de SQL Server a ser desligada, caso o SQL Server não possa gravar dados no destino de auditoria por qualquer motivo. O logon que executa a instrução CREATE SERVER AUDIT deve ter a permissão SHUTDOWN no SQL Server. O comportamento de desligamento persiste mesmo se a permissão SHUTDOWN é revogada posteriormente do logon em execução. Se o usuário não tiver essa permissão, a instrução falhará e a auditoria não será criada. Use a opção quando uma falha de auditoria puder comprometer a segurança ou a integridade do sistema. Para obter mais informações, consulte SHUTDOWN.

FAIL_OPERATION

Aplica-se a: SQL Server 2012 (11.x) e posterior.

Haverá falha nas ações do banco de dados se elas provocarem eventos auditados. As ações que não causam eventos auditados podem continuar, mas não pode ocorrer nenhum evento auditado. A auditoria continua tentando registrar eventos em log e retoma se a condição de falha é resolvida. Use essa opção, quando manter uma auditoria completa for mais importante do que o acesso total ao Mecanismo de Banco de Dados.

AUDIT_GUID = uniqueidentifier

Para dar suporte a cenários, como espelhamento de banco de dados, uma auditoria precisa de um GUID específico que corresponda ao GUID encontrado no banco de dados espelhado. O GUID não pode ser modificado depois que a auditoria foi criada.

OPERATOR_AUDIT

Aplica-se a: apenas Instância Gerenciada de SQL do Azure.

Indica se a auditoria capturará as operações dos engenheiros de suporte da Microsoft quando eles precisarem acessar o servidor durante uma solicitação de suporte.

predicate_expression

Aplica-se a: SQL Server 2012 (11.x) e versões posteriores.

Especifica a expressão de predicado usada para determinar se um evento deve ser processado ou não. As expressões de predicado são limitadas a 3.000 caracteres, o que limita os argumentos de cadeia de caracteres.

event_field_name

Aplica-se a: SQL Server 2012 (11.x) e versões posteriores.

É o nome do campo de evento que identifica a origem do predicado. Campos de auditoria são descritos em sys.fn_get_audit_file (Transact-SQL). Todos os campos podem ser filtrados, exceto file_name, audit_file_offset e event_time.

Observação

Embora os campos action_id e class_type sejam do tipo varchar em sys.fn_get_audit_file, eles podem ser usados somente com números quando são uma origem de predicado para a filtragem. Para obter a lista de valores a serem usados com class_type, execute a seguinte consulta:

SELECT spt.[name], spt.[number]
FROM   [master].[dbo].[spt_values] spt
WHERE  spt.[type] = N'EOD'
ORDER BY spt.[name];

número

Aplica-se a: SQL Server 2012 (11.x) e versões posteriores.

É qualquer tipo numérico, incluindo decimal. Limitações são a falta de memória física disponível ou um número que é muito grande para ser representado como um inteiro de 64 bits.

'string'

Aplica-se a: SQL Server 2012 (11.x) e versões posteriores.

Uma cadeia de caracteres ANSI ou Unicode, conforme requerido pela comparação de predicado. Nenhuma conversão de tipo de cadeia de caracteres implícita é executada para as funções de comparação de predicado. A transferência do tipo incorreto resulta em um erro.

Comentários

Quando uma auditoria de servidor é criada, ela permanece em um estado desabilitado.

A instrução CREATE SERVER AUDIT está no escopo de uma transação. Se a transação for revertida, a instrução também será revertida.

Permissões

Para criar, alterar ou descartar uma auditoria de servidor, as entidades de segurança devem ter a permissão ALTER ANY SERVER AUDIT ou CONTROL SERVER.

Quando você está salvando informações de auditoria em um arquivo, para ajudar a impedir falsificação, você pode restringir o acesso ao local do arquivo.

Exemplos

R. Criar uma auditoria de servidor com um arquivo de destino

O exemplo a seguir cria uma auditoria de servidor denominada HIPAA_Audit com um arquivo binário como o destino e nenhuma opção.

CREATE SERVER AUDIT HIPAA_Audit
    TO FILE ( FILEPATH ='\\SQLPROD_1\Audit\' );

B. Criar uma auditoria de servidor com um destino de log de aplicativos do Windows com opções

O exemplo a seguir cria uma auditoria de servidor denominada HIPAA_Audit com o conjunto de destino para o log de aplicativos do Windows. A fila é gravada a cada segundo e o mecanismo do SQL Server é desligado em caso de falha.

CREATE SERVER AUDIT HIPAA_Audit
    TO APPLICATION_LOG
    WITH ( QUEUE_DELAY = 1000,  ON_FAILURE = SHUTDOWN);

C. Criar uma auditoria de servidor que contém uma cláusula WHERE

O exemplo a seguir cria um banco de dados, um esquema e duas tabelas para o exemplo. A tabela chamada DataSchema.SensitiveData contém dados confidenciais e o acesso à tabela deve ser registrado na auditoria. A tabela denominada DataSchema.GeneralData não contém dados confidenciais. A especificação de auditoria de banco de dados audita acesso a todos os objetos no esquema DataSchema. A auditoria de servidor é criada com uma cláusula WHERE que limita a auditoria de servidor apenas à tabela SensitiveData. A auditoria de servidor supõe que exista uma pasta de auditoria em C:\SQLAudit.

CREATE DATABASE TestDB;
GO
USE TestDB;
GO
CREATE SCHEMA DataSchema;
GO
CREATE TABLE DataSchema.GeneralData (ID int PRIMARY KEY, DataField varchar(50) NOT NULL);
GO
CREATE TABLE DataSchema.SensitiveData (ID int PRIMARY KEY, DataField varchar(50) NOT NULL);
GO
-- Create the server audit in the master database
USE master;
GO
CREATE SERVER AUDIT AuditDataAccess
    TO FILE ( FILEPATH ='C:\SQLAudit\' )
    WHERE object_name = 'SensitiveData' ;
GO
ALTER SERVER AUDIT AuditDataAccess WITH (STATE = ON);
GO
-- Create the database audit specification in the TestDB database
USE TestDB;
GO
CREATE DATABASE AUDIT SPECIFICATION [FilterForSensitiveData]
FOR SERVER AUDIT [AuditDataAccess]
ADD (SELECT ON SCHEMA::[DataSchema] BY [public])
WITH (STATE = ON);
GO
-- Trigger the audit event by selecting from tables
SELECT ID, DataField FROM DataSchema.GeneralData;
SELECT ID, DataField FROM DataSchema.SensitiveData;
GO
-- Check the audit for the filtered content
SELECT * FROM fn_get_audit_file('C:\SQLAudit\AuditDataAccess_*.sqlaudit',default,default);
GO