D-20: 인가되지 않은 Object Owner의 제한
분류: DBMS
중요도: 하
개요
점검 내용
Object Owner가 인가된 계정에게만 존재하는지 점검
점검 목적
Object Owner가 비인가자에게 존재하고 있는 경우 중요 데이터에 대한 무단 접근이 가능하여 데이터의 일관성 및 무결성을 해치는 위험이 발생할 수 있으므로 비인가 된 계정의 Object Owner를 제한하여 내부 및 외부의 보안 위협을 최소화하기 위함
보안 위협
Object Owner는 SYS, SYSTEM과 같은 데이터베이스 관리자 계정과 응용 프로그램의 관리자 계정에만 존재하여야 하며, 일반 계정이 존재할 경우 공격자가 이를 이용하여 Object의 수정, 삭제가 가능하므로 중요 정보의 유출 및 변경의 위험이 존재함
참고
Object(객체)
ALTER, DELETE, EXECUTE, INDEX, INSERT, SELECT 등을 말함
점검 대상 및 판단 기준
대상
Oracle DB, Altibase, Tibero, PostgreSQL 등
판단 기준
✅ 양호: Object Owner가 SYS, SYSTEM, 관리자 계정 등으로 제한된 경우
❌ 취약: Object Owner가 일반 사용자에게도 존재하는 경우
조치 방법
Object Owner를 SYS, SYSTEM, 관리자 계정으로 제한 설정
조치 시 영향
일반적인 경우 영향 없음
점검 및 조치 사례
Oracle DB
Step 1) 설정 확인(SQL*Plus)
SQL> SELECT DISTINCT owner FROM dba_objects WHERE owner NOT IN ('SYS', 'SYSTEM', 'MD SYS', 'CTXSYS', 'ORDSYS', 'ORDPLUGINS', 'AURORA$JIS$UTILITY$', 'HR', 'ODM', 'ODM_MTR', ' OE', 'APDBA', 'OLAPSYS', 'OSE$HTTP$ADMIN', 'OUTLN', 'LBACSYS', 'MTSYS', 'PM', 'PUBLIC', ' QS', 'QS_ADM', 'QS_CB', 'QS_CBADM', 'DBSNMP', 'QS_CS', 'QS_ES', 'QS_OS', 'QS_WS', 'RMAN', 'S H', 'WKSYS', 'WMSYS', 'XDB') AND owner NOT IN (SELECT grantee FROM ba_role_privs WHERE granted_role = 'DBA');
Step 2) 권한 취소
Altibase
Step 1) 사용자에게 부여된 Object 권한 정보 확인
Step 2) 부여된 권한 ID를 확인하여 불필요한 권한 회수

Tibero
Step 1) 데이터베이스 내 모든 스키마 Object 특권의 정보를 조회하여 인가받지 않은 Object 권한 소유자가 있는지 확인
Step 2) 잘못된 Object 권한 소유자 발견 시 권한 회수
PostgreSQL
Step 1) Object 권한 정보 확인
postgres=# SELECT DISTINCT relowner FROM pg_class WHERE relowner NOT IN (SELECT usesysid FROM pg_user WHERE usesuper = TRUE);
Step 2) 잘못된 Object 권한 소유자 발견 시 권한 회수