SQL Server 监控login的IP

extended events方式虽然也有IP选项,但后面3位被屏蔽成.xx,根本没用。

只好选择有trigger的方式。trigger设置得不正确,可能导致所有用户都登不上。

特此修改了一下,即使失败也不会影响登录

sql 复制代码
use DBWatch
go

CREATE TABLE [dbo].[dbadmin_audit_login](
	[LogDate] [datetime] NULL,
	[LoginName] [varchar](100) NULL,
	[ClientHost] [varchar](40) NULL
)
GO

CREATE NONCLUSTERED INDEX [idx_LogDate] ON [dbo].[dbadmin_audit_login]
(
	[LogDate] ASC
)
GO
sql 复制代码
CREATE TRIGGER [dbadmin_audit_login]
ON ALL SERVER 
WITH EXECUTE AS SELF
FOR LOGON
AS
BEGIN
    -- 1. Safely capture the event data in the native trigger context
    DECLARE @LogonData XML = EVENTDATA();

    -- 2. Check if the database 'dbadmin' exists and is online
    IF DB_ID('DBWatch') IS NOT NULL 
       AND DATABASEPROPERTYEX('DBWatch', 'Status') = 'ONLINE'
    BEGIN
        -- 3. Check if the table exists
        IF OBJECT_ID('DBWatch.dbo.dbadmin_audit_login', 'U') IS NOT NULL
        BEGIN
            BEGIN TRY
                -- 4. Parse XML and pass values into the dynamic SQL scope
                EXEC sp_executesql 
                    N'INSERT INTO DBWatch.dbo.dbadmin_audit_login (LogDate, LoginName, ClientHost) 
                      VALUES (
                          GETDATE(), 
                          @EventXML.value(''(/EVENT_INSTANCE/LoginName)[1]'', ''VARCHAR(100)''),
                          @EventXML.value(''(/EVENT_INSTANCE/ClientHost)[1]'', ''VARCHAR(40)'')
                      );',
                    N'@EventXML XML',
                    @EventXML = @LogonData;
            END TRY
            BEGIN CATCH
                -- Fails silently to prevent locking out users if an unexpected error occurs
            END CATCH
        END
    END
END

GO
相关推荐
半桶水专家6 小时前
SQL Server DML 操作语句完全指南
数据库·sqlserver
测试修炼手册11 天前
[测试技术] JUnit 6 入门与实战:断言、参数化与 Mockito
数据库·junit·sqlserver
心之语歌11 天前
SQL Server 按月分区实战:动态边界自动生成方案
sqlserver
bosins15 天前
部署SSIS并增加SQL Server代理作业,任务正常执行但事件查看器一直报DCOM权限问题
sqlserver·ssis·权限·dcom·事件查看器
xuefuhe15 天前
SQL Server sp_replmonitorsubscriptionpendingcmds
sqlserver
龙仔72518 天前
SQL Server 批量多库只读账号一键脚本(带逐行注释完整脚本 + 分段逐句详细解释)
服务器·数据库·sql·sqlserver·dba
xuefuhe23 天前
SQL Server查看系统存储过程及视图的定义
sqlserver
techdashen23 天前
Uber 如何完成超大规模 JUnit 迁移:从 JUnit 4 到 JUnit 5 的自动化工程实践
junit·sqlserver·自动化
xuefuhe25 天前
SQL Server Configuration Manager报Cannot connect to WMI provider错误
sqlserver