Save every logon to table by trigger
Save every logon to table by trigger. Every logon will be saved in a table with all the needed information.
Last updated:
Warning: Review and test in a non-production environment before running.
Create Table master.dbo.audit_logins
(
Col_loginName varchar (50),
Col_LoginType varchar (50),
Col_LoginTime datetime,
Col_ClientHost varchar (50)
)
Create TRIGGER TR_audit_logins
ON ALL SERVER WITH EXECUTE AS 'sa'
FOR LOGON
AS
BEGIN
declare @LogonTriggerData xml
set @LogonTriggerData = eventdata() ;
Insert into master..audit_logins
Select @LogonTriggerData.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(50)'),
@LogonTriggerData.value('(/EVENT_INSTANCE/LoginType)[1]', 'varchar(50)'),
@LogonTriggerData.value('(/EVENT_INSTANCE/PostTime)[1]', 'datetime'),
@LogonTriggerData.value('(/EVENT_INSTANCE/ClientHost)[1]', 'varchar(50)')
end
CREATE TABLE ServerLogonHistory
(SystemUser VARCHAR(100),
HostName varchar(100),
DatabaseName varchar(50),
LogonTime DATETIME)
GO
/* Create Logon Trigger */
CREATE TRIGGER Tr_ServerLogon
ON ALL SERVER FOR LOGON
AS
BEGIN
INSERT INTO ServerLogonHistory
SELECT SYSTEM_USER,HOST_NAME(),APP_NAME(), GETDATE()
END
GO
SELECT ORIGINAL_LOGIN(), GETDATE(),ORIGINAL_DB_NAME()
EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]','NVARCHAR(128)')
select HOST_NAME(),APP_NAME(),SUSER_SNAME(),USER_NAME(),SCHEMA_NAME()
select ORIGINAL_LOGIN(), GETDATE(),
CAST(eventdata().query('/EVENT_INSTANCE/ClientHost[1]') as NVarchar(128)),
CAST(eventdata().query('/EVENT_INSTANCE/DatabaseName[1]/text()') as NVarchar(128))
CREATE TABLE Db_names(
SvrName VARCHAR(50),
NAME VARCHAR(50),
UserName VARCHAR(50)
);
GO
CREATE TRIGGER some_logon_trigger
ON ALL SERVER
AFTER LOGON
AS
BEGIN
DECLARE @x XML,
@ServerName NVARCHAR(100),
@DB_Name NVARCHAR(50),
@LoginName NVARCHAR(50),
@Sid VARCHAR(100)
SET @x = EVENTDATA()
SET @ServerName = @x.value('(/EVENT_INSTANCE/ServerName) [1]','nvarchar(100)')
SET @LoginName = @x.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(50)')
SET @DB_Name = (SELECT default_database_name FROM sys.server_principals WHERE name = @LoginName)
INSERT INTO [Db_names]([SvrName],[NAME],[UserName])
VALUES (@ServerName,@LoginName,@DB_Name)
END;
GO
--login to the server
SELECT * FROM db_names