2007~2011/SQL Server2009. 1. 8. 11:10

특정 테이블의 데이터가 간헐적으로 알 수 없는 데이터로 변형(?)되는 현상이 종종 발생하고 있습니다. 과연 어떤 녀석이 해당 데이터를 update 하였는지 이를 추적해야 할 필요가 있습니다. SQL Profiler 를 사용하여 이벤트를 추적하는 방법에 대해서 이와 같이 정리하였습니다. 조언을 주신 BorNin74™ 님께 감사 드립니다.


[작업개요]

1. Accounts 테이블 생성
2. 데이터 삽입
3. 프로필러(Profiler) 추적 실행
4. SELECT, UPDATE 명령 수행
5. 프로필러 로그 확인

 


[작업절차]
1. Account 테이블 생성

USE LAIGO
GO

CREATE TABLE Accounts
(
   UserID char(10) NOT NULL,
   UserName varchar(20),
   UserCode int
)


2. 데이터 삽입

INSERT INTO Accounts VALUES('A', 'Hong', 1)
INSERT INTO Accounts VALUES('B', 'GO', 2)
INSERT INTO Accounts VALUES('C', 'KIM', 3)
INSERT INTO Accounts VALUES('D', 'LEE', 4)
INSERT INTO Accounts VALUES('E', 'PARK', 5)
INSERT INTO Accounts VALUES('F', 'CHOI', 6)
INSERT INTO Accounts VALUES('G', 'KANG', 7)


3. SQL 프로필러 실행
 가. 파일 - 새로만들기 - 추적
 나. 일반
  1) 추적 이름 : Account 테이블 추적
  2) 파일에 저장 : 폴더, 파일명 지정
  3) 추적 중지 시간 설정 : 적.당.히



 다. 이벤트
  1) TSQL - SQL:BatchCompleted 항목을 제외하고 모두 제거


 라. 필터 
   1) DatabaseID : 5 -- LAIGO 데이터베이스만 추적 (SP_HELPDB 명령으로 DBID를 확인합니다)
   2) TextData 유사 : %Accounts% -- Accounts 테이블만 추적
   3) TextData 유사하지 않음 : %SELECT%; %DELETE% -- SELECT, DELETE 명령은 추적에서 제외
   4) 실행



 마. 추적 속성 확인



4. SELECT, UPDATE 명령 수행
 가. LAIGO 데이터베이스의 Accounts 테이블에 대해 SELECT 명령을 수행해도 Trace 에 나타나지 않습니다.

USE LAIGO
GO

SELECT * FROM Accounts


 나. UPDATE 명령을 수행할 경우 Trace 에 나타납니다. 어떤 사용자가 어떤 쿼리를 사용하였는지 데이터열에
      기록된 내용을 참조하면 범인을 찾아낼 수 있습니다.

UPDATE Accounts SET UserCode = 99 WHERE UserID = 'H'





5. 프로필러 중지 로그 확인
위의 단계에서 이미 로그를 확인 하였습니다. ^^; 


작성자 : Lai Go / 작성일자 : 2009.01.08

Posted by Lai Go