SQLSERVER记录登录用户的登录时间
前一阵子经理问我能不能把用户最后一次登录我们的业务数据库的时间记录下来,因为之前有人修改过数据库sa用户
的登录密码,所以我们要记录一下。
我查了一下资料,好像不能记录谁登录过业务库,只能记录谁登录过SQLSERVER
数据库版本是SQL2005 ,操作系统:Windows7
下面是本人写的一个脚本,我的实现原理是使用触发器,触发器是登录触发器,范围是整个服务器范围,如果有人登录过,就使用
bcp命令把登录信息记录日志文件
1、如果原来数据库已经存在触发器把他删掉
1 USE MASTER 2 GO 3 DROP TRIGGER trg_logon_attempttest ON ALL SERVER 4 GO
2、在D盘新建一个文本文件 d:\Logondata.txt 这个文本文件用来记录登录信息
3、创建一个登录触发器审核登录事件
1 CREATE TRIGGER trg_logon_attempttest 2 ON ALL SERVER 3 WITH EXECUTE AS'sa' 4 FOR LOGON,ALTER_LOGIN 5 AS 6 BEGIN 7 DECLARE 8 @cmd nvarchar(4000) 9 ; 10 SELECT 11 @cmd = 'ECHO ' 12 + ORIGINAL_LOGIN()+ CHAR(9) + CONVERT(varchar(100), GETDATE(), 121) 13 + ' >> d:\Logondata.txt' 14 ; 15 DECLARE @tb_re TABLE(re varchar(4000)); 16 INSERT @tb_re exec master.. xp_cmdshell @cmd 17 END 18 GO
这样当每次登录SQLSERVER的时候就会记录登录时间和登录用户名
在创建触发器前,需要开启xp_cmdshell扩展存储过程,并且不要禁用sa用户
不然会遇到下面这种情况,登录不了服务器,我的计算机名是joe