sys.fn_get_audit_file_v2 (Transact-SQL)

Gilt für: Azure SQL-Datenbank

Die sys.fn_get_audit_file_v2 Systemfunktion in Azure SQL-Datenbank wurde entwickelt, um Überwachungsprotokolldaten mit verbesserter Effizienz im Vergleich zu seinem Vorgänger abzurufen. sys.fn_get_audit_file Die Funktion führt zeitbasierte Filterung auf Datei- und Datensatzebene ein und bietet erhebliche Leistungsverbesserungen, insbesondere für Abfragen, die auf bestimmte Zeitbereiche abzielen.

Wichtig

sys.fn_get_audit_file_v2wird derzeit nur für Azure SQL-Datenbank unterstützt.

Gibt Informationen aus einer Überwachungsdatei zurück, die von einer Serverüberwachung in Azure SQL-Datenbank erstellt wurde. Weitere Informationen finden Sie unter SQL Server Audit (Datenbank-Engine).

Transact-SQL-Syntaxkonventionen

Syntax

fn_get_audit_file_v2 ( file_pattern
    , { default | initial_file_name | NULL }
    , { default | audit_record_offset | NULL }
    , { default | start time | NULL }
    , { default | end time | NULL } )

Argumente

file_pattern

Gibt das Verzeichnis oder den Pfad und den Dateinamen für den zu lesenden Überwachungsdateisatz an. file_pattern ist nvarchar(260).

Durch Übergeben eines Pfads ohne Dateinamenmuster wird ein Fehler generiert.

Dieses Argument wird verwendet, um eine BLOB-URL (einschließlich des Speicherendpunkts und Containers) anzugeben. Obwohl ein Sternchen nicht unterstützt wird, können Sie ein Teilnamenpräfix (Blob) (anstelle des vollständigen Blobnamens) verwenden, um mehrere Dateien (Blobs) zu sammeln, die mit diesem Präfix beginnen. Zum Beispiel:

  • <Storage_endpoint>/<Container>/<ServerName>/<DatabaseName>/ – sammelt alle Überwachungsdateien (Blobs) für die jeweilige Datenbank.

  • <Storage_endpoint>/<Container>/<ServerName>/<DatabaseName>/<AuditName>/<CreationDate>/<FileName>.xel - sammelt eine bestimmte Überwachungsdatei (BLOB).

initial_file_name

Gibt den Pfad und den Namen einer bestimmten Datei im Überwachungsdateisatz an, von der an die Überwachungsdatensätze gelesen werden sollen. initial_file_name ist nvarchar(260).

Das argument initial_file_name muss gültige Einträge enthalten oder entweder den Wert oder NULL den default Wert enthalten.

audit_record_offset

Gibt einen bekannten Speicherort mit der für die initial_file_name angegebenen Datei an. Wenn dieses Argument verwendet wird, beginnt die Funktion mit dem Lesen am ersten Datensatz des Puffers unmittelbar nach dem angegebenen Offset.

Das Argument audit_record_offset muss gültige Einträge enthalten oder entweder den Wert oder NULL den default Wert enthalten. audit_record_offset ist groß.

start_time

Die Startzeit zum Filtern der Protokolle. Datensätze vor dieser Zeit werden ausgeschlossen.

end_time

Die Endzeit zum Filtern der Protokolle. Datensätze nach dieser Zeit werden ausgeschlossen.

Zurückgegebene Tabelle

Die folgende Tabelle beschreibt den von dieser Funktion zurückgegebenen Inhalt der Überwachungsdatei.

Spaltenname type Beschreibung
event_time datetime2 Datum und Uhrzeit, zu dem die überprüfbare Aktion ausgelöst wird. Lässt keine NULL-Werte zu.
sequence_number int Hält die Reihenfolge der Datensätze innerhalb eines einzelnen Überwachungsdatensatzes fest, der zu groß für den Schreibpuffer für Überwachungen ist. Lässt keine NULL-Werte zu.
action_id varchar(4) ID der Aktion. Lässt keine NULL-Werte zu.
succeeded bit Gibt an, ob die Aktion, die das Ereignis ausgelöst hat, erfolgreich war Lässt keine NULL-Werte zu. Für alle Ereignisse außer Anmeldeereignisse meldet dies nur, ob die Berechtigungsüberprüfung erfolgreich war oder fehlgeschlagen ist, nicht der Vorgang.

1 = Erfolg
0 = fehler
permission_bitmask varbinary(16) In einigen Aktionen ist diese Bitmaske die Berechtigungen, die erteilt, verweigert oder widerrufen wurden.
is_column_permission bit Flag, das angibt, ob die Berechtigung auf Benutzerebene erteilt wurde Lässt keine NULL-Werte zu. Gibt zurück0, wenn das = permission_bitmask0 .

1 = True
0 = false
session_id smallint Die ID der Sitzung, in der das Ereignis aufgetreten ist. Lässt keine NULL-Werte zu.
server_principal_id int ID des Anmeldekontexts, in dem die Aktion ausgeführt wird. Lässt keine NULL-Werte zu.
database_principal_id int ID des Datenbankbenutzerkontexts, in dem die Aktion ausgeführt wird. Lässt keine NULL-Werte zu. Gibt zurück 0 , wenn dies nicht zutrifft. Zum Beispiel bei einem Servervorgang.
target_server_principal_id int Serverprinzipal, für den der GRANT//DENYREVOKE Vorgang ausgeführt wird. Lässt keine NULL-Werte zu. Gibt zurück 0 , falls nicht zutreffend.
target_database_principal_id int Der Datenbankprinzipal, für den der GRANT//DENYREVOKE Vorgang ausgeführt wird. Lässt keine NULL-Werte zu. Gibt zurück 0 , falls nicht zutreffend.
object_id int Die ID der Entität, für die die Überwachung aufgetreten ist, einschließlich der folgenden Objekte:

- Serverobjekte
-Datenbanken
- Datenbankobjekte
- Schemaobjekte

Lässt keine NULL-Werte zu. Gibt zurück 0 , ob es sich bei der Entität um den Server selbst handelt oder wenn die Überwachung nicht auf Objektebene ausgeführt wird. Zum Beispiel bei der Authentifizierung.
class_type varchar(2) Der Typ der überwachbaren Entität, bei der die Überwachung auftritt. Lässt keine NULL-Werte zu.
session_server_principal_name sysname Serverprinzipal für Sitzung. NULL-Werte sind zulässig. Gibt die Identität der ursprünglichen Anmeldung zurück, die mit der Instanz des Datenbank-Engine verbunden war, falls explizite oder implizite Kontextoptionen vorhanden waren.
server_principal_name sysname Aktuelle Anmeldung. NULL-Werte sind zulässig.
server_principal_sid varbinary Aktuelle Anmeldungs-SID. NULL-Werte sind zulässig.
database_principal_name sysname Aktueller Benutzer. NULL-Werte sind zulässig. Gibt zurück NULL , wenn sie nicht verfügbar ist.
target_server_principal_name sysname Zielanmeldung der Aktion NULL-Werte sind zulässig. Gibt zurück NULL , falls nicht zutreffend.
target_server_principal_sid varbinary SID der Zielanmeldung NULL-Werte sind zulässig. Gibt zurück NULL , falls nicht zutreffend.
target_database_principal_name sysname Zielbenutzer der Aktion NULL-Werte sind zulässig. Gibt zurück NULL , falls nicht zutreffend.
server_instance_name sysname Der Name der Serverinstanz, in der die Überwachung aufgetreten ist. Das Standardformat server\instance wird verwendet.
database_name sysname Der Datenbankkontext, in dem die Aktion aufgetreten ist. NULL-Werte sind zulässig. Gibt NULL für Audits auf Serverebene zurück.
schema_name sysname Schemakontext, in dem die Aktion durchgeführt wurde NULL-Werte sind zulässig. Gibt NULL für Audits außerhalb eines Schemas zurück.
object_name sysname Der Name der Entität, für die die Überwachung aufgetreten ist, einschließlich der folgenden Objekte:

- Serverobjekte
-Datenbanken
- Datenbankobjekte
- Schemaobjekte

NULL-Werte sind zulässig. Gibt zurück NULL , ob es sich bei der Entität um den Server selbst handelt oder wenn die Überwachung nicht auf Objektebene ausgeführt wird. Zum Beispiel bei der Authentifizierung.
statement nvarchar(4000) Transact-SQL-Anweisung, falls vorhanden. NULL-Werte sind zulässig. Gibt zurück NULL , falls nicht zutreffend.
additional_information nvarchar(4000) Eindeutige Informationen, die nur für ein einzelnes Ereignis gelten, werden als XML zurückgegeben. Einige überprüfbare Aktionen enthalten diese Art von Informationen.

Eine Ebene des T-SQL-Stapels wird im XML-Format für Aktionen angezeigt, denen der T-SQL-Stapel zugeordnet ist. Das XML-Format lautet: <tsql_stack><frame nest_level = '%u' database_name = '%.*s' schema_name = '%.*s' object_name = '%.*s' /></tsql_stack>

frame nest_level gibt die aktuelle Schachtelungsebene des Frames an. Der Modulname wird im dreiteiligen Format (database_name, schema_nameund object_name) dargestellt. Der Modulname wird analysiert, um ungültige XML-Zeichen wie <, >, , /. _x Sie werden als _xHHHH_. Das HHHH steht für den vierstelligen hexadezimalen UCS-2-Code für das Zeichen. NULL-Werte sind zulässig. Gibt zurück NULL , wenn keine zusätzlichen Informationen vom Ereignis gemeldet werden.
file_name varchar(260) Der Pfad und der Name der Überwachungsprotokolldatei, aus der der Datensatz stammt. Lässt keine NULL-Werte zu.
audit_file_offset bigint Der Pufferoffset in der Datei, die den Überwachungsdatensatz enthält. Lässt keine NULL-Werte zu.

Gilt nur für: NUR SQL Server
user_defined_event_id smallint Benutzerdefinierte Ereignis-ID, die als Argument übergeben wird sp_audit_write. NULL für Systemereignisse (Standard) und ungleich Null für benutzerdefinierte Ereignisse. Weitere Informationen finden Sie unter sp_audit_write (Transact-SQL).

Gilt für: SQL Server 2012 (11.x) und höher, Azure SQL-Datenbank und SQL-verwaltete Instanz
user_defined_information nvarchar(4000) Wird verwendet, um zusätzliche Informationen aufzuzeichnen, die der Benutzer mithilfe der sp_audit_write gespeicherten Prozedur im Überwachungsprotokoll aufzeichnen möchte.

Gilt für: SQL Server 2012 (11.x) und höhere Versionen, Azure SQL-Datenbank und SQL-verwaltete Instanz
audit_schema_version int Immer 1.
sequence_group_id varbinary Eindeutiger -Bezeichner.

Gilt für: SQL Server 2016 (13.x) und höhere Versionen
transaction_id bigint Eindeutiger Bezeichner zum Identifizieren mehrerer Überwachungsereignisse in einer Transaktion.

Gilt für: SQL Server 2016 (13.x) und höhere Versionen
client_ip nvarchar(128) Quell-IP der Clientanwendung.

Gilt für: SQL Server 2017 (14.x) und höhere Versionen sowie Azure SQL-Datenbank
application_name nvarchar(128) Name der Clientanwendung, die die Anweisung ausgeführt hat, die das Überwachungsereignis verursacht hat.

Gilt für: SQL Server 2017 (14.x) und höhere Versionen sowie Azure SQL-Datenbank
duration_milliseconds bigint Dauer der Abfrageausführung in Millisekunden.

Gilt für: Azure SQL-Datenbank und SQL-verwaltete Instanz
response_rows bigint Die Anzahl der zeilen, die im Resultset zurückgegeben wurden.

Gilt für: Azure SQL-Datenbank und SQL-verwaltete Instanz
affected_rows bigint Die Anzahl der zeilen, die von der ausgeführten Anweisung betroffen sind.

Gilt nur für: Azure SQL-Datenbank
connection_id uniqueidentifier ID der Verbindung auf dem Server.

Gilt für: Azure SQL-Datenbank und SQL-verwaltete Instanz
data_sensitivity_information nvarchar(4000) Informationstypen und Vertraulichkeitsbezeichnungen, die von der überwachten Abfrage zurückgegeben werden (je nach klassifizierter Spalte in der Datenbank) Erfahren Sie mehr über Azure SQL-Datenbank Ermitteln und Klassifizieren von Daten.

Gilt nur für: Azure SQL-Datenbank
host_name nvarchar(128) Hostname des Clientcomputers.
session_context nvarchar(4000) Die Schlüsselwertpaare, die Teil des aktuellen Sitzungskontexts sind.
client_tls_version bigint Vom Client unterstützte Mindest-TLS-Version.
client_tls_version_name nvarchar(128) Vom Client unterstützte Mindest-TLS-Version.
database_transaction_id bigint Transaktions-ID der aktuellen Transaktion in der aktuellen Sitzung.
ledger_start_sequence_number bigint Die Sequenznummer eines Vorgangs innerhalb einer Transaktion, mit der eine Zeilenversion erstellt wurde.

Gilt nur für: Azure SQL-Datenbank
external_policy_permissions_checked nvarchar(4000) Informationen im Zusammenhang mit der Überprüfung der externen Autorisierungsberechtigung, wenn ein Überwachungsereignis generiert wird, und purview externe Autorisierungsrichtlinien werden ausgewertet.

Gilt nur für: Azure SQL-Datenbank
obo_middle_tier_app_id varchar(120) Die Anwendungs-ID der mittleren Anwendung, die eine Verbindung mit Azure SQL-Datenbank mithilfe des Zugriffs im Auftrag von (OBO) herstellt. NULL-Werte sind zulässig. Gibt zurück NULL , wenn die Anforderung nicht über den OBO-Zugriff erfolgt.

Gilt nur für: Azure SQL-Datenbank
is_local_secondary_replica bit True wenn der Überwachungsdatensatz aus einem schreibgeschützten lokalen sekundären Replikat stammt, False andernfalls.

Gilt nur für: Azure SQL-Datenbank

Verbesserungen gegenüber sys.fn_get_audit_file

Die sys.fn_get_audit_file_v2 Funktion bietet eine erhebliche Verbesserung gegenüber den älteren sys.fn_get_audit_file durch die Einführung einer effizienten zeitbasierten Filterung auf Datei- und Datensatzebene. Diese Optimierung eignet sich besonders für Abfragen, die auf kleinere Zeitbereiche ausgerichtet sind, und kann die Leistung in Umgebungen mit mehreren Datenbanken gewährleisten.

Filterung auf dualer Ebene

Filterung auf Dateiebene: Die Funktion filtert zuerst die Dateien basierend auf dem angegebenen Zeitraum, wodurch die Anzahl der dateien reduziert wird, die gescannt werden müssen.

Filterung auf Datensatzebene: Anschließend wird die Filterung innerhalb der ausgewählten Dateien angewendet, um nur die relevanten Datensätze zu extrahieren.

Leistungsverbesserungen

Die Leistungsverbesserungen hängen in erster Linie von der Rolloverzeit der BLOB-Dateien und dem abgefragten Zeitraum ab. Angenommen, eine einheitliche Verteilung von Überwachungsdatensätzen:

  • Reduzierte Auslastung: Durch die Minimierung der Anzahl der zu scannenden Dateien und Datensätze reduziert sie die Auslastung des Systems und verbessert die Abfrageantwortzeiten.

  • Skalierbarkeit: Trägt dazu bei, die Leistung aufrechtzuerhalten, auch wenn die Anzahl der Datenbanken steigt, obwohl die Nettoverbesserung in Umgebungen mit einer hohen Anzahl von Datenbanken weniger ausgeprägt sein kann.

Informationen zum Einrichten Azure SQL-Datenbank Überwachung finden Sie unter "Erste Schritte mit SQL-Datenbank Überwachung".

Hinweise

  • Wenn das argument file_pattern übergeben wurde, um auf einen Pfad oder eine Datei zu fn_get_audit_file_v2 verweisen, die nicht vorhanden ist, oder wenn die Datei keine Überwachungsdatei ist, wird die MSG_INVALID_AUDIT_FILE Fehlermeldung zurückgegeben.

  • fn_get_audit_file_v2kann nicht verwendet werden, wenn die Überwachung mit den APPLICATION_LOGOptionen oder Denkoptionen EXTERNAL_MONITOR SECURITY_LOGerstellt wird.

Berechtigungen

Erfordert die CONTROL DATABASE-Berechtigung.

  • Serveradministratoren können auf Überwachungsprotokolle aller Datenbanken auf dem Server zugreifen.

  • Nicht-Serveradministratoren können nur auf Überwachungsprotokolle aus der aktuellen Datenbank zugreifen.

  • Blobs, die die oben genannten Kriterien nicht erfüllen, werden übersprungen (eine Liste der übersprungenen Blobs wird in der Abfrageausgabemeldung angezeigt). Die Funktion gibt Protokolle nur von Blobs zurück, für die der Zugriff zulässig ist.

Beispiele

In diesem Beispiel werden Überwachungsprotokolle von einem bestimmten Azure Blob Storage-Speicherort abgerufen und Datensätze zwischen 2023-11-17T08:40:40Z und 2023-11-17T09:10:40Z.

SELECT *
FROM sys. fn_get_audit_file_v2(
    'https://yourstorageaccount.blob.core.windows.net/sqldbauditlogs/server_name/database_name/SqlDbAuditing_ServerAudit/',
    DEFAULT,
    DEFAULT,
    '2023-11-17T08:40:40Z',
    '2023-11-17T09:10:40Z')

Weitere Informationen

Systemkatalogansichten:

Transact-SQL: