D-06: DB 사용자 계정을 개별적으로 부여하여 사용
분류: DBMS
중요도: 중
개요
점검 내용
DB 접근 시 사용자별로 서로 다른 계정을 사용하여 접근하는지 점검
점검 목적
사용자별 별도 DBMS 계정을 사용하여 DB에 접근하는지 점검하여 DB 계정 공유 사용으로 발생할 수 있는 로그 감사 추적 문제를 대비하고자 함
보안 위협
DB 계정을 공유하여 사용할 경우 비인가자의 DB 접근 발생 시 계정 공유 사용으로 인해 로그 감사 추적의 어려움이 발생할 위험이 존재함
참고
-
점검 대상 및 판단 기준
대상
Oracle DB, MSSQL, MySQL, Altibase, Tibero, PostgreSQL 등
판단 기준
✅ 양호: 사용자별 계정을 사용하고 있는 경우
❌ 취약: 공용 계정을 사용하고 있는 경우
조치 방법
사용자별 계정 생성 및 권한 부여
조치 시 영향
일반적인 경우 영향 없음
점검 및 조치 사례
Oracle DB
Step 1) 계정 확인(SQL*Plus)
Step 2) 공용 계정 삭제
Step 3) 사용자별, 응용 프로그램별 계정 생성
Step 4) 권한 부여
MSSQL
Step 1) 공용계정 삭제
Step 2) 사용자별, 응용 프로그램별 계정 생성
CREATE LOGIN '생성 계정' WITH PASSWORD = '비밀번호';
CREATE USER '생성 계정' FOR LOGIN '생성 계정' WITH DEFAULT_SCHEMA ='생성 계정';
ALTER USER '생성 계정';
EXEC sp_adduser '생성 계정', '생성 계정', 'db_owner';
EXEC sp_adduser '생성 계정', '생성 계정', '생성 계정';
EXEC sp_grantdbaccess '생성 계정', '생성 계정';
MySQL
Step 1) 공용용 계정 삭제
Step 2) 사용자별, 응용 프로그램별 계정 생성 및 권한 설정
-- 사용자 계정 생성
mysql> create user '<계정명>'@'<호스트명 or IP>' identified by '비밀번호';
-- 특정 데이터베이스의 특정 테이블에 select, insert 권한을 부여
mysql> grant select, insert on DB이름.테이블명 to '<계정명>'@'<호스트명 or IP>';
-- 특정 데이터베이스의 모든 테이블에 모든 권한을 부여
mysql> grant all privileges on DB이름.* to '<계정명>'@'<호스트명 or IP>';
mysql> flush privileges;
참고
모든 권한을 부여할 경우, 해당 사용자는 지정된 데이터베이스에서 모든 작업의 수행이 가능하므로 사용자의 관리적 측면에서는 편리하나, 보안적 측면에서는 필요한 최소한의 권한만 부여하여 안정성을 높여야 함
Altibase
Step 1) DB에 생성된 계정 확인
Step 2) 공용 계정 확인하여 삭제
Step 3) 사용자별, 응용 프로그램별 등 목적에 맞게 계정 생성
Tibero
Step 1) DB에 생성된 계정 확인
Step 2) Step1)의 결과에서 공용 계정 확인하여 삭제
Step 3) 사용자별, 응용 프로그램별 등 목적에 맞게 계정 생성
PostgreSQL
Step 1) 모든 사용자 확인
Step 2) 불필요 계정 삭제
Step 3) 계정 생성 및 권한 추가
참고
계정의 용도 파악 후 불필요한 계정은 삭제, 새로운 계정 생성 시 적절한 권한을 부여하여 생성