2009-03-30 3 views
1

연결 문자열의 사용자 ID는 변수가 아니며 프로그램의 사용자 ID (예 : GUID 일 수 있음)와 다릅니다. 연결 문자열의 사용자 ID가 정적 인 경우 로그 삭제를 어떻게 감사합니까?로그 삭제를 감사하는 가장 좋은 방법은 무엇입니까?

삽입/업데이트/삭제를 기록하는 가장 좋은 장소는 트리거를 통과하는 곳입니다. 하지만 정적 연결 문자열을 사용하면 누가 무언가를 삭제했는지 기록하기가 어렵습니다. 대안은 무엇입니까?

답변

1

SQL Server를 사용하면 CONTEXT_INFO를 사용하여 정보를 트리거에 전달할 수 있습니다.

나는 이것을 트리거 (예 : 테이블에 여러 개의 쓰기 경로)를 사용해야하는 코드 (웹 앱이라고 함)에서 사용합니다. 여기서 내 논리를 저장 프로 시저에 넣을 수 없습니다.

0

비슷한 상황이 있습니다. 우리의 웹 응용 프로그램은 항상 동일한 데이터베이스 사용자로 실행되지만 응용 프로그램 추적 및 제어와는 다른 논리적 사용자가 있습니다.

우리는 일반적으로 논리적 사용자 ID를 매개 변수로 각 저장 프로 시저에 전달합니다. 삭제를 추적하기 위해 일반적으로 행을 삭제하지 않고 상태를 삭제됨으로 표시하고 그에 따라 LastChgID 및 LastChgDate 필드를 설정합니다. 감사 로그 (모든 변경 상태의 복사본)를 보관하는 중요한 테이블의 경우 위의 방법을 사용하고 트리거가 행을 감사 테이블에 복사하고 LastChgID가 이미 올바르게 설정되어 있고 트리거가 걱정할 필요가 없습니다 ID를 얻는 방법에 대해.