문제

과거에 사용한 간단한 방법 중 하나는 기본적으로 감사하려는 테이블과 구조가 동일한 두 번째 테이블을 만든 다음 기본 테이블에 업데이트/삭제 트리거를 만드는 것입니다.레코드가 업데이트/삭제되기 전에 현재 상태는 트리거를 통해 감사 테이블에 저장됩니다.

효과적이긴 하지만 감사 테이블의 데이터는 보고하기에 가장 유용하거나 간단하지 않습니다.데이터 변경 사항을 감사하는 더 좋은 방법이 있는지 궁금합니다.

이러한 기록에 대한 업데이트가 너무 많아서는 안 되지만 이는 매우 민감한 정보이므로 모든 변경 사항을 감사하고 쉽게 보고하는 것이 고객에게 중요합니다.

도움이 되었습니까?

해결책

글을 얼마나 쓰는지 vs.이 테이블을 읽을 것으로 예상됩니까?

Table, Column, OldValue, NewValue, User 및 ChangeDateTime에 대한 열이 포함된 단일 감사 테이블을 사용했습니다. 이는 DB의 다른 변경 사항에 대해 작업할 수 있을 만큼 충분히 일반적이며 많은 데이터가 해당 테이블에 기록되는 동안 보고서를 작성합니다. 해당 데이터는 하루 중 사용량이 적은 시간에 실행할 수 있을 만큼 드물었습니다.

추가됨:데이터 양과 비교하면보고가 중요하기 때문에 감사 테이블을 읽기 전용 데이터베이스 서버에 복제할 수 있으므로 마스터 서버의 작업 수행을 방해하지 않고 필요할 때마다 보고서를 실행할 수 있습니다.

다른 팁

우리는 이를 위해 두 개의 테이블 디자인을 사용하고 있습니다.

하나의 테이블은 트랜잭션에 대한 데이터(데이터베이스, 테이블 이름, 스키마, 열, 트랜잭션을 트리거한 애플리케이션, 트랜잭션을 시작한 로그인의 호스트 이름, 날짜, 영향을 받은 행 수 등)를 보유하고 있습니다.

두 번째 테이블은 필요한 경우 변경 사항을 취소하고 이전/새 값을 보고할 수 있도록 데이터 변경 사항을 저장하는 데만 사용됩니다.

또 다른 옵션은 이를 위해 다음과 같은 타사 도구를 사용하는 것입니다. ApexSQL 감사 또는 SQL Server의 변경 데이터 캡처 기능.

다음 두 링크가 유용하다고 생각합니다.

CLR 및 단일 감사 테이블을 사용합니다.
SQL 2005 CLR을 사용하여 일반 감사 트리거 만들기

감사되는 각 테이블에 대해 트리거와 별도의 감사 테이블을 사용합니다.
SQL Server 데이터의 변경 사항을 감사하려면 어떻게 해야 하나요?

내장된 감사 패키지가 있습니까?Oracle에는 SQL을 수정하는 악의적인 사용자가 액세스할 수 없는 별도의 서버로 감사 변경 사항을 보내는 멋진 패키지가 있습니다.

그들의 모범은 대단합니다 ...감사 테이블을 수정하는 사람에게 경고하는 방법을 보여줍니다.

옴니감사 당신이 필요로하는 좋은 솔루션이 될 수 있습니다.나는 내 자신의 감사 루틴을 작성하는 것이 매우 즐거웠기 때문에 이전에 그것을 사용해 본 적이 없지만 듣기에는 좋습니다.

나는 Greg가 그의 책에서 설명한 접근법을 사용합니다. 답변 테이블 트리거에서 호출된 저장 프로시저로 감사 테이블을 채웁니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top