sys.fn_get_audit_file (Transact-SQL)
适用于:SQL Server (所有受支持的版本
) Azure SQL 数据库
Azure SQL 托管实例 Azure Synapse
Analytics
从服务器审核在 SQL Server 中创建的审核文件中返回信息。 有关详细信息,请参阅 SQL Server 审核(数据库引擎)。
语法
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 (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) | 适用于:从 2017) 开始Azure SQL 数据库 + SQL Server ( 执行导致审核事件的语句的客户端应用程序的名称 |
audit_file_offset | bigint | 适用于:仅SQL Server 包含审核记录的文件中的缓冲区偏移量。 不可为 null。 |
audit_schema_version | int | 始终为 1 |
class_type | varchar(2) | 发生审核的可审核实体的类型。 不可为 null。 |
client_ip | nvarchar(128) | 适用于:从 2017) 开始Azure SQL 数据库 + SQL Server ( 客户端应用程序的源 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。 |
succeeded | 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 | 适用于:仅从 2016) 开始 (SQL Server 用于标识一个事务中的多个审核事件的唯一标识符 |
user_defined_event_id | smallint | 适用于:SQL Server 2012 (11.x) 及更高版本、Azure SQL 数据库和SQL 托管实例 作为参数传递给 sp_audit_write的用户定义事件 ID。 系统事件的 NULL, (用户定义的事件的默认) 和非零。 有关详细信息,请参阅 transact-SQL) sp_audit_write (。 |
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_LOG、SECURITY_LOG或EXTERNAL_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 数据库
This example reads from a file that is named
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
此示例从上述文件读取,但具有其他 T-SQL 子句 (TOP、ORDER BY 和 WHERE 子句,用于筛选函数) 返回的审核记录:
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审核 (数据库引擎) 。
有关设置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)
创建服务器审核和服务器审核规范