【IT168 技术文档】SQL Server允许你根据自己的需求来审计成功的和失败的登录。启用这个审计的方法是使用SSMS。连接到对象浏览器中的SQL Server,然后右键单击SQL Server,从弹出菜单中选择Properties。你应该看到如下显示的服务器属性:

图一
你应该点击Security页(在前面图像中高亮显示的),它将跳转到你可以设置登录审计的页面:

图二
这里有四个可选项:
None – 成功的和失败的登录都不会被审计。
Failed logins only – 失败的登录会被审计,而成功的登录会被忽略。
Successful logins only –成功的登录会被审计,而失败的登录会被忽略。
Both failed and successful logins -成功的和失败的登录都会被审计。
当你选择了其中一个选项,你就可以点击OK按钮。登录审计的设置实际上是一个注册表项,它会根据SQL Server版本和实例名的不同而有所差异。当SQL Server服务启动时,SQL Server只读这个设置。因此,要使这个设置生效,你需要重新启动SQL Server服务,因为它是一个注册表设置,设置怎样审计的非常好的方法就是通过GUI。没有一种方法可以只使用T-SQL而不使用其中一个直接访问注册表的扩展存储过程。
这只是关于不同设置的只言片语。至少,你应该审计生产系统上面的失败登录。在某些案例中,你需要审计成功的登录。但是你会意识到审计成功的登录很可能会产生大量要筛选的事件。在一些很敏感的系统中,控制这个级别是很重要的。尽管如此,在一些不太重要的系统中,你可能会只需做较简单的事情,那就是只审计失败的登录,因此你不会为事件的数量而烦恼。如果你有一个日志管理解决方法,那么一定要两个都审计。
一旦你打开了审计,下一步就是能够找到上述审计的结果。审计信息所在的第一个地方就是SQL Server日志中记录的地方。例如,“sa”的一个帐户审计成功和一个审计失败在下面的摘要中显示:

图三
如果你想通过T-SQL查看SQL Server日志的内容,那么这里有一个没有在正式文件中记录(但很知名)的扩展存储过程叫做xp_readerrorlog。你可以通过下面的代码使用它把错误日志的结果放到一个记录集中:
要进一步阅读,你可以在扩展存储过程中添加一个符合SQL Server日志顺序的整数参数。0代表当前的日志,以此类推,每个号码是指它前面号码的下一个日志。因此,要想看到第三个日志的内容(包括当前这个),那么你可以传递参数2(从2 – 0,1,2应该是第三个),你可以执行:
要查找当前的错误日志并且只返回错误的登录,你可以使用下面的命令。第一个参数指定错误日志(0=current),第二个参数指定日志的类型(1=SQL错误日志),第三个参数指定要查找的信息。
如果你有日志管理软件,那么要看的另一个非常好的地点是操作系统的应用程序时间日志。你可以通过使用计算机管理工具来查看它。如果你打开系统工具,然后再打开事件查看器,那么你会看到应用程序事件日志如下:

图四
如果你观察这个事件日志,那么你会看到带有MSSQLSERVER或者MSSQL$源的事件。例如,下面显示了我们之前在SQL Server日志中看到的审计成功和失败事件:

图五
SQL Server 2005和2008的成功登录将有一个事件ID为18454,失败登录将有一个事件ID为18456。SQL Server 2000对两种登录使用了相同的事件ID,这样一来就不可能在不堪时间详细信息的情况下确定该事件是成功还是失败。结果,我建议大家只审计失败的登录来消除这种混乱。一旦你确定了正确的事件,你就可以看看事件日志详细信息找出要尝试的是哪种登录。例如,这是一个失败登录的尝试:

图六
下面是成功的登录尝试:

图七
关于哪个帐户进行了尝试的信息存储在事件日志的描述中。因此,如果你想自动执行审计成功或失败的检索过程,那么你要去确保这个应用程序可以检索这些详细信息并且对文本进行相应解析。