car*_*reo 3 sql-server-2008 sql-server sql-server-2008-r2
我有一个 Microsoft SQL Server 2008r2 SP1。
我需要知道哪些用户连接到数据库和断开连接。
理想情况下,我想要一个(日期时间、用户名、连接/断开连接)列表。
这可以使用扩展事件来完成吗?或者,还有更好的方法?
以下是我用于审核登录和注销的一些选项的概要。我还没有机会将扩展事件用于审计目的。下面,我将使用 SQL Server 跟踪和 SQL Server 审计快速描述跟踪登录和注销事件。您可能最终会设置后台服务器跟踪,下面将对其进行简要介绍。如果您需要我进一步详细说明,请随时询问。
默认跟踪
默认跟踪是一种无需进行任何更改即可审核服务器上的活动的方法。此处提供了有关您可以从默认跟踪中获得什么的帖子。
服务器跟踪
如果您只是在寻找登录/注销信息,您还可以创建自己的服务器跟踪,以使用 SQL Server 探查器审核登录和注销。只需创建一个新的跟踪,然后将其导出为 SQL Server 跟踪定义文件。
运行您的跟踪,停止它,然后在文件下,您可以将您的跟踪导出为 SQL Server 跟踪定义文件。然后,您可以在后台运行该跟踪并将其保存到一个文件中,该文件稍后可以导入到 SQL Server 表中。
分析器创建的示例服务器 Trace 的一部分:
-- Create a Queue
declare @rc int
declare @TraceID int
declare @maxfilesize bigint
set @maxfilesize = 5
exec @rc = sp_trace_create @TraceID output, 0, N'InsertFileNameHere', @maxfilesize, NULL
if (@rc != 0) goto error
-- Client side File and Table cannot be scripted
-- Set the events
declare @on bit
set @on = 1
exec sp_trace_setevent @TraceID, 14, 1, @on
exec sp_trace_setevent @TraceID, 14, 9, @on
exec sp_trace_setevent @TraceID, 14, 2, @on
exec sp_trace_setevent @TraceID, 14, 66, @on
exec sp_trace_setevent @TraceID, 14, 10, @on
.....
-- Set the Filters
declare @intfilter int
declare @bigintfilter bigint
-- Set the trace status to start
exec sp_trace_setstatus @TraceID, 1
-- display trace id for future references
select TraceID=@TraceID
goto finish
Run Code Online (Sandbox Code Playgroud)
这是我从捕获这些项目中得到的输出:

可以将服务器跟踪转换为扩展的事件会话,这在此处进行了详细描述。
服务器审计
还有服务器审计,它允许您跟踪和监视数据库/服务器级别的事件。审核可能仅在企业版和数据中心版中可用。我似乎无法从 Books Online 中找到与此相反的特定文章。
USE MASTER
GO
CREATE SERVER AUDIT audit_test
TO FILE (FILEPATH = 'D:\Audit')
GO
CREATE SERVER AUDIT SPECIFICATION audit_test_spec
FOR SERVER AUDIT [audit_test]
ADD (FAILED_LOGIN_GROUP),
ADD (SUCCESSFUL_LOGIN_GROUP)
WITH (STATE=ON)
GO
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过转到“安全”->“审核”来查看 SSMS 中的服务器审核事件。然后使用上下文菜单,您可以选择查看审核日志以查看活动。


有关审核的更多信息,您可以在此处找到更多信息:
| 归档时间: |
|
| 查看次数: |
39855 次 |
| 最近记录: |