2008-08-06 4 views
27

이전에 사용한 간단한 방법 중 하나는 기본적으로 감사 할 구조를 미러링 한 두 번째 테이블을 만든 다음 기본 테이블에서 업데이트/삭제 트리거를 만드는 것입니다. 레코드가 업데이트/삭제되기 전에 트리거를 통해 현재 상태가 감사 테이블에 저장됩니다.SQL Server에서 감사 테이블을 구현하기위한 제안 사항은 무엇입니까?

감사 테이블의 데이터는 효과적이지만, 보고서를 작성하는 데 가장 유용하거나 간단한 것은 아닙니다. 누구든지 데이터 변경 감사를위한 더 나은 방법이 있는지 궁금합니다.

이러한 레코드에 대한 업데이트가 너무 많으면 안되지만 민감한 정보이므로 모든 변경 사항을 감사하고 쉽게보고하는 것이 중요합니다.

+2

SQL Server 2008에는 새로운 변경 데이터 캡처 기능이 기본 제공되어 있습니다. andyp

+1

이 기능은 엔터프라이즈 판에서 사용 가능합니다. – user17060

+0

변경 데이터 캡처 기능은 응용 프로그램 개체가 감사 솔루션이 아닌 데이터베이스와 일치하도록 유지하는 데 더 많은 것으로 나타납니다. 예를 들어 2 일 동안의 변경 사항 만 저장합니다. 변경 사항을 폴링하여 테이블에 기록해야하므로 다음과 같이 트리거를 작성하여 중앙 감사 테이블에 쓸 수 있습니다. 아, 그리고 위의 URL이 깨졌습니다.이 [link] (http://msdn.microsoft.com/en-us/library/bb933874.aspx)를 사용하십시오. – BJury

답변

17

이 테이블에 대해 얼마나 많은 글을 쓰고 있습니까?

테이블, 열, OldValue, NewValue, 사용자 및 ChangeDateTime에 대한 열과 함께 단일 감사 테이블을 사용했습니다. DB의 다른 변경 작업을 수행 할 수있을 정도로 충분히 많은 데이터가 기록되어있는 동안 그 테이블에 대한 보고서는 그 데이터가 부족하여 낮의 사용 빈도가 낮은 기간에 실행할 수있었습니다.

추가 : 보고 대 데이터의 양이 문제가, 감사 표는 일에서 마스터 서버를 늦추지 않고 필요할 때마다 보고서를 실행할 수 있도록 읽기 전용 데이터베이스 서버에 복제 할 수는 경우 그들의 일.

1

기본 제공 감사 패키지가 있습니까? 오라클은 SQL을 수정하는 악의적 인 사람이 액세스 할 수없는 별도의 서버로 감사 변경을 보냅니다.

예제는 훌륭합니다 ... 감사 테이블을 수정하는 사람에게 경고하는 방법을 보여줍니다.

1

OmniAudit은 좋은 해결책이 될 수 있습니다. 내 자신의 감사 루틴을 작성하는 것이 매우 행복하기 때문에 이전에는 사용 해본 적이 없지만 좋다고 들립니다.

1

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

6

우리는 이것을 위해 두 가지 테이블 디자인을 사용하고 있습니다.

하나의 테이블은 트랜잭션 (데이터베이스, 테이블 이름, 스키마, 열, 트랜잭션을 트리거 한 응용 프로그램, 트랜잭션을 시작한 로그인의 호스트 이름, 날짜, 영향을받는 행의 수 및 몇 개 이상)에 대한 데이터를 보유합니다.

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

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

관련 문제