CREATE SERVER AUDIT (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL Managed Instance

Membuat objek audit server menggunakan Audit SQL Server. Untuk informasi selengkapnya, lihat Audit SQL Server (Mesin Database).

Konvensi sintaks transact-SQL

Sintaksis

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 ' }

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

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

Menentukan lokasi target audit. Opsinya adalah file biner, log Aplikasi Windows, atau log Keamanan Windows. SQL Server tidak dapat menulis ke log Keamanan Windows tanpa mengonfigurasi pengaturan tambahan di Windows. Untuk informasi selengkapnya, lihat Menulis peristiwa Audit SQL Server ke log Keamanan.

URL Target tidak didukung untuk SQL Server.

Penting

Di Azure SQL Managed Instance, Audit SQL berfungsi di tingkat server. Lokasi hanya dapat berupa URL atau EXTERNAL_MONITOR.

FILEPATH = 'os_file_path'

Jalur log audit. Nama file dihasilkan berdasarkan nama audit dan GUID audit. Jika jalur ini tidak valid, audit tidak dibuat.

FILEPATH target tidak didukung untuk Azure SQL Managed Instance. Anda perlu menggunakan PATH sebagai gantinya.

MAXSIZE = max_size

Menentukan ukuran maksimum tempat file audit dapat tumbuh. Nilai max_size harus berupa bilangan bulat diikuti oleh MB, GB, TB, atau UNLIMITED. Ukuran minimum yang dapat Anda tentukan untuk max_size adalah 2 MB dan maksimumnya adalah 2.147.483.647 TB. Ketika UNLIMITED ditentukan, file bertambah sampai disk penuh. (0 juga menunjukkan UNLIMITED.) Menentukan nilai yang lebih rendah dari 2 MB menimbulkan kesalahan MSG_MAXSIZE_TOO_SMALL. Nilai defaultnya adalah UNLIMITED.

MAXSIZE target tidak didukung untuk Azure SQL Managed Instance.

MAX_ROLLOVER_FILES = { bilangan bulat | UNLIMITED }

Menentukan jumlah maksimum file yang akan dipertahankan dalam sistem file selain file saat ini. Nilai MAX_ROLLOVER_FILES harus berupa bilangan bulat atau UNLIMITED. Nilai defaultnya adalah UNLIMITED. Parameter ini dievaluasi setiap kali audit dimulai ulang (yang dapat terjadi ketika instans Mesin Database dimulai ulang atau ketika audit dimatikan dan kemudian aktif lagi) atau ketika file baru diperlukan karena MAXSIZE tercapai. Ketika MAX_ROLLOVER_FILES dievaluasi, jika jumlah file melebihi MAX_ROLLOVER_FILES pengaturan, file terlama akan dihapus. Akibatnya, ketika pengaturan MAX_ROLLOVER_FILES adalah 0 file baru dibuat setiap kali MAX_ROLLOVER_FILES pengaturan dievaluasi. Hanya satu file yang dihapus secara otomatis saat MAX_ROLLOVER_FILES pengaturan dievaluasi, jadi ketika nilai MAX_ROLLOVER_FILES menurun, jumlah file tidak menyusut kecuali file lama dihapus secara manual. Jumlah maksimum file yang dapat ditentukan adalah 2.147.483.647.

MAX_ROLLOVER_FILES tidak didukung untuk Azure SQL Managed Instance.

MAX_FILES = bilangan bulat

Berlaku untuk: SQL Server 2012 (11.x) dan yang lebih baru.

Menentukan jumlah maksimum file audit yang dapat dibuat. Tidak bergulir ke file pertama saat batas tercapai. MAX_FILES Ketika batas tercapai, tindakan apa pun yang menyebabkan peristiwa audit tambahan dihasilkan, gagal dengan kesalahan.

RESERVE_DISK_SPACE = { AKTIF | NONAKTIF }

Opsi ini melakukan pra-alokasi file pada disk ke MAXSIZE nilai . Ini hanya berlaku jika MAXSIZE tidak sama dengan UNLIMITED. Nilai defaultnya adalah OFF.

RESERVE_DISK_SPACE target tidak didukung untuk Azure SQL Managed Instance.

QUEUE_DELAY = bilangan bulat

Menentukan waktu, dalam milidetik, yang dapat berlalu sebelum tindakan audit dipaksa untuk diproses. Nilai 0 menunjukkan pengiriman sinkron. Nilai penundaan kueri minimum yang dapat diatur adalah 1000 (1 detik), yang merupakan default. Maksimumnya adalah 2147483647 (2.147.483,647 detik atau 24 hari, 20 jam, 31 menit, 23,647 detik). Menentukan angka yang tidak valid menimbulkan MSG_INVALID_QUEUE_DELAY kesalahan.

ON_FAILURE = { LANJUTKAN | MATIKAN | FAIL_OPERATION }

Menunjukkan apakah instans yang menulis ke target harus gagal, melanjutkan, atau menghentikan SQL Server jika target tidak dapat menulis ke log audit. Nilai defaultnya adalah CONTINUE.

LANJUTKAN

Operasi SQL Server berlanjut. Catatan audit tidak dipertahankan. Audit terus mencoba mencatat peristiwa dan melanjutkan jika kondisi kegagalan diselesaikan. Memilih opsi lanjutkan dapat memungkinkan aktivitas yang tidak diaudit, yang dapat melanggar kebijakan keamanan Anda. Gunakan opsi ini, saat melanjutkan operasi Mesin Database lebih penting daripada mempertahankan audit lengkap.

SHUTDOWN

Memaksa instans SQL Server dimatikan, jika SQL Server gagal menulis data ke target audit karena alasan apa pun. Login yang CREATE SERVER AUDIT menjalankan pernyataan harus memiliki SHUTDOWN izin dalam SQL Server. Perilaku matikan tetap ada bahkan jika SHUTDOWN izin kemudian dicabut dari proses masuk yang dijalankan. Jika pengguna tidak memiliki izin ini, maka pernyataan gagal dan audit tidak dibuat. Gunakan opsi ketika kegagalan audit dapat membahayakan keamanan atau integritas sistem. Untuk informasi selengkapnya, lihat SHUTDOWN.

FAIL_OPERATION

Berlaku untuk: SQL Server 2012 (11.x) dan yang lebih baru.

Tindakan database gagal jika menyebabkan peristiwa yang diaudit. Tindakan, yang tidak menyebabkan peristiwa yang diaudit dapat dilanjutkan, tetapi tidak ada peristiwa yang diaudit yang dapat terjadi. Audit terus mencoba mencatat peristiwa dan melanjutkan jika kondisi kegagalan diselesaikan. Gunakan opsi ini saat mempertahankan audit lengkap lebih penting daripada akses penuh ke Mesin Database.

AUDIT_GUID = uniqueidentifier

Untuk mendukung skenario seperti pencerminan database, audit memerlukan GUID tertentu yang cocok dengan GUID yang ditemukan dalam database cermin. GUID tidak dapat dimodifikasi setelah audit dibuat.

OPERATOR_AUDIT

Berlaku untuk: Azure SQL Managed Instance saja.

Menunjukkan apakah audit menangkap operasi teknisi dukungan Microsoft saat mereka perlu mengakses server Anda selama permintaan dukungan.

predicate_expression

Berlaku untuk: SQL Server 2012 (11.x) dan versi yang lebih baru.

Menentukan ekspresi predikat yang digunakan untuk menentukan apakah suatu peristiwa harus diproses atau tidak. Ekspresi predikat dibatasi hingga 3.000 karakter, yang membatasi argumen string.

event_field_name

Berlaku untuk: SQL Server 2012 (11.x) dan versi yang lebih baru.

Nama bidang peristiwa yang mengidentifikasi sumber predikat. Bidang audit dijelaskan dalam sys.fn_get_audit_file (Transact-SQL). Semua bidang dapat difilter kecuali file_name, , audit_file_offsetdan event_time.

Catatan

action_id Meskipun bidang dan class_type berjenis varchar di sys.fn_get_audit_file, bidang hanya dapat digunakan dengan angka ketika merupakan sumber predikat untuk pemfilteran. Untuk mendapatkan daftar nilai yang akan digunakan dengan class_type, jalankan kueri berikut:

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

number

Berlaku untuk: SQL Server 2012 (11.x) dan versi yang lebih baru.

Jenis numerik apa pun termasuk desimal. Batasan adalah kurangnya memori fisik yang tersedia atau angka yang terlalu besar untuk direpresentasikan sebagai bilangan bulat 64-bit.

'string'

Berlaku untuk: SQL Server 2012 (11.x) dan versi yang lebih baru.

Baik string ANSI atau Unicode sebagaimana diperlukan oleh perbandingan predikat. Tidak ada konversi jenis string implisit yang dilakukan untuk predikat membandingkan fungsi. Meneruskan jenis yang salah menghasilkan kesalahan.

Keterangan

Saat audit server dibuat, audit server dalam status dinonaktifkan.

Pernyataan CREATE SERVER AUDIT tersebut berada dalam cakupan transaksi. Jika transaksi digulung balik, pernyataan juga digulung balik.

Izin

Untuk membuat, mengubah, atau menghilangkan audit server, prinsipal memerlukan ALTER ANY SERVER AUDIT izin atau CONTROL SERVER .

Saat Anda menyimpan informasi audit ke file, untuk membantu mencegah perubahan, batasi akses ke lokasi file.

Contoh

J. Membuat audit server dengan target file

Contoh berikut membuat audit server yang disebut HIPAA_Audit dengan file biner sebagai target dan tanpa opsi.

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

B. Membuat audit server dengan target log Aplikasi Windows dengan opsi

Contoh berikut membuat audit server yang disebut HIPAA_Audit dengan target yang ditetapkan untuk log Aplikasi Windows. Antrean ditulis setiap detik dan mematikan mesin SQL Server saat gagal.

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

C. Membuat audit server yang berisi klausa WHERE

Contoh berikut membuat database, skema, dan dua tabel untuk contoh. Tabel bernama DataSchema.SensitiveData berisi data rahasia dan akses ke tabel harus direkam dalam audit. Tabel bernama DataSchema.GeneralData tidak berisi data rahasia. Spesifikasi audit database mengaudit akses ke semua objek dalam DataSchema skema. Audit server dibuat dengan klausa WHERE yang membatasi audit server hanya untuk SensitiveData tabel. Audit server berasumsi folder audit ada di 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