SQL Server 审核记录

适用范围:SQL Server

使用 SQL Server 审核功能,可以对服务器级别和数据库级别事件组和事件进行审核。 有关详细信息,请参阅 SQL Server 审核(数据库引擎)。 SQL Server。

审核由零个或多个审核操作项组成,这些操作项会记录到审核“ 目标”。 审核目标可以是二进制文件、Windows 应用程序事件日志或 Windows 安全事件日志。 发送到目标的记录可以包含下表中介绍的元素:

列名 说明 类型 始终可用
event_time 触发可审核作的日期和时间。 datetime2
sequence_number 跟踪单个审核记录中的记录顺序,该记录太大而无法放在写入缓冲区中以进行审核。 int
action_id 操作的 ID

提示:若要将 action_id 用作谓词,必须将它从字符串转换为数值。 有关详细信息,请参阅 Filter SQL Server Audit on action_id / class_type predicate(使用 action_id / class_type 谓词筛选 SQL Server 审核)。
varchar(4)
succeeded 指示触发事件的作是否成功。 对于登录事件以外的所有事件,此事件仅报告权限检查是成功还是失败,而不是作。
- 1 = 成功
- 0 = 失败
bit
permission_bitmask 在某些作中,这是授予、拒绝或撤销的权限。 varbinary(16)
is_column_permission 指示这是否为列级权限的标志。 当permission_bitmask = 0 时返回 0。
- 1 = True
- 0 = False
bit
session_id 发生该事件的会话的 ID。 smallint
server_principal_id 在其中执行操作的登录上下文 ID。 int
database_principal_id 在其中执行操作的数据库用户上下文 ID。 如果不适用,则返回 0。 例如,服务器作。 int
target_server_principal_id 正在执行 GRANT/DENY/REVOKE作的服务器主体。 如果不适用,则返回 0。 int
target_database_principal_id 执行 GRANT/DENY/REVOKE作的数据库主体。 如果不适用,则返回 0。 int
object_id 发生审核的实体的 ID。 这包括:
服务器对象
数据库
数据库对象
架构对象
如果实体是服务器本身,或者未在对象级别执行审核,则返回 0。 例如,身份验证。
int
class_type 审核所依据的可审核实体的类型。 varchar(2)
session_server_principal_name 会话的服务器主体。 sysname
server_principal_name 当前登录名。 sysname
server_principal_sid 当前登录名 SID。 varbinary(85)
database_principal_name 当前用户。 sysname
target_server_principal_name 操作的目标登录名。 如果不适用,则返回 NULL。 sysname
target_server_principal_sid 目标登录名的 SID。 如果不适用,则返回 NULL。 varbinary(85)
target_database_principal_name 操作的目标用户。 如果不适用,则返回 NULL。 sysname
server_instance_name 发生审核的服务器实例的名称。 使用标准服务器\实例格式。 sysname
database_name 发生此操作的数据库上下文。 空。 返回服务器级别发生的审核的 NULL。 sysname
schema_name 在其中执行操作的架构上下文。 sysname
object_name 发生审核的实体的名称。 这包括:
服务器对象
数据库
数据库对象
架构对象
空。 如果实体是服务器本身,或者未在对象级别执行审核,则返回 NULL。 例如,身份验证。
sysname
语句 TSQL 语句(如果存在)。 如果不适用,则返回 NULL。 nvarchar(4000)
additional_information 仅应用于单个事件的唯一信息将作为 XML 返回。 一些可审核的作包含此类信息。

对于与 TSQL 堆栈关联的作,将以 XML 格式显示一个级别的 TSQL 堆栈。 XML 格式将为:
<tsql_stack><frame nest_level = '%u' database_name = '%.*s' schema_name = '%.*s' object_name = '%.*s' /></tsql_stack>
帧nest_level指示帧的当前嵌套级别。 模块名称以三部分格式表示(database_name、schema_name和object_name)。 将分析模块名称以转义无效的 xml 字符,例如'\<''>''/''_x'。 他们会逃脱的 _xHHHH\_。 HHHH 代表字符的四位数十六进制 UCS-2 代码
空。 如果没有事件报告的其他信息,则返回 NULL。
nvarchar(4000)
file_name 记录来自的审核日志文件的路径和名称。 varchar(260)
audit_file_offset 适用于:仅限 SQL Server

包含审核记录的文件中的缓冲区偏移量。
bigint
user_defined_event_id 适用于:SQL Server 2012(11.x)及更高版本、Azure SQL 数据库和 SQL 托管实例

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

用于记录用户希望使用 sp_audit_write 存储过程在审核日志中记录的任何额外信息。
nvarchar(4000)
audit_schema_version 始终为 1 int
sequence_group_id 适用于:仅限 SQL Server

唯一标识符
varbinary(85)
transaction_id 仅适用于:SQL Server(从 2016 年开始)

用于标识一个事务中的多个审核事件的唯一标识符
bigint
client_ip 适用于:Azure SQL 数据库 + SQL Server(从 2017 开始)

客户端应用程序的源 IP
nvarchar(128)
application_name 适用于:Azure SQL 数据库 + SQL Server(从 2017 开始)

执行导致审核事件的语句的客户端应用程序的名称
nvarchar(128)
duration_milliseconds 适用于:Azure SQL 数据库和 SQL 托管实例

查询执行持续时间(以毫秒为单位)
bigint
response_rows 适用于:Azure SQL 数据库和 SQL 托管实例

结果集中返回的行数。
bigint
affected_rows 适用于:仅限 Azure SQL 数据库

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

服务器中连接的 ID
GUID
data_sensitivity_information 适用于:仅限 Azure SQL 数据库

根据数据库中的分类列,审核的查询返回的信息类型和敏感度标签。 详细了解 Azure SQL 数据库数据发现和分类
nvarchar(4000)
host_name 客户端连接的主机名 nvarchar(128)
session_context 连接的会话上下文信息 nvarchar(4000)
client_tls_version 客户端连接使用的 TLS 版本号 int
client_tls_version_name 客户端连接使用的 TLS 版本名称 nvarchar(128)
database_transaction_id 数据库事务标识符 bigint
ledger_start_sequence_number 适用于:SQL Server 2022 及更高版本

账本作的账本开始序列号
bigint
external_policy_permissions_checked 在作期间检查的外部策略权限 nvarchar(4000)

注解

某些作不会填充列的值,因为它可能不适用于该作。

SQL Server 审核为审核记录中的字符字段存储 4,000 个字符的数据。 当从可审核作返回 的additional_information语句 值返回超过 4000 个字符时, sequence_number 列用于将多个记录写入审核报告中,以便单个审核作记录此数据。 过程如下:

  • 语句列分为 4,000 个字符。

  • SQL Server 审核作为具有部分数据的审核记录的第一行写入。 所有其他字段在每一行中是重复的。

  • sequence_number值递增。

  • 此过程将一直重复,直至记录了所有数据为止。

可以使用sequence_number值、event_Time、action_idsession_id列来按顺序读取行来连接数据。