CREATE SERVER AUDIT (Transact-SQL)
使用 SQL Server Audit 來建立伺服器稽核物件。 如需詳細資訊,請參閱<SQL Server Audit (Database Engine)>。
適用於:SQL Server (SQL Server 2008 至目前版本)。 |
語法
CREATE SERVER AUDIT audit_name
{
TO { [ FILE (<file_options> [ , ...n ] ) ] | APPLICATION_LOG | SECURITY_LOG }
[ 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 ]
}
<predicate_expression>::=
{
[NOT ] <predicate_factor>
[ { AND | OR } [NOT ] { <predicate_factor> } ]
[,...n ]
}
<predicate_factor>::=
event_field_name { = | < > | ! = | > | > = | < | < = } { number | ' string ' }
引數
TO { FILE | APPLICATION_LOG | SECURITY_LOG }
判斷稽核目標的位置。 選項有二進位檔案、Windows 應用程式記錄檔或 Windows 安全性記錄檔。 如果沒有在 Windows 中設定其他設定,SQL Server 就無法寫入 Windows 安全性記錄檔。 如需詳細資訊,請參閱<將 SQL Server Audit 事件寫入安全性記錄檔>。FILEPATH ='os_file_path'
稽核記錄檔的路徑。 檔案名稱是根據稽核名稱和稽核 GUID 所產生。MAXSIZE = { max_size }
指定稽核檔案所能成長的大小上限。 max_size 值必須是整數,而且後面緊接著 MB、GB、TB 或 UNLIMITED。 您可以為 max_size 指定的大小下限為 2 MB,而上限則為 2,147,483,647 TB。 指定了 UNLIMITED 時,檔案會成長到磁碟已滿為止。 (0 也表示 UNLIMITED。)指定低於 2 MB 的值將會引發 MSG_MAXSIZE_TOO_SMALL 錯誤。 預設值為 UNLIMITED。MAX_ROLLOVER_FILES ={ integer | UNLIMITED }
除了目前的檔案以外,指定要保留在檔案系統中的檔案數目上限。 MAX_ROLLOVER_FILES 值必須是整數或 UNLIMITED。 預設值為 UNLIMITED。 每當稽核重新啟動 (當 Database Engine 的執行個體重新啟動或者稽核先關閉然後再次開啟時,就可能會發生此情況) 或者由於達到 MAXSIZE 而需要新的檔案時,系統就會評估此參數。 評估 MAX_ROLLOVER_FILES 時,如果檔案的數目超過 MAX_ROLLOVER_FILES 設定,系統就會刪除最舊的檔案。 因此,如果 MAX_ROLLOVER_FILES 的設定為 0,每次評估 MAX_ROLLOVER_FILES 設定時,系統都會建立新的檔案。 評估 MAX_ROLLOVER_FILES 設定時,系統只會自動刪除一個檔案,所以當您降低 MAX_ROLLOVER_FILES 的值時,除非手動刪除舊的檔案,否則檔案的數目將不會縮減。 可以指定的檔案數量上限為 2,147,483,647。MAX_FILES =integer
適用於:SQL Server 2012 至 SQL Server 2014。
指定可建立的最大稽核檔案數目。 達到此限制時,不會換用第一個檔案。 達到 MAX_FILES 限制時,導致系統產生其他稽核事件的任何動作都將失敗並發生錯誤。
RESERVE_DISK_SPACE = { ON | OFF }
這個選項會在磁碟上將檔案預先配置為 MAXSIZE 值。 只有當 MAXSIZE 不等於 UNLIMITED 時,才會套用它。 預設值是 OFF。QUEUE_DELAY =integer
判斷在強制處理稽核動作之前經過的時間長度 (以毫秒為單位)。 值為 0 表示同步傳遞。 可設定的最小查詢延遲值為 1000 (1 秒),這是預設值。 最大值為 2,147,483,647 (2,147,483.647 秒鐘或是 24 天 20 小時 31 分鐘又 23.647 秒鐘)。 指定無效的數字將會引發 MSG_INVALID_QUEUE_DELAY 錯誤。ON_FAILURE = { CONTINUE | SHUTDOWN | FAIL_OPERATION }
指出如果目標無法寫入稽核記錄,則寫入目標的執行個體應該失敗、繼續還是停止 SQL Server。 預設值為 CONTINUE。CONTINUE
SQL Server 作業繼續進行。 系統不會保留稽核記錄。 稽核會繼續嘗試記錄事件,而且如果失敗狀況已解決,就會恢復稽核。 選取 CONTINUE 選項會允許可能違反安全性原則的未稽核活動。 當繼續進行 Database Engine 作業比維持完整稽核更重要時,請使用此選項。SHUTDOWN
當寫入目標的伺服器執行個體無法將資料寫入稽核目標時,強制伺服器關閉。 發出此內容的登入必須具有 SHUTDOWN 權限。 如果登入沒有此權限,這個功能將會失敗,而且將會引發錯誤訊息。 不會發生稽核的事件。 當稽核失敗可能危害系統的安全性或完整性時,請使用此選項。FAIL_OPERATION
如果資料庫動作導致稽核的事件,這些動作就會失敗。 雖然不會導致稽核事件的動作可繼續進行,不過也無法發生稽核的事件。 稽核會繼續嘗試記錄事件,而且如果失敗狀況已解決,就會恢復稽核。 當維持完整稽核比 Database Engine 的完整存取權更重要時,請使用此選項。
AUDIT_GUID =uniqueidentifier
若要支援類似資料庫鏡像等案例,稽核需要一個特定的 GUID,而且此 GUID 要符合鏡像資料庫中找到的 GUID。 當建立稽核之後,就無法再修改 GUID。predicate_expression
適用於:SQL Server 2012 至 SQL Server 2014。
指定用來判斷是否應該處理事件的述詞運算式。 述詞運算式限制為 3000 個字元,這會限制字串引數。
event_field_name
適用於:SQL Server 2012 至 SQL Server 2014。
這是識別述詞來源之事件欄位的名稱。 <sys.fn_get_audit_file (Transact-SQL)>詳細描述了稽核欄位。 除了 file_name 和 audit_file_offset 以外的所有欄位都可進行稽核。
number
適用於:SQL Server 2012 至 SQL Server 2014。
這是包含 decimal 的任何數值類型。 限制為缺少可用的實體記憶體,或是數字太大而不能表示為 64 位元整數。
' string '
適用於:SQL Server 2012 至 SQL Server 2014。
ANSI 或 Unicode 字串 (依述詞比較的需求而定)。 不會針對述詞比較函數執行隱含字串類型轉換。 傳遞錯誤的類型會產生錯誤。
備註
當建立伺服器稽核之後,它就會處於停用狀態。
CREATE SERVER AUDIT 陳述式位於交易的範圍內。 如果回復交易,也會回復此陳述式。
權限
若要建立、更改或卸除伺服器稽核,主體需要使用 ALTER ANY SERVER AUDIT 或 CONTROL SERVER 權限。
當您將稽核資訊儲存到檔案時,為了避免遭到篡改,您可以限制對檔案位置的存取:
範例
A.建立具有檔案目標的伺服器稽核
下列範例會建立稱為 HIPPA_Audit 的伺服器稽核,並將二進位檔案當做目標而且不指定任何選項。
CREATE SERVER AUDIT HIPAA_Audit
TO FILE ( FILEPATH ='\\SQLPROD_1\Audit\' );
B.建立具有 Windows 應用程式記錄檔目標 (含選項) 的伺服器稽核
下列範例會建立稱為 HIPPA_Audit 的伺服器稽核,並包含針對 Windows 應用程式記錄檔所設定的目標。 每秒鐘都會寫入此佇列,並在失敗時關閉 SQL Server 引擎。
CREATE SERVER AUDIT HIPAA_Audit
TO APPLICATION_LOG
WITH ( QUEUE_DELAY = 1000, ON_FAILURE = SHUTDOWN);
C.建立包含 WHERE 子句的伺服器稽核
下列範例會建立資料庫、結構描述和兩個範例資料表。 名為 DataSchema.SensitiveData 的資料表將包含機密資料,而且此資料表的存取權必須記錄在稽核中。 名為 DataSchema.GeneralData 的資料表則不包含機密資料。 資料庫稽核規格會稽核 DataSchema 結構描述中所有物件的存取權。 伺服器稽核是使用 WHERE 子句所建立,這個子句會將伺服器稽核限制為只有 SensitiveData 資料表。 伺服器稽核會假設稽核資料夾存在 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
請參閱
參考
ALTER SERVER AUDIT (Transact-SQL)
DROP SERVER AUDIT (Transact-SQL)
CREATE SERVER AUDIT SPECIFICATION (Transact-SQL)
ALTER SERVER AUDIT SPECIFICATION (Transact-SQL)
DROP SERVER AUDIT SPECIFICATION (Transact-SQL)
CREATE DATABASE AUDIT SPECIFICATION (Transact-SQL)
ALTER DATABASE AUDIT SPECIFICATION (Transact-SQL)
DROP DATABASE AUDIT SPECIFICATION (Transact-SQL)
ALTER AUTHORIZATION (Transact-SQL)
sys.fn_get_audit_file (Transact-SQL)
sys.server_audits (Transact-SQL)
sys.server_file_audits (Transact-SQL)
sys.server_audit_specifications (Transact-SQL)
sys.server_audit_specification_details (Transact-SQL)
sys.database_audit_specifications (Transact-SQL)
sys.database_audit_specification_details (Transact-SQL)
sys.dm_server_audit_status (Transact-SQL)
sys.dm_audit_actions (Transact-SQL)
sys.dm_audit_class_type_map (Transact-SQL)