성능 및 확장성 문제 없이 데이터베이스 활동을 감사하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/67557

문제

응용 프로그램에서 발생했는지 또는 다른 수단을 통해 일부 SQL을 실행하는 사람인지 여부에 관계없이 모든 데이터베이스 활동을 감사해야 합니다.따라서 감사는 데이터베이스 수준에서 수행되어야 합니다.문제의 데이터베이스는 Oracle입니다.저는 Triggers와 Oracle이 제공하는 Fine Grained Auditing을 통해 이를 수행하는 방법을 살펴보았습니다.두 경우 모두 특정 테이블과 특정 열에 대한 감사를 활성화했습니다.그러나 우리는 이러한 방법 중 하나를 사용할 때 성능이 정말 좋지 않다는 것을 발견했습니다.

데이터 개인 정보 보호에 대한 규정으로 인해 감사는 반드시 필요한 작업이므로 심각한 성능 저하 없이 이를 수행하는 가장 좋은 방법이 무엇인지 궁금합니다.누군가가 이에 대한 Oracle 관련 경험이 있다면 도움이 될 것입니다. 그러나 데이터베이스 활동 감사에 관한 일반적인 관행뿐만 아니라 괜찮을 것입니다.

도움이 되었습니까?

해결책

그것이 생산 시스템에 충분한 접근 방식인지 확실하지 않지만 네트워크 트래픽 스나이퍼를 사용하여 데이터베이스 트래픽을 모니터링하는 데 많은 성공을 거두었습니다.

응용 프로그램과 데이터베이스 사이의 원시 데이터를 다른 컴퓨터로 보내고 해독하고 분석하십시오.

PostgreSQL을 사용하여 트래픽을 디코딩하고이를 기록 할 수있는 데이터베이스 작업 스트림으로 전환하는 것이 비교적 간단했습니다.패킷 형식이 문서화 된 데이터베이스에서 작동한다고 생각합니다.

중요한 점은 데이터베이스 자체에 추가 부하를 주지 않는다는 것입니다.

또한 수동 모니터링이었고 모든 활동을 기록했지만 작업을 차단할 수는 없었으므로 원하는 것이 아닐 수도 있습니다.

다른 팁

"직접 굴릴" 필요는 없습니다.감사를 켜십시오.

  1. 데이터베이스 매개변수 AUDIT_TRAIL = DB를 설정합니다.
  2. 인스턴스를 시작합니다.
  3. SQLPlus로 로그인하세요.
  4. 명세서를 입력하세요
    audit all;
    이렇게 하면 많은 중요한 DDL 작업에 대한 감사가 활성화되지만 DML 및 기타 DDL 문은 여전히 ​​감사되지 않습니다.
  5. 이러한 다른 활동에 대한 감사를 활성화하려면 다음과 같은 명령문을 사용해 보십시오.
    audit alter table; -- DDL audit
    audit select table, update table, insert table, delete table; -- DML audit

메모:모든 "sysdba" 활동은 항상 O/S에 대한 감사를 받습니다.Windows에서는 Windows 이벤트 로그를 의미합니다.UNIX에서는 일반적으로 $ORACLE_HOME/rdbms/audit입니다.

확인해 보세요 Oracle 10g R2 감사 장 데이터베이스 SQL 참조의 내용입니다.

데이터베이스 감사 추적은 SYS.DBA_AUDIT_TRAIL 뷰에서 볼 수 있습니다.

내부 Oracle 감사는 정의상 고성능이 될 것이라는 점을 지적해야 합니다.그것은 정확하게 그렇게 설계되었으며, 성능 면에서 이 제품과 경쟁할 수 있는 다른 제품을 상상하기가 매우 어렵습니다.또한 Oracle 감사에 대한 높은 수준의 "세밀한" 제어가 가능합니다.원하는 만큼 정확하게 얻을 수 있습니다.마지막으로, SYSTEM 테이블스페이스가 가득 차는 것을 방지하기 위해 SYS.AUD$ 테이블과 해당 인덱스를 별도의 테이블스페이스로 이동할 수 있습니다.

친절한 안부, Opus

대상 시스템에 변경된 레코드의 복사본을 기록하려는 경우 Golden Gate Software를 사용하면 소스 측 리소스 소모가 많이 발생하지 않습니다.또한 이 솔루션을 구현하기 위해 소스 데이터베이스를 변경할 필요가 없습니다.

Golden Gate는 관심 있는 테이블 목록을 참조하여 트랜잭션에 대한 리두 로그를 긁어냅니다.이러한 변경 사항은 '트레일 파일'에 기록되고 동일한 데이터베이스의 다른 스키마에 적용되거나 대상 시스템으로 전달되어 거기에 적용될 수 있습니다(소스 시스템의 로드를 줄이는 데 이상적).

추적 파일을 대상 시스템에 가져오면 몇 가지 구성을 조정할 수 있으며 감사를 수행하는 옵션을 설정할 수 있으며 필요한 경우 2개의 Golden Gate 기능을 호출하여 트랜잭션에 대한 정보를 얻을 수 있습니다.

1) 소스 테이블에 대한 모든 변경 작업에 대해 대상 테이블에 새 레코드를 삽입하려면 INSERTALLRECORDS 복제 매개변수를 설정합니다.이는 많은 공간을 차지할 수 있지만 포괄적인 감사가 필요한 경우에는 이것이 예상될 수 있습니다.

2) 레코드에 CHANGED_BY_USERID 및 CHANGED_DATE가 아직 첨부되어 있지 않은 경우 대상 측에서 Golden Gate 기능을 사용하여 현재 거래에 대한 이 정보를 얻을 수 있습니다.GG 참조 가이드에서 다음 기능을 확인하세요.Ggheader ( "userId") Ggheader ( "타임 스탬프")

따라서 무료는 아니며(Oracle을 통한 라이센스 필요) 가동하는 데 약간의 노력이 필요하지만 자체적으로 롤링하는 맞춤형 솔루션을 구현하고 유지하는 것보다 노력/비용이 훨씬 적으며 데이터를 전달하는 추가적인 이점도 있습니다. 소스 데이터베이스에 미치는 영향을 최소화할 수 있도록 원격 시스템에 저장합니다.

oracle을 사용하는 경우 감사 종류의 요구 사항에 대해 보다 성능 효율적인 솔루션인 CDC(Capture data Change)라는 기능이 있습니다.

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