NormalTable
및 AuditNormalTable
.
NormalTable
및 AuditNormalTable
.
답변:
감사 테이블은 특정 테이블에 대한 트랜잭션을 추적하는 데 사용됩니다. 그들은 당신이 (더 나은 단어가 부족한) 지속적인 "로그"를 볼 수 있습니다. 예를 들어, 다음과 같은 테이블이 있다고 가정하십시오.
create table SensitiveInformation
(
SensitiveNumber int not null,
SensitiveData varchar(100) not null
)
go
해당 테이블에서 삽입, 업데이트 및 삭제에 액세스 할 수있는 사용자 및 / 또는 응용 프로그램이있을 수 있습니다. 그러나 해당 데이터의 민감한 특성으로 인해 해당 테이블에서 누가 무엇을하고 있는지를 빠르고 쉽게 추적 할 수 있습니다.
따라서 해당 테이블에서 수행중인 작업을 추적하는 감사 테이블이 있습니다. 일반적으로 기본적인 Who , What , When가 포함 됩니다.
감사 테이블은 다음과 같습니다.
create table SensitiveInformationAudit
(
SensitiveNumberNew int null,
SensitiveNumberOld int null,
SensitiveDataNew varchar(100) null,
SensitiveDataOld varchar(100) null,
Action varchar(50) not null,
AuditDate datetime not null,
LastUpdatedUser varchar(100) not null
)
go
감사 테이블은 일반적으로 데이터베이스 트리거를 사용하여 채워집니다. 즉,에 X
작업이 수행되면에 SensitiveInformation
세부 정보를 삽입하십시오 SensitiveInformationAudit
.
Action
필드 UPDATE
또는 INSERT
나 DELETE
?
지금까지 강조되지 않은 감사 테이블의 또 다른 중요한 측면은, 한 사람을 추적뿐만 아니라 무엇을 (자주 스냅 샷 전후 포함) 기록에 있다는 것입니다 감사 테이블이 회 기록이다 .
감사 테이블의 레코드는 업데이트 또는 삭제 (주 참조) 할 수 없으며 삽입 만 가능 합니다. 이것은 때때로 트리거 또는 응용 프로그램 논리를 사용하여 부과되지만 실제로는 감지하기 어려운 방식으로 조작 된 것이 없음을 "증명"시키기 때문에 실제로 중요합니다.
참고 : 감사 테이블에서 오래된 레코드를 정리하려면 관리 또는 감사자가 승인해야하는 특수 프로세스가 필요합니다.
감사 테이블은 일반적으로 중요한 / 기밀 테이블의 변경 사항을 추적하려는 경우에 사용됩니다. 급여 및 보너스 비율에 사용되는 테이블이 있고 HR 애플리케이션이이 데이터를 기반으로 급여를 보상하는 경우이 테이블에 대한 쓰기 액세스 권한이있는 사용자는 승인되지 않은 지불을 수정할 수 있습니다.
동시에 일부 사용자는이 테이블에서 작업 할 수 있어야합니다. 감사 테이블이 들어오는 곳입니다. 감사 테이블을 사용하여 변경된 데이터의 전후 값을 추적 할 수 있습니다. 일반적으로 변경을 한 사람 및 변경 시간과 같은 추가 정보도 저장합니다.
따라서 이러한 감사 테이블은 권한이없는 활동을 수행하지 못하게합니다. 또한 올바른 값으로 되돌릴 수있는 수단을 제공합니다.
SQL 2008 이상에는 이를 위해 사용할 수있는 Change Data Capture 라는 내장 기능 이 있습니다.