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
相关推荐
1314lay_100718 分钟前
C#调用Sql Server存储过程,并且使用传入表结构
数据库·经验分享·笔记·sqlserver·c#
1314lay_10073 小时前
C#调用Sql Server存储过程,有返回值的
数据库·sqlserver·c#
Aime_Perfect3 天前
sqlserver AlwaysOn(一)
数据库·sqlserver
Aime_Perfect5 天前
sqlserver always on
服务器·数据库·sqlserver
xuefuhe8 天前
SQL Server 模拟checksum检测错误
sqlserver
数智启示录13 天前
Flink CDC 机制精讲(四):一条 SQLServer CDC 事件如何保持顺序 【面试宝典】
数据库·面试·sqlserver·flink
数据库小学妹15 天前
SQL Server数据迁移怎么做?一次事故复盘:备份还原、bcp、CDC、KDTS全拆解
sqlserver·备份还原·数据库迁移·信创迁移·sqlserver数据迁移
xuefuhe15 天前
SQL Server exec vs sp_executesql
sqlserver
zengjuan100516 天前
[特殊字符]️ 松鼠备份 | 数据库备份方案即将重磅上线!三大模式组合拳,精准守护SQL Server每一笔数据
数据库·sqlserver·数据库备份·全量备份·增量备份·差异备份·日志和事务备份
识途老码16 天前
docker运行sqlserver
docker·容器·sqlserver