如何得到用户登录到sql2000的日志记录信息?

lincon77 2004-10-20 06:47:20
我想知道哪些用户什么时候登录过sql2000数据库,在企业管理器中的日志中没有记录这方面的信息,用第三方的Log Explorer能看到用户的各种操作,但太多了.不好进行用户登录分析.
如果我想记录下每个用户登录时的时间和机器名,通过触发器能实现吗?
...全文
695 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
pensheng 2004-11-04
  • 打赏
  • 举报
回复
支持
netcoder 2004-11-04
  • 打赏
  • 举报
回复
还是使用日志审核比较好
如果使用作业记录用户的登陆情况,记录的频率最多是每分钟一次
并且还要重复记录(比如一个用户一直使用)
如果频率过低,有些短暂的连接就会被漏掉
luyulei 2004-11-04
  • 打赏
  • 举报
回复
好!!!!!!!!
friendliu 2004-11-02
  • 打赏
  • 举报
回复
up
hxsam 2004-11-01
  • 打赏
  • 举报
回复
收藏
zjcxc 2004-10-21
  • 打赏
  • 举报
回复
审核级别设置为"全部"的说明(其他的楼主可以看联机帮助)

审核成功和失败的登录操作。可以记录试图的用户访问及其它 SQL Server 登录信息,启用审核用于两种安全模式,并可以记录有关信任和非信任连接的信息。根据 SQL Server 实例日志记录的配置方式,这些事件的日志记录可出现在 Windows 应用程序日志或 SQL Server 错误日志中,也可以在两个日志中同时出现。

如果选择该选项,则必须停止并重新启动服务器以启用审核。

zjcxc 2004-10-21
  • 打赏
  • 举报
回复
如果你只是需要记录用户的登录信息,也可以直接使用SQL的审核功能

设置方法:
企业管理器--右键你的SQL实例名--属性--安全性--审核级别选择全部(或者根据需要选择)

这样就可以在系统日志或者是SQL Server的错误日志中看到用户的登录信息
zjcxc 2004-10-21
  • 打赏
  • 举报
回复
SQL的当前登录用户情况记录在master.dbo.sysprocesses这个系统表中
但不能在系统表上创建触发器,所以不能用触发器的方法来记录用户登录情况

上面是用作业定时监控的方法记录当前登录信息用户.
zjcxc 2004-10-21
  • 打赏
  • 举报
回复
--示例
--在查询分析器中完成:

--1.创建日志数据库
create database db_log
go

--打开日志数据库
use db_log
go

--创建日志记录表
create table tb_log(id decimal(38,0) identity(1,1) primary key
,组号 decimal(38,0)
,记录时间 datetime default getdate()
,登录的计算机名 nchar(128)
,登录用户名 nchar(128)
,客户机网卡物理地址 nchar(12)
,操作的数据库名 sysname)
go

--为了查询方便,生成一个分组表,得到记录了多少组信息
create table tb_loggroup(id decimal(38,0) identity(1,1) primary key,时间 datetime)
go

--创建存储过程,记录连接信息
create proc p_getlinkinfo
as
declare @组号 decimal(38,0)
insert into tb_loggroup values(getdate())
set @组号=@@identity

insert into tb_log(组号,登录的计算机名,操作的数据库名,客户机网卡物理地址,登录用户名)
select distinct @组号,hostname,db_name(dbid),net_address,loginame from master..sysprocesses
where hostname<>''
go

--创建作业,定时记录登录信息
exec msdb..sp_add_job @job_name='日志记录'

--创建作业步骤
declare @sql varchar(800),@dbname varchar(250)
select @sql='exec p_getlinkinfo' --日志记录的命令
,@dbname=db_name() --执行日志记录的命令

exec msdb..sp_add_jobstep @job_name='日志记录',
@step_name = '日志记录处理',
@subsystem = 'TSQL',
@database_name=@dbname,
@command = @sql,
@retry_attempts = 5, --重试次数
@retry_interval = 5 --重试间隔

--创建调度
EXEC msdb..sp_add_jobschedule @job_name = '日志记录',
@name = '时间安排',
@enabled = 1,
@freq_type = 4,
@active_start_time = 0,
@freq_interval = 1,
@freq_subday_type = 4,
@freq_subday_interval = 5, --每隔5分钟记录一次
@freq_relative_interval = 0,
@freq_recurrence_factor = 0,
@active_end_time = 235959

-- 添加目标服务器
EXEC msdb.dbo.sp_add_jobserver
@job_name = '数据处理' ,
@server_name = N'(local)'

/*--
至此,一个每隔5分钟记录一次用户在线信息的JOB就完成了
以后,可以通过下面的语句查询到记录了多少组信息
select * from tb_loggroup

可以用下面的语句查询到具体的记录情况
select * from tb_log
--*/
go

--下面是测试记录处理的存储过程
exec p_getlinkinfo
select * from tb_log
go

--删除测试
use master
drop database db_log
exec msdb..sp_delete_job @job_name='日志记录'
yesyesyes 2004-10-21
  • 打赏
  • 举报
回复
记得上次邹建做过一个储存过程,可以的.

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧