sys.fn_get_audit_file_v2 (Transact-SQL)

适用于:Azure SQL 数据库

sys.fn_get_audit_file_v2前身相比,Azure SQL 数据库中的系统功能旨在检索具有更高效率sys.fn_get_audit_file的审核日志数据。 该函数在文件和记录级别引入基于时间的筛选,提供显著的性能改进,尤其是针对特定时间范围的查询。

重要

sys.fn_get_audit_file_v2目前仅在Azure SQL 数据库受支持。

从服务器审核在 Azure SQL 数据库 中创建的审核文件中返回信息。 有关详细信息,请参阅 SQL Server 审核(数据库引擎)

Transact-SQL 语法约定

语法

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

参数

file_pattern

指定要读取的审核文件集的目录(或路径)和文件名。 file_pattern为 nvarchar(260)。

传递没有文件名模式的路径将生成错误。

此参数用于指定 Blob URL(包括存储终结点和容器)。 虽然它不支持星号通配符,但可以使用部分文件(blob)名称前缀(而不是完整 blob 名称)收集以此前缀开头的多个文件(blob)。 例如:

  • <Storage_endpoint>/<Container>/<ServerName>/<DatabaseName>/ - 收集特定数据库的所有审核文件(blob)。

  • <Storage_endpoint>/<Container>/<ServerName>/<DatabaseName>/<AuditName>/<CreationDate>/<FileName>.xel - 收集特定的审核文件(blob)。

initial_file_name

指定审核文件集中要开始读取审核记录的特定文件的路径和名称。 initial_file_name为 nvarchar(260)。

initial_file_name参数必须包含有效的条目,或者必须包含defaultNULL值。

audit_record_offset

指定具有为 initial_file_name指定的文件的已知位置。 使用此参数时,函数将开始在指定偏移量之后立即读取缓冲区的第一条记录。

audit_record_offset参数必须包含有效的条目,或者必须包含defaultNULL值。 audit_record_offset偏重的。

start_time

筛选日志的开始时间。 在此时间之前排除记录。

end_time

筛选日志的结束时间。 此时之后的记录将被排除。

返回的表

下表描述了此函数返回的审核文件内容。

列名称 类型 描述
event_time datetime2 触发可审核操作的日期和时间。 不可为 Null。
sequence_number int 跟踪单个审核记录中的记录顺序,该记录太大而无法放在写入缓冲区中以进行审核。 不可为 Null。
action_id varchar(4) 操作的 ID。 不可为 Null。
succeeded bit 指示触发事件的操作是否成功。 不可为 Null。 对于除登录事件之外的所有事件,它仅报告权限检查(而不是操作)成功或失败。

1 = success
0 = 失败
permission_bitmask varbinary(16) 在某些操作中,此位掩码是授予、拒绝或撤销的权限。
is_column_permission bit 指示是否为列级权限的标志。 不可为 Null。 返回 0permission_bitmask = 0.

1 = true
0 = false
session_id smallint 发生该事件的会话的 ID。 不可为 Null。
server_principal_id int 在其中执行操作的登录上下文 ID。 不可为 Null。
database_principal_id int 在其中执行操作的数据库用户上下文 ID。 不可为 Null。 如果不适用,则返回 0 。 例如,如果是服务器操作,则返回 0。
target_server_principal_id int 执行操作的服务器主体GRANT//DENYREVOKE。 不可为 Null。 如果不适用,则 0 返回。
target_database_principal_id int 执行操作的数据库主体GRANT//DENYREVOKE。 不可为 Null。 如果不适用,则 0 返回。
object_id int 发生审核的实体的 ID,其中包括以下对象:

- 服务器对象
-数据库
- 数据库对象
- 架构对象

不可为 Null。 返回 0 实体是服务器本身,或者未在对象级别执行审核。 例如,对于 Authentication,则返回 NULL。
class_type varchar(2) 发生审核的可审核实体的类型。 不可为 Null。
session_server_principal_name sysname 会话的服务器主体。 Nullable。 返回连接到数据库引擎实例的原始登录名的标识,以防出现显式或隐式上下文切换。
server_principal_name sysname 当前登录名。 Nullable。
server_principal_sid varbinary 当前登录名 SID。 Nullable。
database_principal_name sysname 当前用户。 Nullable。 如果不可用,则 NULL 返回。
target_server_principal_name sysname 操作的目标登录名。 Nullable。 如果不适用,则 NULL 返回。
target_server_principal_sid varbinary 目标登录名的 SID。 Nullable。 如果不适用,则 NULL 返回。
target_database_principal_name sysname 操作的目标用户。 Nullable。 如果不适用,则 NULL 返回。
server_instance_name sysname 发生审核的服务器实例的名称。 使用标准 server\instance 格式。
database_name sysname 发生此操作的数据库上下文。 Nullable。 返回 NULL 服务器级别发生的审核。
schema_name sysname 在其中执行操作的架构上下文。 Nullable。 返回 NULL 架构外部发生的审核。
object_name sysname 发生审核的实体的名称,其中包括以下对象:

- 服务器对象
-数据库
- 数据库对象
- 架构对象

Nullable。 返回 NULL 实体是服务器本身,或者未在对象级别执行审核。 例如,对于 Authentication,则返回 NULL。
statement nvarchar(4000) 如果存在 Transact-SQL 语句,则为 Transact-SQL 语句。 Nullable。 如果不适用,则 NULL 返回。
additional_information nvarchar(4000) 仅适用于单个事件的唯一信息,以 XML 的形式返回。 一些可审核的操作包含此类信息。

对于与 T-SQL 堆栈关联的操作,一个级别的 T-SQL 堆栈以 XML 格式显示。 XML 格式为: <tsql_stack><frame nest_level = '%u' database_name = '%.*s' schema_name = '%.*s' object_name = '%.*s' /></tsql_stack>

frame nest_level 指示帧的当前嵌套级别。 模块名称以三部分格式(database_nameschema_nameobject_name)表示。 将分析模块名称以转义无效的 XML 字符,例如<>/_x/>。 他们逃脱了。_xHHHH_ 代表 HHHH 字符的四位数十六进制 UCS-2 代码。 Nullable。 当 NULL 事件没有报告其他信息时返回。
file_name varchar(260) 作为记录来源的审核日志文件的路径和名称。 不可为 Null。
audit_file_offset bigint 包含审核记录的文件中的缓冲区偏移量。 不可为 Null。

适用于:仅限 SQL Server
user_defined_event_id smallint 作为参数 sp_audit_write传递给的用户定义的事件 ID。 NULL 用于系统事件(默认值)和用户定义的事件的非零。 有关详细信息,请参阅sp_audit_write(Transact-SQL)。

适用于:SQL Server 2012(11.x)及更高版本、Azure SQL 数据库和SQL 托管实例
user_defined_information nvarchar(4000) 用于记录用户希望使用 sp_audit_write 存储过程在审核日志中记录的任何额外信息。

适用于:SQL Server 2012(11.x)及更高版本、Azure SQL 数据库和SQL 托管实例
audit_schema_version int 总是为 1
sequence_group_id varbinary 唯一的 标识符。

适用于:SQL Server 2016 (13.x) 及更高版本
transaction_id bigint 用于标识一个事务中的多个审核事件的唯一标识符。

适用于:SQL Server 2016 (13.x) 及更高版本
client_ip nvarchar(128) 客户端应用程序的源 IP。

适用于:SQL Server 2017 (14.x) 及更高版本和 Azure SQL 数据库
application_name nvarchar(128) 执行导致审核事件的语句的客户端应用程序的名称。

适用于:SQL Server 2017 (14.x) 及更高版本和 Azure SQL 数据库
duration_milliseconds bigint 查询执行持续时间(以毫秒为单位)。

适用于:Azure SQL 数据库和SQL 托管实例
response_rows bigint 结果集中返回的行数。

适用于:Azure SQL 数据库和SQL 托管实例
affected_rows bigint 受执行语句影响的行数。

仅适用于:仅Azure SQL 数据库
connection_id uniqueidentifier 服务器中连接的 ID。

适用于:Azure SQL 数据库和SQL 托管实例
data_sensitivity_information nvarchar(4000) 受审核查询根据数据库中分类的列返回的信息类型和敏感度标签。 详细了解Azure SQL 数据库数据发现和分类

仅适用于:仅Azure SQL 数据库
host_name nvarchar(128) 客户端计算机的主机名。
session_context nvarchar(4000) 作为当前会话上下文的一部分的键值对。
client_tls_version bigint 客户端支持的最低 TLS 版本。
client_tls_version_name nvarchar(128) 客户端支持的最低 TLS 版本。
database_transaction_id bigint 当前会话中当前事务的事务 ID。
ledger_start_sequence_number bigint 创建行版本的事务中的操作序列号。

仅适用于:仅Azure SQL 数据库
external_policy_permissions_checked nvarchar(4000) 与外部授权权限检查相关的信息,生成审核事件时,将评估 Purview 外部授权策略。

仅适用于:仅Azure SQL 数据库
obo_middle_tier_app_id varchar(120) 使用代理 (OBO) 访问连接到Azure SQL 数据库的中间层应用程序的应用程序 ID。 Nullable。 如果请求未使用 OBO 访问进行,则 NULL 返回。

仅适用于:仅Azure SQL 数据库
is_local_secondary_replica bit True 如果审核记录源自只读本地次要副本,则为 ;否则为 False >。

仅适用于:仅Azure SQL 数据库

sys.fn_get_audit_file改进

sys.fn_get_audit_file_v2 函数通过在文件和记录级别引入基于时间的高效筛选,为较旧的 sys.fn_get_audit_file 提供了实质性的改进。 这种优化对于面向较小时间范围的查询特别有利,有助于在多数据库环境中保持性能。

双级筛选

文件级筛选:函数首先根据指定的时间范围筛选文件,从而减少需要扫描的文件数。

记录级筛选:然后应用所选文件中的筛选,以仅提取相关记录。

性能增强功能

性能改进主要取决于 Blob 文件的滚动更新时间和查询的时间范围。 假设审核记录的统一分布:

  • 减少负载:通过将要扫描的文件和记录数降到最低,可减少系统上的负载并提高查询响应时间。

  • 可伸缩性:即使数据库数量增加,也有助于保持性能,尽管网络改进在具有大量数据库的环境中可能不那么明显。

有关设置Azure SQL 数据库审核的信息,请参阅SQL 数据库审核入门。

注解

  • 如果传递给fn_get_audit_file_v2引用的路径或文件不存在的file_pattern参数,或者该文件不是审核文件,则MSG_INVALID_AUDIT_FILE返回错误消息。

  • fn_get_audit_file_v2使用或SECURITY_LOGEXTERNAL_MONITOR选项创建APPLICATION_LOG审核时,不能使用。

权限

需要 CONTROL DATABASE 权限。

  • 服务器管理员可以访问服务器上的所有数据库的审核日志。

  • 非服务器管理员只能从当前数据库访问审核日志。

  • 跳过不符合上述条件的 Blob(查询输出消息中会显示跳过的 Blob 列表)。 该函数仅从允许访问的 Blob 返回日志。

示例

此示例从特定Azure Blob 存储位置检索审核日志,筛选和2023-11-17T09:10:40Z筛选2023-11-17T08:40: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')

详细信息

系统目录视图:

Transact-SQL: