sp_readerrorlog 查看SQLSERVER日志就可以获取.
如密码错误,登录失败后,日志会纪录以下信息:
Error: 18456, Severity: 14, State: 8.
Login failed for user 'sa'. [CLIENT: XX.XX.XX.XX]
如密码错误,登录失败后,日志会纪录以下信息:
Error: 18456, Severity: 14, State: 8.
Login failed for user 'sa'. [CLIENT: XX.XX.XX.XX]
CREATE TRIGGER T_Server_Login
ON ALL SERVER FOR LOGON
AS
--这里是写一个主机名
SELECT EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]', 'varchar(15)') ROLLBACK TRANGO另外登陆错误不光会保存在SqlServer日志,还会保存在windows的事件探查器中,看起来很方便
'LOGON' is an invalid event type.
create table tmp(a nvarchar(100),b nvarchar(100))CREATE TRIGGER T_Server_Login
ON ALL SERVER FOR LOGON
AS
DECLARE @data XML
SET @data = EVENTDATA()
declare @ClientHost nvarchar(100)
declare @EventType nvarchar(100)
declare @TSQLCommand nvarchar(1000)
--这里是纪录一个主机名和这个事件
SET @ClientHost = @data.value('(/EVENT_INSTANCE/ClientHost)[1]', 'nvarchar(200)')
SET @EventType = @data.value('(/EVENT_INSTANCE/EventType)[1]', 'nvarchar(100)')
insert tmp values(@ClientHost,@EventType)
GO--删除触发器
DROP TRIGGER T_Server_Login ON ALL SERVER
前提是审核事件要把成功和失败都选上
您的环境是SQL Server 2005吗?为什么我的环境上还是不认ON ALL SERVER FOR LOGON中Logon这个事件。我的2005的标准版。
多谢!
不过, 无法在这个触发器中确认登录失败sql 会记录登录失败, 跟sql的配置有关, 只有打开配置才会在日志中记录登录失败(当然默认是打开的), 这个在sql实例属性的安全性--登录审核中配置如果你不想看日志, 则可以用事件探查器跟踪登录事件, 也可以创建事件通知(使用service broker消息传送机制)把登录失败事件直接存储到表中
但这个用好了的话, 可以像触发器一样自动捕获登录失败, 并把它记录到指定的表(甚至可以记录到一台专门的监控服务器)