2008-10-20 3 views
6

MySQL 테이블의 모든 변경 사항을 감사하도록 요청 받았습니다. 누구든지이 작업을 수행하는 데 도움이되는 도구를 알고 있거나 내 솔루션을 작성해야합니까?MySQL 테이블 (MySQL 4 사용)의 변경 사항을 어떻게 감사해야합니까?

내 자신의 감사를 작성하는 경우, 처음에는 별도의 테이블을 만들고 PHP 코드에서 변경된 문자열을 작성한다고 생각했습니다. "fieldname1 -> oldvalue | fieldname2 -> oldvalue, ..."와 같은 것입니다. 이 방법에 중대한 문제가 있으면 알려주십시오.

답변

3

DB 테이블의 모든 변경 사항을 캡처하는 유일한 방법은 서버에서 트리거를 사용하는 것입니다. 변경 사항을 감사하기 위해 자신의 코드를 수정하는 위험은 다른 응용 프로그램/사용자 등의 변경 사항이 캡처되지 않는다는 것입니다.

그렇다고해서 MySQL 4가 트리거를 지원하는지 확신 할 수 없습니다.

+0

내 백엔드 솔루션을 구현해야 할 것 같습니다. 아마도 MySQL 5로 업데이트 할 수있는 권한을 얻을 수 있습니다. – Haabda

+0

트리거가 MySQL 5.0에 추가되었습니다. 이 시점에서 실제로 4에서 5로 업그레이드하지 않는 좋은 이유는 없습니다. 5.1은 릴리스 후보이고 6.0은 알파 개발입니다. – acrosman

+0

는 어떤 사용자가 변경 작업을하고 있는지 추적 할 수 있습니까? – andho

3

변경 사항을 감지하고 이전/이후 값을 로그 테이블에 기록하려면 trigger을 사용하십시오.

+0

슬프게도, MySQL 4를 사용하여 막혔습니다. 설명을 위해 질문을 편집하겠습니다. 그래도 좋은 제안. – Haabda

2

당신이 바람을 경우 손으로 압연 트리거 지원하는 솔루션으로 인해 부족, 난 강력하게 추천합니다 당신은 '돈 있음 문자열 blob에 변경 사항을 덤프하면됩니다. 어느 날 당신은 그 데이터를 쿼리하라는 요청을 받게 될 것이고 데이터를 되찾기 위해 문자열 파싱을해야 할 것입니다. (나는 여기서 경험 한 바있다.)

가장 간단한 접근법은 원본 테이블과 동일한 열 모두와 변경 날짜 열 및 순차적 ID가있는 섀도우 감사 테이블을 만드는 것입니다. 그러면 필요한 모든 형식으로 재구성 할 수있는 전체 역사가 있으며 원하는대로 쿼리 할 수 ​​있습니다.