개발하는 월퐁잉
놀면서 쉬면서 코딩 하기
개발하는 월퐁잉
전체 방문자
오늘
어제
  • 분류 전체보기 N
    • DBMS N
      • DBeaver
      • HeidiSQL
      • MSSQL N
      • MYSQL
    • Cloud
      • Azure
      • AWS
    • 업무
      • Slack
      • IT-Tip
      • 산업안전교육
    • Vue
    • HTML
    • Java
    • Gradle
    • IntelliJ
    • GIT

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • dba
  • Trigger
  • npm install
  • Eclipse
  • 미러링
  • 근로자정기교육
  • 인텔리제이
  • 대한산업안전협회
  • SQL Server
  • vue
  • GIT
  • 산업안전보건교육
  • MySQL
  • ALTER TABLE
  • 권한설정
  • MSSQL
  • DBeaver
  • Vue.js
  • Query
  • IntelliJ

최근 댓글

최근 글

티스토리

250x250
250x250
hELLO · Designed By 정상우.
개발하는 월퐁잉

놀면서 쉬면서 코딩 하기

DBMS/MSSQL

[MSSQL] 로그온 트리거 (Login Trigger)

2023. 9. 21. 11:27
728x90

SQL 접속시 언제 누가 로그온 했는지 기록을 남겨야 했다

간단하게 Login Trigger 를 사용하여 DB 에 기록을 남겨보도록 하겠다


1. 접속 기록을 보관할 테이블 생성

 

USE DatabaseName

CREATE TABLE [dbo].[TableName](
	[SessionId] [INT] NULL,
	[SID] [VARCHAR](50) NULL,
	[LogonTime] [DATETIME] NULL,
	[ProgramName] [VARCHAR](50) NULL,
	[HostName] [VARCHAR](50) NULL,
	[ClientHost] [VARCHAR](50) NULL,
	[LoginName] [VARCHAR](50) NULL,
	[EventType] [VARCHAR](10) NULL,
	[ServerName] [VARCHAR](50) NULL,
	[LoginType] [VARCHAR](50) NULL,
	[IsPooled] [INT] NULL
) ON [PRIMARY]

 

 

 

2. 로그온 트리거 생성

 

CREATE TRIGGER TriggerName
ON ALL SERVER FOR LOGON
AS
BEGIN
	DECLARE	@LogonTriggerData xml
			, @SPID		INT
			, @SID		VARCHAR(50)
			, @LogonTime	DATETIME
			, @ServerName	VARCHAR(50)
			, @ClientHost	VARCHAR(50)
			, @LoginName	VARCHAR(50)
			, @EventType	VARCHAR(10)
			, @LoginType	VARCHAR(50)
			, @IsPooled	INT
			
	SET @LogonTriggerData = eventdata() 		
	SET @SPID = @LogonTriggerData.value('(/EVENT_INSTANCE/SPID)[1]', 'INT')						-- SPID      
	SET @SID = @LogonTriggerData.value('(/EVENT_INSTANCE/SID)[1]', 'VARCHAR(50)')				-- SID
	SET @LogonTime = @LogonTriggerData.value('(/EVENT_INSTANCE/PostTime)[1]', 'DATETIME')		-- POSTTIME														-- PROGRAM_NAME
	SET @ServerName = @LogonTriggerData.value('(/EVENT_INSTANCE/ServerName)[1]', 'VARCHAR(50)')	--ServerName
	SET @ClientHost = @LogonTriggerData.value('(/EVENT_INSTANCE/ClientHost)[1]', 'VARCHAR(50)') 	--IP
	SET @LoginName = @LogonTriggerData.value('(/EVENT_INSTANCE/LoginName)[1]', 'VARCHAR(50)')	--LOGINNAME
	SET @EventType = @LogonTriggerData.value('(/EVENT_INSTANCE/EventType)[1]', 'VARCHAR(10)')	--EventType
	SET @LoginType = @LogonTriggerData.value('(/EVENT_INSTANCE/LoginType)[1]', 'VARCHAR(50)')	--LOGINTYPE
	SET @IsPooled = @LogonTriggerData.value('(/EVENT_INSTANCE/IsPooled)[1]', 'INT')				-- 연결 폴링을 사용하여 연결 1 / 아닐경우 0

	IF program_name()='.Net SqlClient Data Provider' OR program_name()='Microsoft SQL Server Management Studio'
        BEGIN 

			INSERT INTO PERF.dbo.TableName
			( 
                	[SessionId]
                	, [SID] 
                	, [LogonTime]
                	, [ProgramName]
                	, [HostName] 
                	, [ClientHost]
                	, [LoginName]
                	, [EventType] 
                	, [ServerName] 
                	, [LoginType]
                	, [IsPooled] 
			) 
			SELECT	@SPID
                    , @SID 
                    , @LogonTime
                    , program_name()
                    , HOST_NAME()
                    , @ClientHost
                    , @LoginName
                    , @EventType
                    , @ServerName
                    , @LoginType
                    , @IsPooled

		END
END
GO

 

728x90

 

[참고 - 트리거 (Trigger) 잘못 설정하였을때]

 

[MSSQL] 트리거(Trigger) 잘못 설정하여 로그인 되지 않을 때

ISMS 대응 으로 LogOn Trigger를 사용했는데 를 잘못된 설정으로 로그인이 되지 않은 경우가 있었다. sysadmin 계정, 윈도우 계정 등 모든 계정으로 시도 해도 SQL SERVER 접근이 되지 않았다. 내 마음의 사

hotinme35.tistory.com

 

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'DBMS > MSSQL' 카테고리의 다른 글

[MSSQL] LDF 파일 없이 MDF 로만 DB 복원 방법  (0) 2023.09.21
[MSSQL] 로그인 히스토리 쿼리  (0) 2023.09.21
[MSSQL] 메시지 3702, 수준 16, 상태 3, 줄 1Cannot drop database "database name" because it is currently in use.  (0) 2023.05.04
[MSSQL] index 리빌드 - 인덱스 다시 구성  (0) 2023.02.24
[MSSQL] DB(Database) 전체 백업, 데이터베이스 Full BackUp  (0) 2023.02.14
    'DBMS/MSSQL' 카테고리의 다른 글
    • [MSSQL] LDF 파일 없이 MDF 로만 DB 복원 방법
    • [MSSQL] 로그인 히스토리 쿼리
    • [MSSQL] 메시지 3702, 수준 16, 상태 3, 줄 1Cannot drop database "database name" because it is currently in use.
    • [MSSQL] index 리빌드 - 인덱스 다시 구성
    개발하는 월퐁잉
    개발하는 월퐁잉
    놀멍 쉬멍 개발하는 퐁 - 기억은 사라지지만 기록은 남는다

    티스토리툴바