65.9K
CodeProject 正在变化。 阅读更多。
Home

MS SQL Server 2008 上的审计

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.71/5 (6投票s)

2011 年 3 月 8 日

CPOL

6分钟阅读

viewsIcon

82984

MS SQL Server 2008 的一项重要新功能,提供真正的审计解决方案 - SQL Server Audit。

引言

保护服务器和数据库是一个非常重要的方面。在向服务器或数据库上的任何用户授予访问权限时,都应始终牢记最小权限原则。作为 DBA,我们遵守并承诺服务器及其托管数据库的保密性、完整性和可用性。安全性起着非常重要的作用,并有助于我们实现目标。

DBA 采用各种检查来审计并跟踪可能在服务器或数据库级别发生的任何未经授权的活动。任何数据安全策略的关键部分是能够跟踪谁访问了数据或尝试访问数据。这不仅能够检测未经授权的访问尝试,还能检测试图滥用其合法访问权限的内部人员的任何恶意操作。此外,丰富而强大的跟踪功能还可以对管理员所做的敏感配置更改进行监督。

暂时忘掉数据库;一般来说,我们为什么要进行审计?审计是一种机制,可以帮助我们找出基础设施设置是否高效、健康并满足我们的要求。它告诉我们应该在何处着手。审计日志向我们显示了谁试图进入系统,但被我们部署的安全措施过滤掉了。

我们可能已经制定了安全计划,并采取了所有规则和措施来阻止未经授权的元素,但为了确保其可用性和真实性,我们需要定期进行审计。直到 SQL Server 2005,DBA 都是使用 SQL Profiler 进行审计。他们运行并审查跟踪,编写 DDL/DML 触发器来记录关键活动,或使用 SQL Server 错误日志、Windows NT 日志或 SQL Agent 日志来记录特定事件,例如登录失败等。

随着 SQL Server 2008 的推出,Microsoft 引入了一项重要的新功能,提供真正的审计解决方案 - SQL Server Audit。它提供了许多吸引人的优势,可以帮助 DBA 仅通过几次鼠标点击即可实现满足监管合规性要求的目标。SQL Server Audit 包括提供审计日志的集中存储以及与 System Center 的集成,同时性能也有明显提升。最重要的是,它允许细粒度审计,即可以针对特定主体对特定对象执行的特定操作进行审计。

值得称赞的是,Microsoft 终于给予了应有的重视,提供了如此细粒度级别的有效审计手段,并且可以集中管理/存档。审计文件可以按照 DBA 的意愿,在自定义的集中路径上进行审查和存档。

为了能够理解 SQL Server 2008 Audit 功能的工作原理,必须熟练掌握

  1. 服务器审计
  2. 服务器审计规范
  3. 数据库审计规范

让我们分别深入了解一下,并通过一个示例,尝试更仔细地了解审计。

服务器审计

要配置 SQL Server 实例的审计,首先要从“Audits”开始。审计可以记录在文件、安全日志或应用程序日志中。我们可以使用“Audits”配置审计的记录位置或方式。

图 1

服务器审计充当了倾倒所有审计的接收器。服务器审计指定审计的记录位置,但不指定记录什么。如上图所示,右键单击“Audits”并选择“New Audit”。将弹出一个类似于图 2 的屏幕。

让我们详细回顾一下这个屏幕。顾名思义,“Audit name”是审计的名称,“Queue delay (in milliseconds)”定义了事件写入日志的时间间隔。

Shut down server on audit log failure”为 DBA 提供了一个选项,可以在审计日志失败时关闭服务器。接下来是选择审计记录的“destination”。我们选择“File”。

图 2

使用“File Path”中的 Browse 按钮,选择日志和文件将保存的路径。我们创建一个审计,并将目标指定为“File”,然后将其保存到C:\Keshav

服务器审计规范

Server Audit Specification 对象描述了服务器级别的审计的内容。Server Audit Specification 对象与 Server Audit 对象之间存在一对一的关系。服务器审计规范与服务器审计相关联,以定义审计数据的写入位置。右键单击 Server Audit Specifications 并选择New audit specifications。将弹出一个类似于图 4 的屏幕。输入一个“Name”并从“Audit”下拉列表中选择一个审计。在“Audit action type”部分,有各种服务器级别的审计可供选择。在我们的示例中,我们选择“FAILED_LOGIN_GROUP”。

最后单击OK

数据库审计规范

这描述了审计的内容,但顾名思义,它侧重于在特定数据库中发生的动作。审计数据的写入位置通过将数据库审计规范与服务器审计对象关联来定义。数据库审计规范与服务器审计对象之间存在一对一的关系。

图 5 所示,database audit specifications 位于 Databases>TestDB>Security 下。

右键单击它将看到一个类似于图 6 的弹出屏幕,并为数据库审计规范设置一个名称。正如我们所看到的,我们的新数据库规范和目标审计之间存在一对一的映射。从“Audit”下拉列表中选择一个目标。接下来,设置要跟踪的审计。我们有许多细粒度的审计可供使用。在本例中,我们在TestDB 数据库的Employee 表上选择INSERT 作为操作。我们将为同一表上的UPDATE 创建另一个审计。

单击OK

注意:默认情况下,在所有三个级别上创建的审计都是禁用的。MS SQL Server 期望您在配置审计后启用它们。配置完成后,右键单击并启用我们刚刚创建的所有三个审计。

接下来,我们将尝试使用无效凭据登录。

由于这些不是合法凭据,我们将无法登录。现在,让我们使用合法凭据登录。

完成后,在 TestDB 上运行下面的 DML。

UPDATE TestDB..Employee SET ENAME='Andy' WHERE EID=5;
INSERT INTO TestDB..Employee VALUES('Rose','IT');

如果我们查看C:\Keshav,我们将找到一个扩展名为.SQLAUDIT 的二进制文件,其名称是我们为服务器审计指定的。由于我们选择 FILE 作为审计数据接收器,该文件将存储服务器审计规范和数据库审计规范的所有结果,这些结果已配置在服务器审计中作为其目标。

为了验证审计结果,执行下面的查询

SELECT * FROM fn_get_audit_file(
'C:\Keshav\Audit-*.sqlaudit',
default, default)

结果显示了审计的所有详细信息。

让我们稍微过滤一下并重新评估

SELECT event_time,action_id,statement,database_name,server_principal_name
FROM fn_get_audit_file(
'C:\Keshav\Audit-*.sqlaudit',
default, default) 

event_time             action_ statement                        database  server
                       id                                       _name     _principal
                                                                          _name
---------------------- ------- -------------------------------
2011-03-01 11:27:24.43 LGIF    Login failed for user 'Amit'.   [CLIENT:  Amit 
                               Reason:Could not find a login   <local 
                               matching the name provided.     machine>] 
2011-03-01 11:30:41.01 UP      UPDATE TestDB..Employee         TestDB    keshav
                               SET ENAME='Andy' WHERE EID=5;
2011-03-01 11:30:15.22 IN      INSERT INTO TestDB..Employee    TestDB    keshav
                               VALUES('Rose','IT');
(3 row(s) affected)

请注意,为更新和插入执行的 DML 详细信息已作为数据库审计规范的一部分被记录。此外,执行 DML 的用户的姓名也被记录下来。这是数据库审计的一部分。至于服务器审计,我们发现试图使用无效凭据登录的人的信息也已被记录。

通过这个例子,您将能够掌握这个令人兴奋的新功能。

图 7 展示了审计的架构级别实现。

结论

SQL Server 2008 将审计提升到了一个新的水平,并使其更加简单和集中。希望本文已成功地从基本层面介绍了此功能。审计的应用范围要广泛得多,在本篇文章中讨论它们超出了范围。

© . All rights reserved.