D-04: 데이터베이스 관리자 권한을 꼭 필요한 계정 및 그룹에 대해서만 허용
분류: DBMS
중요도: 상
개요
점검 내용
관리자 권한이 필요한 계정 및 그룹에만 관리자 권한을 부여하였는지 점검
점검 목적
관리자 권한이 필요한 계정과 그룹에만 관리자 권한을 부여하였는지 점검하여 관리자 권한의 남용을 방지하여 계정 유출로 인한 비인가자의 DB 접근 가능성을 최소화하고자 함
보안 위협
관리자 권한이 필요한 계정 및 그룹에만 관리자 권한을 부여하지 않으면 관리자 권한이 부여된 계정이 비인가자에게 유출될 경우 DB에 접근할 수 있는 위험이 존재함
참고
- -
점검 대상 및 판단 기준
대상
Oracle DB, MSSQL, MySQL, Altibase, Tibero, PostgreSQL, Cubrid 등
판단 기준
✅ 양호: 관리자 권한이 필요한 계정 및 그룹에만 관리자 권한이 부여된 경우
❌ 취약: 관리자 권한이 필요 없는 계정 및 그룹에 관리자 권한이 부여된 경우
조치 방법
관리자 권한이 필요한 계정 및 그룹에만 관리자 권한 부여
조치 시 영향
일반적인 경우 영향 없음
점검 및 조치 사례
Oracle DB
Step 1) SYSDBA 권한 점검
SQL> SELECT username FROM v$pwfile_users WHERE username NOT IN (SELECT grantee FROM d ba_role_privs WHERE granted_role='DBA') AND username != 'INTERNAL' AND SYSDBA = 'TRUE';
-- 어떠한 계정이라도 나오는 경우 취약
Step 2) Admin에 부적합 계정 존재 여부 점검
SQL> SELECT grantee, privilege FROM dba_sys_privs WHERE grantee NOT IN ('SYS', 'SYSTEM', 'AQ_ ADMINISTRATOR_ROLE', 'DBA', 'DSYS', 'BACSYS', 'HEDULER_ADMIN', 'MSYS') AND admin_opti on= 'YES' AND grantee NOT IN (SELECT grantee FROM dba_role_privs WHERE granted_role='DBA');
-- 어떠한 계정이라도 나오는 경우 취약
Step 3) 관리자 권한이 불필요한 계정에서 관련 권한을 제거
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = '계정명';
-- 불필요하게 시스템 권한을 부여한 계정의 권한 변경 필요
REVOKE <권한> FROM <계정명>;
-- 시스템 권한 부여가 필요한 경우 필요한 테이블별 권한 부여
GRANT <권한> ON <테이블명> TO <계정명>;
-- 인가된 사용자는 관리자 권한에 role을 grant한 후, 시스템 권한을 grant하고 role을 인가된 사용자에게 grant 함
GRANT <Role_name> TO <계정명>;
MSSQL
Step 1) sysadmin서버 역할의 계정 목록을 확인 후 서버 역할에 불필요한 계정이 있는 경우 서버 역할에서 삭제
EXEC sp_droprolemember 'user_name', 'sysadmin';
-- 예시) user01계정을 sysadmin서버 역할에서 삭제
EXEC sp_dropsrvrolemember 'user01', 'sysadmin';

MySQL
Step 1) SUPER 권한(관리자 권한)이 부여되어 있는 계정 확인
Step 2) 불필요하게 SUPER 권한이 부여되어 있는 계정에 대해 SUPER 권한 회수
참고
만약 관리자 test@localhost 계정이 바이너리 로그 정리 및 시스템 변수 수정을 위해 SUPER 권한을 필요로 하는 경우 아래와 같은 명령문으로 필요한 권한으로 제한.
Altibase
Step 1) 계정별 부여된 시스템 권한 목록에서 grantee 확인
Step 2) 계정별 부여된 시스템 권한 목록에서 user_id 확인
Step 3) 계정별 부여된 시스템 권한 목록에서 priv_id 확인
Step 4) 일반 사용자 계정 생성 시 시스템에 의해 부여되는 기본 권한 외 입력된 경우 해당 권한 삭제
- 시스템에 의해 자동으로 부여되는 권한
privileged_id- create session create table create sequence create procedure create view create trigger create synonym create materialized view create library
Tibero
Step 1) 계정별 부여된 시스템 권한 목록 확인 후, 아래 명령어 모두 입력
Step 2) dba_users 결과값에서 시스템 계정, 일반 계정 확인

Step 3) dba_sys_privs 결과값에서 일반 계정임에도 시스템 권한을 불필요하게 부여받고 있는지 확인

Step 4) 일반 계정에 불필요한 시스템 권한이 부여된 경우 권한 삭제
PostgreSQL
Step 1) 계정의 용도 파악 후 불필요한 계정은 삭제, 새로운 계정 생성 시 적절한 권한을 부여하여 생성
- 모든 사용자 확인
Step 2) 불필요하게 관리자 권한이 부여된 경우 권한 회수
ALTER ROLE <계정명> NOSUPERUSER;
ALTER ROLE <계정명> NOCREATEROLE;
ALTER ROLE <계정명> NOCREATEDB;
ALTER ROLE <계정명> NOREPLICATION;
ALTER ROLE <계정명> NOBYPASSRLS;
Cubrid
Step 1) 계정의 용도 파악 후 불필요한 계정은 삭제, 새로운 계정 생성 시 적절한 권한을 부여하여 생성
Step 2) DBA 권한을 가진 사용자 계정 확인
DBA 권한을 가진 사용자 중 권한이 불필요한 계정의 권한 회수 or 계정 삭제
- DBA가 가진 권한 한 번에 회수
- DBA가 가진 권한을 명시적으로 회수
REVOKE SELECT ON test FROM 'GRANT_TEST'; REVOKE INSERT ON test FROM 'GRANT_TEST'; REVOKE UPDATE ON test FROM 'GRANT_TEST'; REVOKE DELETE ON test FROM 'GRANT_TEST'; REVOKE ALTER ON test FROM 'GRANT_TEST'; REVOKE DROP ON test FROM 'GRANT_TEST'; REVOKE EXECUTE ON test FROM 'GRANT_TEST'; REVOKE INDEX ON test FROM 'GRANT_TEST'; REVOKE REFERENCES ON test FROM 'GRANT_TEST'; - DBA 권한을 가진 불필요 계정 삭제
Step 3) 필요할 경우 적절한 권한을 부여하여 새로운 계정 생성