콘텐츠로 이동

D-06: DB 사용자 계정을 개별적으로 부여하여 사용

분류: DBMS

중요도: 중


개요

점검 내용

DB 접근 시 사용자별로 서로 다른 계정을 사용하여 접근하는지 점검

점검 목적

사용자별 별도 DBMS 계정을 사용하여 DB에 접근하는지 점검하여 DB 계정 공유 사용으로 발생할 수 있는 로그 감사 추적 문제를 대비하고자 함

보안 위협

DB 계정을 공유하여 사용할 경우 비인가자의 DB 접근 발생 시 계정 공유 사용으로 인해 로그 감사 추적의 어려움이 발생할 위험이 존재함

참고

-

점검 대상 및 판단 기준

대상

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

판단 기준

✅ 양호: 사용자별 계정을 사용하고 있는 경우

❌ 취약: 공용 계정을 사용하고 있는 경우

조치 방법

사용자별 계정 생성 및 권한 부여

조치 시 영향

일반적인 경우 영향 없음

점검 및 조치 사례

Oracle DB

Step 1) 계정 확인(SQL*Plus)

SQL> SELECT username FROM dba_users ORDER BY username;

Step 2) 공용 계정 삭제

SQL> DROP USER '공용 계정';

Step 3) 사용자별, 응용 프로그램별 계정 생성

SQL> CREATE USER '<계정명>' IDENTIFIED BY '<비밀번호>';

Step 4) 권한 부여

SQL> GRANT connect, resource TO [계정명];

MSSQL

Step 1) 공용계정 삭제

EXEC sp_droplogin '공용 계정';

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) 공용용 계정 삭제

mysql> DROP USER <계정명>@<호스트명 or IP>

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에 생성된 계정 확인

SELECT * FROM system_.sys_users_;

Step 2) 공용 계정 확인하여 삭제

DROP USER <계정명> CASCADE;

Step 3) 사용자별, 응용 프로그램별 등 목적에 맞게 계정 생성

CREATE USER <계정명> IDENTIFIED BY <비밀번호>;

Tibero

Step 1) DB에 생성된 계정 확인

SELECT * FROM dba_users_;

Step 2) Step1)의 결과에서 공용 계정 확인하여 삭제

DROP USER [삭제할 계정] CASCADE;

Step 3) 사용자별, 응용 프로그램별 등 목적에 맞게 계정 생성

CREATE USER [계정명] IDENTIFIED BY [비밀번호];

PostgreSQL

Step 1) 모든 사용자 확인

-- 쿼리문 조회
SELECT * FROM pg_shadow;
-- 명령어 조회
\du

Step 2) 불필요 계정 삭제

DROP ROLE '삭제할 계정';

Step 3) 계정 생성 및 권한 추가

CREATE USER '생성할 계정';
ALTER ROLE '계정명' '권한명' '권한명' ····;
\du --(계정 생성 및 권한 확인)

참고

계정의 용도 파악 후 불필요한 계정은 삭제, 새로운 계정 생성 시 적절한 권한을 부여하여 생성