适用于:Azure SQL Database
Microsoft Fabric
中的仓库Microsoft Fabric中的SQL数据库
该 sys.fn_get_audit_file_v2 系统功能设计为比前代 sys.fn_get_audit_file更高效的审计日志数据检索。 该函数在文件和记录级别引入基于时间的筛选,提供显著的性能改进,尤其是针对特定时间范围的查询。
返回由服务器审计创建的审计文件中的信息。 有关详细信息,请参阅 SQL Server 审核(数据库引擎)。
- 有关设置Azure SQL 数据库审核的信息,请参阅SQL 数据库审核入门。
- 有关设置Fabric数据仓库审计的信息,请参见 Fabric数据仓库中的SQL审计日志。
- 有关在Fabric审计中设置SQL数据库的信息,请参见“Fabric中SQL 数据库中的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
仅适用于:仅Azure SQL 数据库
指定要读取的审核文件集的目录(或路径)和文件名。 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
仅适用于:仅Azure SQL 数据库
指定审核文件集中要开始读取审核记录的特定文件的路径和名称。 initial_file_name为 nvarchar(260)。
initial_file_name参数必须包含有效的条目,或者必须包含default或NULL值。
audit_record_offset
仅适用于:仅Azure SQL 数据库
指定具有为 initial_file_name指定的文件的已知位置。 使用此参数时,函数将开始在指定偏移量之后立即读取缓冲区的第一条记录。
audit_record_offset参数必须包含有效的条目,或者必须包含default或NULL值。
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 = 成功0 = 失败 |
permission_bitmask |
varbinary(16) | 在某些操作中,此位掩码是授予、拒绝或撤销的权限。 |
is_column_permission |
bit | 指示是否为列级权限的标志。 不可为 Null。 返回 0 当 permission_bitmask = 0.1 = 真0 = 假 |
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/DENY/REVOKE。 不可为 Null。 如果不适用,则 0 返回。 |
target_database_principal_id |
int | 执行操作的数据库主体GRANT/DENY/REVOKE。 不可为 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_name和schema_nameobject_name)表示。 将分析模块名称以转义无效的 XML 字符,例如<,/_x/>。 他们逃脱了。_xHHHH_ 代表 HHHH 字符的四位数十六进制 UCS-2 代码。 Nullable。 当 NULL 事件没有报告其他信息时返回。 |
file_name |
varchar(260) | 作为记录来源的审核日志文件的路径和名称。 不可为 Null。 |
audit_file_offset |
bigint | 包含审核记录的文件中的缓冲区偏移量。 不可为 Null。 |
user_defined_event_id |
smallint | 作为参数 sp_audit_write传递给的用户定义的事件 ID。
NULL 用于系统事件(默认值)和用户定义的事件的非零。 有关详细信息,请参阅sp_audit_write(Transact-SQL)。 |
user_defined_information |
nvarchar(4000) | 用于记录用户希望使用 sp_audit_write 存储过程在审核日志中记录的任何额外信息。 |
audit_schema_version |
int | 总是为 1。 |
sequence_group_id |
varbinary | 唯一标识符。< |
transaction_id |
bigint | 用于标识一个事务中的多个审核事件的唯一标识符。 |
client_ip |
nvarchar(128) | 客户端应用程序的源 IP。 |
application_name |
nvarchar(128) | 执行导致审核事件的语句的客户端应用程序的名称。 |
duration_milliseconds |
bigint | 查询执行持续时间,以毫秒为单位。 |
response_rows |
bigint | 结果集返回的行数。< |
affected_rows |
bigint | 受已执行语句影响的行数。 |
connection_id |
uniqueidentifier | 服务器中的连接的 ID。 |
data_sensitivity_information |
nvarchar(4000) | 受审核查询根据数据库中分类的列返回的信息类型和敏感度标签。 详细了解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 | 创建行版本的事务中的操作序列号。 |
external_policy_permissions_checked |
nvarchar(4000) | 与外部授权权限检查相关的信息,生成审核事件时,将评估 Purview 外部授权策略。 |
obo_middle_tier_app_id |
varchar(120) | 中间层应用的应用程序ID,通过代理访问(OBO)连接。 Nullable。 如果请求未使用 OBO 访问进行,则 NULL 返回。 |
is_local_secondary_replica |
bit |
True 如果审核记录源自只读本地次要副本,则为 ;否则为 |
sys.fn_get_audit_file改进
该 sys.fn_get_audit_file_v2 函数通过在文件和记录级别引入基于时间的高效筛选,为较旧的 sys.fn_get_audit_file 提供了实质性的改进。 这种优化对于面向较小时间范围的查询特别有利,有助于在多数据库环境中保持性能。
双级筛选
文件级筛选:函数首先根据指定的时间范围筛选文件,从而减少需要扫描的文件数。
记录级筛选:然后应用所选文件中的筛选,以仅提取相关记录。
性能增强功能
性能改进主要取决于 Blob 文件的滚动更新时间和查询的时间范围。 假设审核记录的统一分布:
减少负载:通过将要扫描的文件和记录数降到最低,可减少系统上的负载并提高查询响应时间。
可伸缩性:即使数据库数量增加,也有助于保持性能,尽管网络改进在具有大量数据库的环境中可能不那么明显。
注解
参数,或者该文件不是审核文件,则fn_get_audit_file_v2返回错误消息。
fn_get_audit_file_v2当审计创建时,使用了 APPLICATION_LOG、 SECURITY_LOG或 EXTERNAL_MONITOR 选项,该函数无法使用。
目前在Fabric数据仓库中,你无法访问单个文件,只能访问审计文件夹。 以下参数不支持仓库项目的SQL审计: file_pattern, initial_file_name, audit_record_offset, 。
权限
Azure SQL Database 需要的权限
需要 CONTROL DATABASE 权限。
服务器管理员可以访问服务器上的所有数据库的审核日志。
非服务器管理员只能从当前数据库访问审核日志。
跳过不符合上述条件的 Blob(查询输出消息中会显示跳过的 Blob 列表)。 该函数仅从允许访问的 Blob 返回日志。
Fabric SQL 数据库中的权限要求
要管理使用 Fabric 工作区角色进行审计,用户必须拥有 Fabric 工作区 贡献 者角色或更高权限。 若要使用 SQL 权限进行审核管理,请按以下步骤操作:
- 若要配置数据库审核,用户必须具有 ALTER ANY DATABASE AUDIT 权限。
- 若要使用 T-SQL 查看审核日志,用户必须具有 VIEW DATABASE SECURITY AUDIT 权限。
欲了解更多信息,请参见 Fabric SQL 数据库中的审计。
Fabric 数据仓库所需的权限
用户必须拥有Fabric物品 Audit 权限。 有关详细信息,请参阅权限。
示例
答: View SQL audit logs for Azure SQL Database
此示例从特定Azure Blob 存储位置检索审核日志,筛选和2023-11-17T08:40:40Z筛选2023-11-17T09:10:40Z记录。
SELECT *
FROM sys.fn_get_audit_file_v2(
'https://<storage_account>.blob.core.windows.net/sqldbauditlogs/server_name/database_name/SqlDbAuditing_ServerAudit/',
DEFAULT,
DEFAULT,
'2023-11-17T08:40:40Z',
'2023-11-17T09:10:40Z')
B. 查看 Fabric 数据仓库的 SQL 审计日志
本示例从与当前工作区和仓库对齐的 OneLake 文件夹中获取审计日志,并在 和 2023-11-17T08:40:40Z之间过滤记录2023-11-17T09:10:40Z。
在织物传送门中,取回你的 workspaceID 和 warehouseID:
-
<workspaceID>访问Fabric门户中的您的工作区。 在该/groups/部分后面的URL里找到工作区GUID,或者在现有仓库中运行SELECT @@SERVERNAME。 如果你/groups/的 URL 后面跟/me/着 ,你正在使用默认工作区,而目前 Fabric Data Warehouse 的 SQL Audit 在默认工作区中不被支持。 -
<warehouseID>:访问你的仓库,进入织物门户。 在该/warehouses/部分后的网址中找到仓库ID。
SELECT *
FROM sys. fn_get_audit_file_v2(
'https://onelake.blob.fabric.microsoft.com/{workspaceId}/{warehouseId}/Audit/sqldbauditlogs/',
DEFAULT,
DEFAULT,
'2023-11-17T08:40:40Z',
'2023-11-17T09:10:40Z')
C. 查看 Microsoft Fabric 中 SQL 数据库的 SQL 审计日志
本示例从Microsoft Fabric中的OneLake获取审计日志,介于 2025-11-17T08:40:40Z 和 2025-11-17T09:10:40Z之间。
在接下来的脚本中,你需要提供你的 Microsoft Fabric 工作空间 ID 和数据库 ID。 两者都可以在Fabric门户的网址中找到。 例如: https://fabric.microsoft.com/groups/<fabric workspace id>/sqldatabases/<fabric sql database id>。 URL中的第一个唯一标识符字符串是Fabric工作区ID,第二个唯一标识符字符串是SQL数据库ID。
- 将
<fabric_workspace_id>替换为你的 Fabric 工作区 ID。 可以在 URL 中轻松找到工作区的 ID,它是浏览器窗口中/后两个/groups/字符内的唯一字符串。 - 将
<fabric sql database id>替换为在 Fabric 数据库 ID 中的 SQL 数据库。 你可以在 URL 中轻松找到数据库项的标识符,它是在浏览器窗口中/之后,位于两个/sqldatabases/字符内的唯一字符串。
SELECT *
FROM sys.fn_get_audit_file_v2(
'https://onelake.blob.fabric.microsoft.com/<fabric workspace id>/<fabric sql database id>/Audit/sqldbauditlogs/',
DEFAULT,
DEFAULT,
'2025-11-17T08:40:40Z',
'2025-11-17T09:10:40Z')
详细信息
系统目录视图:
- 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)
Transact-SQL:
- CREATE SERVER AUDIT (Transact-SQL)
- 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)
- 创建数据库审核规范(Transact-SQL)
- ALTER DATABASE AUDIT SPECIFICATION (Transact-SQL)
- DROP DATABASE AUDIT SPECIFICATION (Transact-SQL)
- ALTER AUTHORIZATION (Transact-SQL)