sys.fn_get_audit_file (Transact-SQL)

适用于: 是SQL Server(所有支持的版本) 是Azure SQL 数据库 是Azure SQL 托管实例 是Azure Synapse Analytics

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

主题链接图标 Transact-SQL 语法约定

语法

fn_get_audit_file ( file_pattern,   
    { default | initial_file_name | NULL },   
    { default | audit_record_offset | NULL } )  

参数

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

  • SQL Server

    此参数必须包括路径(驱动器盘符或网络共享)和文件名,可以包含通配符。 单个星号 (*) 可用于从审核文件集收集多个文件。 例如:

    • <path>\* - 收集指定位置的所有审核文件。

    • <path> \LoginsAudit_{GUID}* - 收集具有指定名称和 GUID 对的所有审核文件。

    • <path> \LoginsAudit_{GUID}_00_29384.sqlaudit - 收集特定的审核文件。

  • Azure SQL 数据库:

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

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

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

备注

在无文件名模式的情况下传递路径将生成错误。

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

备注

initial_file_name 参数 必须包含有效的条目,或者必须包含默认|NULL 值。

audit_record_offset
指定一个已知位置,该位置包含为 initial_file_name 指定的文件。 使用此参数时,函数将从缓冲区中紧跟指定偏移量之后的第一个记录开始读取。

备注

audit_record_offset 参数 必须包含有效的条目,或者必须包含默认|NULL 值。 类型为 bigint

返回的表

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

列名称 类型 说明
action_id varchar(4) 操作 ID。 不可为 Null。
additional_information nvarchar(4000) 仅适用于单个事件的唯一信息,以 XML 的形式返回。 有少量的可审核操作包含此类信息。

对于具有与操作相关联的 TSQL 堆栈的操作,将以 XML 格式显示一个级别的 TSQL 堆栈。 该 XML 格式如下:

<tsql_stack><frame nest_level = '%u' database_name = '%.*s' schema_name = '%.*s' object_name = '%.*s' /></tsql_stack>

Frame nest_level 指示框架的当前嵌套级别。 模块名称表示为由三部分组成的格式(database_name、schema_name 和 object_name)。 将分析模块名称以转义无效的 xml 字符,如 '\<' '>' '/' 、、、 '_x' 。 它们将被转义为 _xHHHH\_ 。 HHHH 代表该字符对应的四位十六进制 UCS-2 代码。

可以为 Null。 如果事件没有报告其他信息,则返回 NULL。
affected_rows bigint 适用于 :Azure SQL 数据库

受执行语句影响的行数。
application_name nvarchar(128) 适用于 :Azure SQL 数据库+ SQL Server (2017)

执行导致审核事件的语句的客户端应用程序的名称
audit_file_offset bigint 适用于:SQL Server

包含审核记录的文件中的缓冲区偏移量。 不可为 null。
audit_schema_version int 始终为 1
class_type varchar(2) 发生审核的可审核实体的类型。 不可为 null。
client_ip nvarchar(128) 适用于 :Azure SQL 数据库+ SQL Server (2017)

客户端应用程序的源 IP
connection_id GUID 适用于 : Azure SQL 数据库 和 SQL 托管实例

服务器中的连接的 ID
data_sensitivity_information nvarchar(4000) 适用于 :Azure SQL 数据库

受审核查询根据数据库中分类的列返回的信息类型和敏感度标签。 详细了解 Azure SQL 数据库数据发现和分类
database_name sysname 发生此操作的数据库上下文。 可以为 Null。 对于在服务器级别发生的审核,返回 NULL。
database_principal_id int 在其中执行操作的数据库用户上下文 ID。 不可为 null。 如果不适用,则返回 0。 例如,如果是服务器操作,则返回 0。
database_principal_name sysname 当前用户。 可以为 Null。 如果不可用,则返回 NULL。
duration_milliseconds bigint 适用 于: Azure SQL 数据库和 SQL 托管实例

查询执行持续时间,以毫秒为单位
event_time datetime2 触发可审核操作的日期和时间。 不可为 null。
file_name varchar(260) 作为记录来源的审核日志文件的路径和名称。 不可为 null。
is_column_permission bit 指示是否为列级权限的标志。 不可为 null。 当 permission_bitmask = 0 时返回 0。
1 = true
0 = false
object_id int 发生审核的实体的 ID。 这包括:
服务器对象
数据库
数据库对象
架构对象
不可为 null。 如果实体是服务器本身或者没有在对象级别执行审核,则返回 0。 例如,对于 Authentication,则返回 NULL。
object_name sysname 发生审核的实体的名称。 这包括:
服务器对象
数据库
数据库对象
架构对象
可以为 Null。 如果实体是 Server 自身或者没有在对象级别执行审核,则返回 NULL。 例如,对于 Authentication,则返回 NULL。
permission_bitmask varbinary(16) 在某些操作中,这是授予、拒绝或撤消的权限。
response_rows bigint 适用 于: Azure SQL 数据库和 SQL 托管实例

在结果集中返回的行数。
schema_name sysname 在其中执行操作的架构上下文。 可以为 Null。 对于在架构外发生的审核,返回 NULL。
sequence_group_id varbinary 适用 于:仅 SQL Server 从2016开始 ()

唯一标识符
sequence_number int 跟踪单个审核记录中的记录顺序,该记录太大而无法放在写入缓冲区中以进行审核。 不可为 null。
server_instance_name sysname 发生审核的服务器实例的名称。 使用标准服务器\实例格式。
server_principal_id int 在其中执行操作的登录上下文 ID。 不可为 null。
server_principal_name sysname 当前登录名。 可以为 Null。
server_principal_sid varbinary 当前登录名 SID。 可以为 Null。
session_id smallint 发生该事件的会话的 ID。 不可为 null。
session_server_principal_name sysname 会话的服务器主体。 可以为 Null。 如果存在显式或隐式上下文切换,则返回连接到 SQL Server 实例的原始登录名的标识。
statement nvarchar(4000) TSQL 语句(如果存在)。 可以为 Null。 如果不适用,则返回 NULL。
成功 bit 指示触发事件的操作是否成功。 不可为 null。 对于除登录事件之外的所有事件,它仅报告权限检查(而不是操作)成功或失败。
1 = success
0 = 失败
target_database_principal_id int 执行 GRANT/DENY/REVOKE 操作的数据库主体。 不可为 null。 如果不适用,则返回 0。
target_database_principal_name sysname 操作的目标用户。 可以为 Null。 如果不适用,则返回 NULL。
target_server_principal_id int 执行 GRANT/DENY/REVOKE 操作的服务器主体。 不可为 null。 如果不适用,则返回 0。
target_server_principal_name sysname 操作的目标登录名。 可以为 Null。 如果不适用,则返回 NULL。
target_server_principal_sid varbinary 目标登录名的 SID。 可以为 Null。 如果不适用,则返回 NULL。
transaction_id bigint 适用 于:仅 SQL Server 从2016开始 ()

用于在一个事务中标识多个审核事件的唯一标识符
user_defined_event_id smallint 适用 于: SQL Server 2012 (11.x) 和更高版本、Azure SQL 数据库和 SQL 托管实例

作为参数传递给 sp_audit_write 的用户定义事件 id。 对于系统事件为 NULL (默认) 值为 NULL ,对于用户定义的事件则为非零。 有关详细信息,请参阅sp_audit_write (SQL transact-sql)
user_defined_information nvarchar(4000) 适用 于: SQL Server 2012 (11.x) 和更高版本、Azure SQL 数据库和 SQL 托管实例

用于记录用户要使用 sp_audit_write 存储过程在审核日志中记录的任何其他信息。

备注

  • 如果传递到 fn_get_audit_filefile_pattern 参数引用的路径或文件不存在,或者该文件不是审核文件,则返回 MSG_INVALID_AUDIT_FILE 错误消息。
  • 使用 APPLICATION_LOGSECURITY_LOGEXTERNAL_MONITOR 选项创建审核时,不能使用 fn_get_audit_file

权限

  • SQL Server:需要 CONTROL Server 权限。
  • Azure SQL 数据库:需要 CONTROL Database 权限。
    • 服务器管理员可以访问服务器上所有数据库的审核日志。
    • 非服务器管理员只能从当前数据库访问审核日志。
    • 将跳过不满足上述条件的 blob, (将在查询输出消息) 中显示跳过的 blob 的列表,并且函数将仅返回允许访问的 blob 中的日志。

示例

  • SQL Server

    此示例从名为 \\serverName\Audit\HIPAA_AUDIT.sqlaudit 的文件读取。

    SELECT * FROM sys.fn_get_audit_file ('\\serverName\Audit\HIPAA_AUDIT.sqlaudit',default,default);  
    GO  
    
  • Azure SQL 数据库

    下面的示例从名为的文件中读取 ShiraServer/MayaDB/SqlDbAuditing_Audit/2017-07-14/10_45_22_173_1.xel

    SELECT * FROM sys.fn_get_audit_file ('https://mystorage.blob.core.windows.net/sqldbauditlogs/ShiraServer/MayaDB/SqlDbAuditing_Audit/2017-07-14/10_45_22_173_1.xel',default,default);
    GO  
    

    此示例从同一文件中读取,但使用额外的 SQL 子句 (TOPORDER BYWHERE 子句来筛选函数返回的审核记录) :

    SELECT TOP 10 * FROM sys.fn_get_audit_file ('https://mystorage.blob.core.windows.net/sqldbauditlogs/ShiraServer/MayaDB/SqlDbAuditing_Audit/2017-07-14/10_45_22_173_1.xel',default,default)
    WHERE server_principal_name = 'admin1'
    ORDER BY event_time
    GO
    

    此示例从以开头的服务器读取所有审核日志 Sh

    SELECT * FROM sys.fn_get_audit_file ('https://mystorage.blob.core.windows.net/sqldbauditlogs/Sh',default,default);
    GO  
    

有关如何创建审核的完整示例,请参阅 SQL Server Audit(数据库引擎)

有关设置 Azure SQL 数据库审核的信息,请参阅具有 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)
CREATE DATABASE AUDIT SPECIFICATION (Transact-SQL)
ALTER DATABASE AUDIT SPECIFICATION (Transact-SQL)
DROP DATABASE AUDIT SPECIFICATION (Transact-SQL)
ALTER AUTHORIZATION (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)
创建服务器审核和服务器审核规范