Oracle 보안 관리 Audit 8편 (SQL & Audit Privileges)

안녕하세요 Thinking Man 입니다.

이번 글에서는 권한 감사(Audit)와 다중 계층에서 SQL을 감사하는 방법에 대해 알아보도록 하겠습니다.

이번 글을 읽게 되면 여러 계층에서 SQL과 권한 감사를 구성하는 방법과 권한 감사 제거하는 방법에 대해서 알 수 있습니다.

이 글은 Oracle 11gR2 공식 문서를 참고하여 작성하였습니다.

 

권한 감사 (Oracle Audit Privileges)

이번 글에서는 아래의 내용을 다루고자 합니다.

  • 권한 감사
  • 감사 가능한 권한 유형
  • 권한 감사 구성
  • 권한 감사 제거

 

권한 감사

권한 감사는 SELECT ANY TABLE과 같은 시스템 권한을 사용하는 SQL을 감사합니다. 권한 감사에서는 감사하려는 권한이 성공해야 하는 SQL문을 AUDIT TRAIL에 기록합니다.

 

감사 가능한 권한 유형

시스템 권한을 사용하는 문장을 감사할 수 있습니다. SQL 문장 감사와 비슷하게 권한 감사는 모든 데이터베이스 사용자의 활동이나 지정된 옵션만 감사할 수 있습니다.

만약에 문장 및 권한 감사에 비슷한 감사 옵션을 지정한 경우에는 감사 레코드는 여러 개가 아니라 딱 하나만 생성됩니다.

예를 들어 시스템 권한인 “CREATE TABLE”과 “AUDIT TABLE” 절 모두 감사하기로 설정하였다면 테이블이 생성될 때 하나의 감사 레코드만 생성됩니다.

사용자의 작업이 이미 기존 소유자 및 객체 권한으로 허용되는 경우 권한 감사 레코드가 생성되지 않습니다.

권한 감사는 권한이 부족한 경우에만 감사 레코드가 생성 됩니다.

즉, 어떠한 동작을 수행하는 데 필요한 것이 시스템 권한인 경우에만 권한 감사 데이터가 생성됩니다.

예) 사용자 TKMAN이 SELECT ANY TABLE 시스템 권한을 부여 받았고 SELECT ANY TABLE이 감사 중이라고 가정합니다.

TKMAN이 자신의 테이블(예: TKMAN.EMP)을 SELECT 하였을 때는 SELECT ANY TABLE 권한이 사용되지 않습니다.

이때는 자신의 스키마를 조회하는 SELECT 문을 수행했기 때문에 감사 레코드가 생성되지 않습니다.

하지만 TKMAN이 다른 스키마의 테이블(예: THINKER.EMPLOYEES)을 조회하는 경우에는 감사 레코드가 생성됩니다.

TKMAN 자신의 스키마 외부의 테이블을 SELECT 했으므로 SELECT ANY TABLE 시스템 권한을 사용했기 때문입니다.

 

권한 감사는 SQL 문장 감사보다 더 집중된 감사입니다. 이유는 각 권한 감사 옵션은 관련 문장 목록이 아니라 특정 유형의 문장만을 감사하기 때문입니다.

예를 들어, “AUDIT TABLE” 문장 감사는 CREATE TABLE, ALTER TABLE 및 DROP TABLE 문장을 감사하지만 “CREATE TABLE”권한 감사 옵션 은 CREATE TABLE 문장만을 감사합니다.

CREATE TABLE 문장만 CREATE TABLE 권한이 필요하기 때문입니다.

시스템 권한 목록은 Oracle 문서 GRANT의 Table 18-1 System Privileges 에서 확인 가능합니다.

 

권한 감사 구성

권한 감사 옵션은 Oracle의 시스템 권한과 동일합니다. 예를 들어 DELETE ANY TABLE 권한을 감사하는 옵션은 DELETE ANY TABLE 입니다.

아래 예제에서는 DELETE ANY TABLE 권한을 감사하는 방법을 보여줍니다.

예제) AUDIT를 사용하여 권한 감사 구성

AUDIT DELETE ANY TABLE BY ACCESS;

DELETE ANY TABLE 시스템 권한을 성공적 or 실패한 모든 수행을 감사하려면 아래의 명령으로 수행합니다.

AUDIT DELETE ANY TABLE BY ACCESS;

 

권한 감사 제거

아래의 문장을 사용하여 모든 권한 감사 옵션을 제거할 수 있습니다.

NOAUDIT ALL PRIVILEGES;

아래는 위에서 수행한 DELETE ANY TABLE 감사를 비활성화 하는 예제입니다.

NOAUDIT DELETE ANY TABLE;

권한 감사 옵션을 비활성화 하려면 AUDIT SYSTEM 시스템 권한이 필요합니다. 보안 관리자에게만 이 시스템 권한을 부여하는 것을 권고드립니다.

 

 

다중 계층 환경에서 SQL 문 및 권한 감사

AUDIT 문을 사용하여 다중 계층 환경에서 클라이언트의 활동을 감사할 수 있습니다. 다중 계층 환경에서 Oracle Database는 모든 계층을 통해 클라이언트의 신원을 유지합니다.

따라서 AUDIT 문에서 AUDIT 문의 BY 사용자 절을 사용하여 중간 계층 응용 프로그램을 통해 클라이언트를 대표하여 수행된 작업을 감사가 가능합니다.

이 감사는 프록시 세션을 포함한 모든 사용자 세션에 적용됩니다.

중간 계층은 데이터베이스 세션에서 사용자 클라이언트 신원을 설정할 수 있으며, 이를 통해 중간 계층 응용 프로그램을 통해 최종 사용자 작업을 감사할 수 있습니다.

그런 다음 최종 사용자 클라이언트 사용자가 감사 데이터에 출력됩니다.

 

아래 예제는 사용자 tkman이 발행한 SELECT TABLE 문을 감사하는 방법을 보여줍니다.

예제) 사용자의 SQL 문을 감사하기 위해 AUDIT 사용

AUDIT SELECT TABLE BY tkman;

감사 내용을 확인하려면 DBA_AUDIT_TRAIL View를 조회하여 감사 데이터를 확인할 수 있습니다.

 

그림 예제) 프록시 사용자 감사

Audit Privileges 1

 

아래 그림 예제는 DBA_AUDIT_TRAIL View의 CLIENT_ID 컬럼을 조회하여 여러 데이터베이스 세션 간에 클라이언트 식별자 정보를 감사하는 방법을 보여줍니다.

아래 예제에서 클라이언트 식별자가 “CLIENT_A” 입니다.

위의 그림 예제에서 설명된 프록시 사용자-데이터베이스 사용자 시나리오와 마찬가지로 세션 풀링을 사용할 수 있습니다.

 

그림 예제) 세션 간 클라이언트 식별자 정보 감사

Audit Privileges 1

 

같이 읽으면 좋은 글

> Oracle 보안 관리 Audit 7편 (SQL Audit)

> Oracle 보안 관리 Audit 6편 (Audit 명령문)

> Oracle 보안 관리 Audit 5편 (UNIX SYSLOG Audit)

Oracle 보안 관리 Audit 4편 (OS Audit Trail 2)

 

 

1 thought on “Oracle 보안 관리 Audit 8편 (SQL & Audit Privileges)”

Comments are closed.