Computer >> 컴퓨터 >  >> 프로그램 작성 >> 데이터 베이스

MSSQL Server에서 작업 감사 자르기 및 삭제

이 블로그에서는 MSSQL 서버의 테이블에서 데이터 자르기 및 제거를 담당하는 사용자를 결정하고 책임이 있는 엔터티를 식별하는 단계에 대해 설명합니다.

예:테이블이 잘린 시기와 테이블에서 데이터가 제거된 시기는? 누가 테이블을 자르고 테이블에서 데이터를 제거했습니까?

이 정보를 수집하는 이유

누군가가 데이터를 고의 또는 실수로 삭제했는지 확인하여 개인을 추적하고 예방 조치를 취할 수 있습니다. 이 정보를 찾는 고객의 요청은 거의 없습니다. 데이터 제거 작업의 정확한 시간을 알면 로그 백업 작업 중 stop at 절을 사용하여 데이터를 쉽게 복구할 수 있습니다.

문제 요약

다음 섹션에서는 GitOps의 4가지 주요 원칙을 설명합니다.

오후 5시 사이 그리고 오후 7시 2020년 1월 5일 "dump truncate" 테이블이 잘리고 "dump delete" 테이블의 데이터가 "truncate test" DB에서 제거되었습니다. 해결해야 할 가능한 질문은 다음과 같습니다.

  • 문제가 무엇인지 파악해야 합니다.
  • "dump_delete" 테이블에서 누가 데이터를 제거했습니까?
  • "덤프 삭제" 테이블에서 몇 개의 행이 삭제되었습니까?
  • "dump_truncate" 테이블을 누가 잘랐습니까?
  • 이 표는 언제 잘리고 삭제되었습니까?
  • 서버에서 현재 백업 일정은 다음과 같습니다.
  • 매주 일요일에 전체 백업이 수행됩니다.
  • 매일 오후 1시, diff 백업
  • 로그 백업은 15분마다 생성됩니다.

전제 조건:

  • DB는 전체 복구 모드에 있어야 합니다.
  • 전체, diff 및 로그 백업을 사용할 수 있어야 합니다.

높은 수준에서 접근:

  1. 삭제 및 자르기 작업을 보유하는 로그 백업을 식별합니다.
  2. 로그 백업을 사용하여 자르기 및 삭제 작업의 세부 정보를 식별합니다.

삭제 및 자르기 작업을 포함하는 로그 백업 결정:

참고 :우리는 DB의 새 복사본을 생성하여 이러한 단계를 수행했습니다.

  1. 1월 2일 일요일 전체 백업을 대기 모드로 복원합니다.

  2. 대기 모드로 1월 5일 diff 백업 복원

  3. 대기 모드로 로그 백업을 복원합니다. 각 로그 복원 후 테이블 수를 확인하여 자르기 및 삭제 작업 로그를 보유하는 로그 백업을 확인하십시오.

오후 6시부터 로그 백업을 복원했을 때 "dump truncate" 테이블이 비어 있었고 "dump delete" 테이블의 항목이 누락되었습니다. 결과적으로 다음을 나타냅니다.

오후 5시 45분에서 6시 사이에 "dump truncate" 테이블이 잘렸고 "dump delete" 테이블의 데이터가 동시에 지워졌습니다.

다음 복원 명령을 실행해야 합니다.

로그 백업을 사용하여 자르기 및 삭제 작업에 대한 세부정보 식별:

1단계:오후 5시 45분에서 6시 사이에 발생한 모든 자르기 및 삭제 작업에 대한 트랜잭션 ID 수집

쿼리:

삭제 및 자르기라는 두 가지 작업이 오후 5시 50분에 실행되었으며 이러한 작업은 로그인 RP Dev에 의해 수행되었음을 발견했습니다.

2단계:거래 ID와 연결된 테이블 이름을 찾습니다.

삭제 작업에 대한 정보를 얻으려면 다음 단계를 따르세요.

I) 삭제 작업의 개체 ID와 파티션 ID를 결정합니다.

이 출력에서 ​​다음 정보를 추론할 수 있습니다.설명 및 트랜잭션 이름 열:삭제 작업이 수행되었습니다.

  • 시작 시간:삭제 작업이 2022/01/05 17:50:22:493에 시작되었습니다.
  • Login_Name:RP_DEV가 삭제 작업을 실행했습니다.
  • 잠금 정보:접두사 "HoBt"로 시작하는 각 행은 하나의 행 삭제를 나타내며 총 7행입니다.
  • 데이터가 제거된 테이블과 연결된 개체 ID입니다.
  • 파티션 ID:데이터가 삭제된 개체의 파티션 ID

II) 개체 ID와 파티션 ID가 포함된 테이블을 찾습니다.

쿼리:

이제 "dump delete"의 데이터가 트랜잭션 ID '0000:00016a96'으로 오후 5시 50분에 RP DEV 사용자에 의해 제거되었으며 총 7개의 행이 삭제되었음을 추론할 수 있습니다.

자르기 작업에 대한 정보를 얻으려면 다음 단계를 따르세요.

I) Truncate 작업의 개체 ID와 파티션 ID를 결정합니다.

출력:

이제 "dump delete"의 데이터가 트랜잭션 ID '0000:00016a96'으로 오후 5시 50분에 RP DEV 사용자에 의해 제거되었으며 총 7개의 행이 삭제되었음을 추론할 수 있습니다.

자르기 작업에 대한 정보를 얻으려면 다음 단계를 따르세요.

I) Truncate 작업의 개체 ID와 파티션 ID를 결정합니다.

쿼리:

출력

자르기 작업의 출력은 삭제 작업의 출력과 약간 다릅니다.

파티션 ID 열:올바른 파티션 ID가 표시되지 않습니다. 설명 열에서 이 정보를 찾을 수 있습니다. 파티션 ID가 강조 표시됩니다. 파티션 ID는 72057594043564032 및 72057594043629568입니다.

잠금 설명: 항상 SCH_M_OBJECT 행 잠금 설명에 올바른 개체 ID가 표시됩니다. 개체 ID:885578193

개체 ID와 파티션 ID가 포함된 테이블 찾기

쿼리:

출력

이제 "dump truncate"의 데이터가 트랜잭션 ID '0000:00016a95'로 RP_DEV 사용자에 의해 오후 5시 50분에 잘렸다는 것을 확인할 수 있습니다.

결론

감사가 아직 활성화되지 않은 경우 이러한 일이 다시 발생하지 않도록 데이터에 대해 자르기 및 삭제 작업을 수행한 사람을 아는 것이 유용합니다. 삭제 작업의 경우 기업에서 제거된 행 수를 알 수 있습니다. 데이터를 복구하는 데 매우 유용합니다. ApexSQL Log 및 ApexSQL Recover와 같은 추가 타사 도구를 사용하여 데이터를 복구할 수도 있습니다. 이 도구에 대한 지식은 이 링크를 참조하십시오.

당사 전문가가 차세대 데이터 플랫폼 여정을 안내해 드립니다.

피드백 탭을 사용하여 의견을 작성하거나 질문하십시오. 저희와 대화를 시작할 수도 있습니다.