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
相关推荐
码农阿豪7 天前
SQL Server数据迁移完成后,凌晨的数据库告警该怎么查?
数据库·sqlserver
实泽有之,无泽虚之8 天前
SQL Server数据库备份与还原详解
数据库·sqlserver
吃一碗粉只付一碗钱8 天前
16-SqlSugar多库ConfigId与按实体选连接
sqlserver·c#
handsome_sai10 天前
SQL Server 快速入门
数据库·sqlserver
吃一碗粉只付一碗钱13 天前
10-令牌里的用户主键不要明文
服务器·数据库·sql·sqlserver·c#
aloha_78916 天前
Java 基础、集合、异常与 JUnit 5 速查
java·junit·sqlserver
betazhou21 天前
Apache Seatunnel 抽取SQL server实时同步到Oracle-多表同步(五)
数据库·oracle·sqlserver·apache·seatunnel
betazhou23 天前
Apache seatunel配置-数据同步测试(直接把采集数据打印到控制面板) - SQL server
sqlserver·apache·seatunnel
福娃筱欢25 天前
SQLServer迁移至KES SQLServer模式 问题整理
数据库·oracle·sqlserver
xuefuhe1 个月前
SQL Server:数据库没配置publication,但sp_replcounters 显示有事务积压
sqlserver