SQLServer数据库之SQLSERVER记录登录用户的登录时间
小标 2019-01-16 来源 : 阅读 2527 评论 0

摘要:本文主要向大家介绍了SQLServer数据库之SQLSERVER记录登录用户的登录时间,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。

本文主要向大家介绍了SQLServer数据库之SQLSERVER记录登录用户的登录时间,通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助。

前一阵子经理问我能不能把用户最后一次登录我们的业务数据库的时间记录下来,因为之前有人修改过数据库sa用户

的登录密码,所以我们要记录一下。

我查了一下资料,好像不能记录谁登录过业务库,只能记录谁登录过SQLSERVER

数据库版本是SQL2005  ,操作系统:Windows7

下面是本人写的一个脚本,我的实现原理是使用触发器,触发器是登录触发器,范围是整个服务器范围,如果有人登录过,就使用

bcp命令把登录信息记录日志文件

1、如果原来数据库已经存在触发器把他删掉

1 USE MASTER2 GO3 DROP TRIGGER trg_logon_attempttest ON ALL SERVER4 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


 

如果遇到这种情况可以使用SQLSERVER的专用管理员连接(DAC)连接进服务器,并把触发器先删除掉

 

日志的样式是这样的:


 1 NT AUTHORITY\SYSTEM    2013-02-08 16:49:04.140  

 2 NT AUTHORITY\SYSTEM    2013-02-08 16:49:14.210  
 3 NT AUTHORITY\SYSTEM    2013-02-08 16:49:24.277  
 4 JOE\Administrator    2013-02-08 16:49:31.753  
 5 JOE\Administrator    2013-02-08 16:49:31.963  
 6 NT AUTHORITY\SYSTEM    2013-02-08 16:49:34.327  
 7 JOE\Administrator    2013-02-08 16:49:35.777  
 8 sa    2013-02-08 16:51:39.930  
 9 NT AUTHORITY\SYSTEM    2013-02-08 16:52:03.147 
 10 NT AUTHORITY\SYSTEM    2013-02-08 16:52:13.337 
 11 NT AUTHORITY\SYSTEM    2013-02-08 16:52:23.410 
 12 NT AUTHORITY\SYSTEM    2013-02-08 16:52:33.830 
 13 NT AUTHORITY\SYSTEM    2013-02-08 16:52:44.703 
 14 NT AUTHORITY\SYSTEM    2013-02-08 16:52:54.407 
 15 NT AUTHORITY\SYSTEM    2013-02-08 16:52:54.623 
 16 NT AUTHORITY\SYSTEM    2013-02-08 16:52:54.797 
 17 NT AUTHORITY\SYSTEM    2013-02-08 16:52:54.823 
 18 NT AUTHORITY\SYSTEM    2013-02-08 16:52:54.893 
 19 NT AUTHORITY\SYSTEM    2013-02-08 16:52:55.147 
 20 NT AUTHORITY\SYSTEM    2013-02-08 16:52:55.277

 

现在还有两个问题没有解决:

(1)我只想记录非Windows验证方式的用户登录,不想记录Windows验证方式的 ,现在还没有找到方法

(2)修改登录用户密码的动作要记录,但是找了很久也没有找到使用什么函数

 

可能这篇文章还有错误,欢迎大家拍砖o(∩_∩)o !!

昨天看了一下AdventureWorks数据库,原来他里面有一个表“dbo.DatabaseLog”

记录了人们对AdventureWorks数据库所做的操作,非常详细,可惜由于他使用服务器范围的触发器

来记录操作信息,而且这个触发器不是 “随库附送”,不然我也可以参考他的触发器代码自己做一个

他记录的内容真的非常详细



查了MSDN也找不到这个触发器,希望见过这个触发器或者知道这个触发器告知我一声,谢谢大家了 o(∩_∩)o 

 今晚在MSDN上找到监控代码,但是依然不能监控密码更改,还有触发器是数据库级别的,不能建立在服务器级别

 1 USE [pratice]; 
 2 GO 
 3 CREATE TABLE ddl_log (PostTime datetime,DatabaseName NVARCHAR(100), DB_User nvarchar(100), Event nvarchar(100),LoginName NVARCHAR(100), TSQL nvarchar(2000)); 
 4 GO 
 5 
 6 SELECT * FROM [dbo].[ddl_log] 
 7  
 8  
 9 CREATE  TRIGGER tri_LogServerEvent 
 10 ON DATABASE  --或者服务器级别 ALL SERVER 
 11 FOR DDL_DATABASE_LEVEL_EVENTS  --或者服务器级别:DDL_SERVER_LEVEL_EVENTS
 12 AS
 13 DECLARE @data XML
 14 SET @data = EVENTDATA()
 15 INSERT ddl_log 
 16    (PostTime,DatabaseName, DB_User, Event, LoginName,TSQL) 
 17    VALUES 
 18    (GETDATE(), 
 19    @data.value('(/EVENT_INSTANCE/DatabaseName)[1]', 'nvarchar(100)'),
 20    CONVERT(nvarchar(100), CURRENT_USER), 
 21    @data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)'),
 22    @data.value('(/EVENT_INSTANCE/LoginName)[1]', 'nvarchar(100)'), 
 23    @data.value('(/EVENT_INSTANCE/TSQLCommand)[1]', 'nvarchar(2000)') ) ;
 24 GO
 25 --Test the trigger.
 26 CREATE TABLE TestTable (a int);
 27 DROP TABLE TestTable ;
 28 GO
 29 SELECT * FROM ddl_log ;
 30 GO
 31 --Drop the trigger.
 32 DROP TRIGGER tri_LogServerEvent
 33 ON DATABASE;
 34 GO
 35 --Drop table ddl_log.
 36 DROP TABLE ddl_log;
 37 GO

本文由职坐标整理并发布,希望对同学们学习SQL Server有所帮助,更多内容请关注职坐标数据库SQL Server数据库频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 2
看完这篇文章有何感觉?已经有3人表态,33%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程