콘텐츠로 이동

D-11: DBA 이외의 인가되지 않은 사용자가 시스템 테이블에 접근할 수 없도록 설정

분류: DBMS

중요도: 상


개요

점검 내용

시스템 테이블에 일반 사용자 계정이 접근할 수 없도록 설정되어 있는지 점검

점검 목적

시스템 테이블의 일반 사용자 계정 접근 제한 설정 적용 여부를 점검하여 일반 사용자 계정 유출 시 발생할 수 있는 비인가자의 시스템 테이블 접근 위험을 차단하기 위함

보안 위협

시스템 테이블의 일반 사용자 계정 접근 제한 설정이 되어있지 않을 경우 Object, 사용자, 테이블 및 뷰, 작업 내역 등의 시스템 테이블에 저장된 정보가 누출될 수 있음

참고

-

점검 대상 및 판단 기준

대상

Oracle DB, MSSQL, MySQL, Altibase, Tibero, PostgreSQL 등

판단 기준

✅ 양호: 시스템 테이블에 DBA만 접근 가능하도록 설정되어 있는 경우

❌ 취약: 시스템 테이블에 DBA 외 일반 사용자 계정이 접근 가능하도록 설정되어 있는 경우

조치 방법

시스템 테이블에 일반 사용자 계정이 접근할 수 없도록 설정

조치 시 영향

일반 계정으로 시스템 테이블 접근 불가

점검 및 조치 사례

Oracle DB, Tibero

Step 1) DBA만 접근 가능한 테이블의 권한 확인

SQL> SELECT grantee, privilege, owner, table_name FROM dba_tab_privs WHERE (owner = 'SYS' or t able_name LIKE 'DBA_%') AND privilege <> 'EXECUTE' AND grantee NOT IN ('PUBLIC', 'AQ_AD MINISTRATOR_ROLE', 'AQ_USER_ROLE', 'AURORA$JIS$UTILITY$', 'OSE$HTTP$ADMIN', 'TR ACESVR', 'CTXSYS', 'DBA', 'DELETE_CATALOG_ROLE', 'EXECUTE_CATALOG_ROLE', 'EXP_F ULL_DATABASE', 'GATHER_SYSTEM_STATISTICS', 'HS_ADMIN_ROLE', 'IMP_FULL_DATAB ASE', 'LOGSTDBY_ADMINISTRATOR', 'MDSYS', 'ODM', 'OEM_MONITOR', 'OLAPSYS', 'ORDSY S', 'OUTLN', 'RECOVERY_CATALOG_OWNER', 'SELECT_CATALOG_ROLE', 'SNMPAGENT', 'SY STEM', 'WKSYS', 'WKUSER', 'WMSYS', 'WM_ADMIN_ROLE', 'XDB', 'LBACSYS', 'PERFSTAT', 'X DBADMIN') AND grantee NOT IN (SELECT grantee FROM dba_role_privs WHERE granted_role = 'D BA') ORDER BY grantee;
-- (어떤 계정이나 role이 나타나지 않으면 양호)

Step 2) 불필요하게 테이블 접근 권한이 사용자 계정에 할당된 경우

SQL> REVOKE <권한> ON <Object> FROM user;

MSSQL

Step 1) system tables 접근 권한이 PUBLIC, GUEST 또는 비인가된 사용자에게 부여된 경우 접근 권한을 제거

REVOKE <권한> ON <Object> FROM [계정명]|[PUBLIC]|[GUEST];

Step 2) 시스템 테이블에 접근하기 위해서는 stored procedure 또는 information_schema views를 통해 접근해야 함

Step 3) 시스템 테이블에 접근 가능한 stored procedure는 사용이 제한되어야 함

MySQL

Step 1) 사용자 계정에 부여된 권한 확인

SHOW GRANTS FOR <계정명>;

Step 2) 접근이 필요한 데이터베이스 및 테이블에만 권한 적용

GRANT <권한> privileges ON <DB명>.<테이블명> to '<계정명>'@'<호스트명 or IP>';

Altibase

Step 1) sys_tables_를 조회하여 system_ 외 접근 계정 유무 확인

SELECT * FROM system_.sys_tables_;

Step 2) 불필요 계정 접근 시 해당 접근 해제

PostgreSQL

Step 1) 사용자 및 역할 권한 정보 조회

SELECT * FROM information_schema.role_table_grants;

Step 2) 스키마명에 해당되는 Table에 대한 접근 권한을 일반 사용자로부터 제거

REVOKE [all,select,insert,update...] ON all tables IN schema '스키마명' FROM '계정명';