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
相关推荐
熊文豪5 天前
SQLServer数据迁移之后,那张报表还能不能秒出
数据库·sqlserver·电科金仓
Alex Gram5 天前
数据库同步工具PanguSync图文教程
java·mysql·postgresql·sqlserver·c#·数据库同步软件·数据库同步工具
哥本哈士奇7 天前
dbt+SQLServer构建数据仓库(10):macro 以及 data vault的应用实例
大数据·数据仓库·sqlserver
哥本哈士奇(aspnetx)9 天前
dbt+SQLServer构建数据仓库(10):macro 以及 data vault的应用实例
sqlserver
哥本哈士奇9 天前
dbt+SQLServer构建数据仓库(8):Vibe Coding用dbt构建data vault数仓
数据仓库·sqlserver
哥本哈士奇(aspnetx)11 天前
dbt+SQLServer构建数据仓库(9):用Vibe Coding创建一个DBT UI
sqlserver
哥本哈士奇(aspnetx)11 天前
dbt+SQLServer构建数据仓库(8):Vibe Coding用dbt构建data vault数仓
sqlserver
ERD Online12 天前
MySQL/Oracle/PG/SQLServer 存量库一键逆向成关系图
mysql·oracle·sqlserver
哥本哈士奇(aspnetx)13 天前
dbt+SQLServer构建数据仓库(6):Jinja与DAG实战
sqlserver
哥本哈士奇13 天前
dbt+SQLServer构建数据仓库(3):dbt_project.yml配置精讲
数据仓库·sqlserver