학교수업/데이터베이스

데이터베이스 보안 - 6주차. 데이터베이스 관리 시스템 (DBMS) 보안

정보보호학과 새내기 2025. 4. 19. 21:28

(세종대학교) 데이터베이스 보안 - 수업 정리 내용

6.1. 데이터베이스 관리자

  • 데이터베이스 관리자
    • 역할
      • 시스템 권한 부여
      • 일반 사용자 생성 및 권한 부여
      • 백업
      • 감사
    • 시스템 계정별로 다른 수행 ㅜ건한
    • DBMS별로 다른 계정 및 권한의 종류
      • → Oracle, MySQL 중심 학습

6.1.1. 관리자 계정

  • Oracle

    • 설치할 때 자동으로 생성되는 관리자 계정

      • SYS, SYSBACKUP, SYSKM, SYSTEM, SYSDG, SYSRAC
    • SYS 및 SYSTEM 관리자 계정에는 DBA Role 자동 부여

      • 대부분의 데이터베이스 시스템 권한 포함하므로 실제 데이터베이스 관리자에게만 부여
    • SYSDBA, SYSOPER, SYSBACKUP, SYSDG, SYSKM 관리자 권한 미포함

    • DBA role 시스템 권한 확인

      • select * from role_sys_privs where role='DBA';
    • SYS 계정

      • 모든 권한을 가지고 있는 관리자 계정
      • 데이터 사전 소유
      • 데이터베이스 설치 시 SYSDBA 권한 자동 부여
    • SYSTEM 계정

      • SYS 계정과 거의 유사한 기능 수행
      • 아래 기능은 수행 불가
        • 백업 및 복구
        • 데이터베이스 업그레이드
    • SYSBACKUP 계정

      • 백업 및 복구 작업 수행
        • Oracle Recovery Manager(RMAN) 또는 SQL*Plus 내에서 직접 수행
    • SYSDG 계정

      • Data Guard 작업 수행
        • 하나 이상의 동기화된 대기 데이터베이스 생성, 유지, 관리하여 재해 및 데이터 손상을 방지하는 소프퉤어 일종인 Data Guard
    • SYSKM 계정

      • Transparent Data Encryption (TDE) 작업 수행
        • 오라클에서 제공하는 데이터 암호화 기능 수행 가능
    • SYSRAC 계정

      • Oracle Clusterware의 Oracle 에이전트가 Oracle Real Application Clusters (Oracle RAC) 작업 수행
  • MySQL

    • 데이터베이스 설치와 함께 Root 계정 자동 생성
      • Root 계정은 시스템 계정으로 모든 권한 보유
      • root 계정 명은 유추 가능하므로 다른 계정으로 변경 권장
        • ex) update user set user='dbsec' where user='root'; flush privileges; → 변경된 설정값 즉시 반영

6.1.2. 관리자 권한

  • Oracle

    • 대표적인 관리자 권한

      • SYSDBA, SYSOPER → 데이터베이스 생성, 시작, 종료, 백업 또는 복구와 같은 고급 관리 작업을 수행하는데 필요한 관리 권한
    • 사용자 이름과 연결된 스키마가 아닌 기본 스키마 사용하여 접속

      • SYSDBA → SYS
      • SYSOPER → PUBLIC
    • SYSDBA 또는 SYSOPER 관리자 권한 접속

      • sqlplus / as sysdba sqlplus / as sysoper
    • SYSDBA

      • 가장 강력한 관리자 권한
      • 사용자 데이터를 볼 수 있는 기능 포함하여 대부분 작업 허용
      • RESTRICTED SESSION 권한을 가진 사용자만이 DB에 접근할 수 있도록 설정하는 Restricted Mode일 때, 데이터베이스에 접근 할 수 있는 RESTRICTED SESSION 권한 소유
        • STARTUP과 SHUTDOWN(데이터베이스 시작과 종료) 권한
        • ALTER DATABASE (데이터베이스 변경) 권한
          • ALTER DATABASE ARCHIVELOG
            • 데이터베이스를 ARCHIVELOG 모드로 변경
          • ALTER DATABASE RECOVER
            • 데이터베이스 복구
        • CREATE DATABASE (데이터베이스 생성) 권한
        • DROP DATABASE (데이터베이스 삭제) 권한
        • CREATE SPFILE (서버 파라미터 파일 생성) 권한
          • SPFILE : 오라클 시스템 동작에 필수적인 파라미터 정리
            • 변경 설정 값 즉시 반영된다는 장점
    • SYSOPER

      • 사용자가 기본적인 데이터베이스 운영을 위한 작업 수행
      • 사용자 데이터를 볼 수 있는 기능 미제공
      • RESTRICTED SESSION 권한 보유
      • SYSDBA 기능 대부분 수행 가능
        • ALTER DATABASE RECOVER
          • 완전 복구만 가능 (불완전한 복구 기능 미제공, SYSDBA 권한시만 가능)

    • 그 외의 관리자 권한

      • SYSBACKUP, SYSDG, SYSKM, SYSRAC → 권한을 부여받은 사용자에게 계정에서 수행하는 동일한 작업을 가능하게 함
    • 시스템 권한 확인

      • select * from system_privilege_map;
  • MySQL

    • ALL PRIVILEGES 권한
      • grant option 권한 제외한 모든 권한 부여
    • grant 명령어 사용
      • ex) grant all privileges on *.* to 'kim'@'localhost'; → kim에게 모든 권한 부여
      • ex) grant all privileges on kmooc.dbsec to 'kim'@'localhost'; → kim에게 kmooc 데이터베이스의 dbsec 테이블 권한 부여
    • 특이점
      • CREATE USER 권한으로 다양한 기능 수행 가능
        • ALTER USER, DROP USER, CREATE ROLE, RENAME USER, CREATE USER, DROP ROLE, REVOKE ALL PRIVILEGES
        • → oracle의 경우 각각의 권한 필요

6.2. 사용자 생성 및 권한 부여

  • 새로운 맴버
    • 사용자 계정 생성
    • 권한 부여

6.2.1. 사용자 생성

  • Oracle

    • create user 시스템 권한 필요
      • create user 사용자명 identified by 암호;
    • create문으로 사용자 생성해도 권한은 없음
    • 로그인하는데 필요한 create session 시스템 권한 부여
      • grant create session to 사용자명;
  • MySQL

    • create user 권한 필요
    • oracle과 달리 다양한 기능 수행
      • alter user
      • create role
      • create user
      • drop role
      • drop user
      • rename user
      • revoke all privileges
    • 사용자 생성 구문
      • create user '사용자명'@'호스트명' identified by 암호; + flush privileges; (→ 변경사항 바로 적용)
  • 사용자 암호 변경

    • alter user 명령어를 사용해 암호 변경 가능
      • oracle
        • alter user 시스템 권한 필요
        • 사용자 암호 변경 방법
          • alter user 사용자명 identified by 새로운 암호;
      • mysql
        • create user 권한 필요
        • 사용자 암호 변경 방법
          • alter user '사용자명'@'호스트명' identified by 새로운 암호; + flush privileges
  • 사용자 삭제

    • drop user 명령어 사용
      • oracle
        • drop user 시스템 권한 필요
          • drop user 사용자명 [CASCADE];
            • → cascade : 사용자 삭제 전 해당 사용자의 스키마에 있는 모든 객체 삭제
      • mysql
        • create user 권한 필요
          • drop user '사용자명'@'호스트명';

6.2.2. 권한 부여

  • 시스템 권한 부여

  • 객체 권한 부여

    • (테이블, 뷰 등 데이터에 대한 권한 부여)
  • oracle

    • 시스템 권한 부여

      • grant를 사용해 시스템 권한 부여

        • grant 권한 to 사용자 [with admin option];
      • 시스템 권한

        • create table, create view 등 DDL과 관련된 작업에 대한 권한들 포함
      • PUBLIC

        • 특정 사용자를 지정하는 대신 PUBLIC 키워드 이용
        • → 모든 사용자에게 동일한 권한 부여
      • WITH ADMIN OPTION

        • grant 문으로 부여 받은 시스템 권한은 기본적으로 다른 사용자에게 부여할 수 없으나 with admin option을 포함하면 자신이 부여 받은 시스템 권한을 다른 사용자에게 부여 가능
      • 대표적인 시스템 권한

    • 객체 권한 부여

      • 데이터베이스에 존재하는 모든 객체는 기본적으로 해당 객체를 생성한 사용자만 사용 권한 소유
        • 필요에 따라 다른 사용자에게 자신이 소유한 객체에 대한 사용 권한 부여 가능
      • grant를 사용해 객체에 대한 사용 권한 부여
        • grant 권한 on 객체 to 사용자 [with grant option]
      • public / with admin option
  • mysql

    • 시스템/객체 권한 부여시 동일한 구문 형식
    • 권한 부여 명령문
      • grant 권한명 on 데이터베이스명.테이블명 to '사용자명'@'호스트명';
    • 글로벌 권한
      • 데이터베이스나 테이블 이외의 객체에 적용되는 권한

6.3. 역할 (Role)

6.3.1. 역할 기반 권한 부여

  • 권한 관리를 통한 보안 방법

  • 역할

    • 여러 권한의 집합 → 각각의 권한 부여가 아닌 역할 부여
    • 객체에 대한 여러 권한을 그룹화한 것
      • 객체 권한 부여 대비 편리한 수행
      • 여러 사용자에게 동일한 권한 부여 작업을 효율적으로 수행 가능
  • 많은 DBMS에서 데이터베이스 보안을 위해 역할기반 권한 부여 기능을 제공

  • MySQL은 버전 8.0부터 역할 기능 제공

  • 역할 기반 권한 부여 방법은 oracle과 mysql 동일

6.3.2. 역할 생성 및 권한 부여

  • 역할 기반 권한 부여 단계

    • 역할 생성 → 역할에 권한 부여 → 역할을 사용자에게 부여
  • 역할 생성

    • create role 역할이름;
    • 데이터베이스 관리자가 수행
    • → 오라클에서는 뒤에 identified by '암호' 를 붙여 역할 사용시 암호 필요하게 만들 수 있음
  • 역할에 권한 부여

    • grant 권한 on 객체 to 역할이름;
      • 객체의 소유자가 수행
  • 사용자에게 역할 부여

    • grant 역할이름 to 사용자;

6.3.3. 역할 및 권한 취소

  • 역할에 부여된 권한 취소
    • revoke 권한 on 테이블 from 역할;
  • 사용자 역할 취소
    • revoke 역할이름 from 사용자;
  • 역할 삭제
    • drop role 역할이름;

6.4. 뷰 (view)

6.4.1. 뷰

  • 하나 이상의 테이블을 합하여 만든 가상의 테이블

    • (select 문을 통해 얻은 검색 결과를 모아 나타내는 것)
      • 여러 테이블 합쳐질 수도 있고,
      • 한 테이블에서도 분리해서 보여줄 수 있음
      • 이미 생성된 뷰를 기반으로 뷰 생성 가능
  • 장점

    • 질의어 간소화
      • 검색을 위한 복잡한 SQL 문을 매번 작성하지 않아도 됨
    • 데이터에 대한 보안
      • 사용자에게 접근이 허용된 테이블 내 일부 데이터만을 제한적으로 보여주고자 할 때 사용
      • (특정 데이터만 선택)
    • 논리적 데이터 독립성
      • 데이터베이스에 영향을 주지 않고, 응용 프로그램이 원하는 형태로 데이터에 접근할 수 있도록 하는 것
  • 단점

    • 논리적으로만 존재하는 가상 테이블로 select 문을 제외한 일부 물리적인 테이블의 갱신 작업에 제약 존재
      • insert, update, delete 문은 상황에 따라 제약 발생
      • alter문을 사용한 뷰 정의 변경 불가

6.4.2. 뷰 생성 및 삭제

  • 생성 구문
    • create view 뷰이름[(속성리스트)] as select문 [with check option];
      • [with check option] → 나중에 뷰에서 삽입이나 수정 연산을 할 때 초기 정의 위반하면 수행되지 않도록 제약 조건 지정
  • 삭제
    • drop view 뷰이름;
    • alter문 수행 불가하므로 수정을 하려면 이전 뷰 삭제후 새로운 뷰 재생성
    • 해당 뷰를 특정 뷰가 참조하고 있는 경우와 같이 제약 조건을 가진 경우 뷰 삭제 불가하므로 관련 제약조건 삭제부터 수행
    • 가상의 테이블이므로 뷰를 삭제하더라도 참조했던 테이블(기본 테이블)은 영향을 받지 않음

6.4.3. 뷰 조작

  • 업데이트

    • update 테이블이름 set 속성이름1 = 값1, 속성이름2 = 값2, ... [where 조건];
      • 제시된 조건을 만족하는 튜플 지정하기 위한 것 → where 조건 없으면 모든 튜플 수정
  • 개념

    • 뷰 테이블 내 튜플 값 수정하는 것 외에 데이터에 대해 insert, delete 문을 사용하여 삽입 및 삭제 가능
    • 특정 경우 데이터 조작어(dml) 사용 불가
  • 변경 불가 뷰

    • 기본 테이블의 기본키를 구성하는 속성이 포함되어 있지 않은 뷰
      • 참조 테이블의 기본키가 있어야 데이터 조작어 사용 가능
    • 기본 테이블에서 not null로 지정된 속성이 포함되어 있지 않은 뷰
    • 기본 테이블에 있던 내용이 아닌 집계 함수로 새로 계산된 내용을 포함하는 뷰
    • distinct 키워드 포함하여 정의한 뷰
    • group by 절 포함하여 정의한 뷰
    • 여러 개 테이블을 조인하여 정의한 뷰
  • 조작 방법

    • 테이블에 사용하는 DML과 동일

6.5 데이터베이스 감사

6.5.1. 보안 감사 개요

  • 감사

    • 특정 프로그램이나 시스템 내에서 발생 하는 로그인을 포함한 모든 행동을 모니터링하는 것
    • 작업이 올바르게 이루어졌는지 검토
  • 데이터베이스에서 감사의 의미

    • 데이터베이스는 여러 사용자와 응용 프로그램이 함께 사용하므로 중요한 데이터 변경 시, 누가, 언제 변경했는지 확인 필요
      • 데이터베이스 관련 작업 수행 정보 조사
      • 조직 이익에 반할만한 행위 조사

6.5.2. 데이터베이스 감사

  • 대부분 DBMS 감사 기능 제공
  • oracle 감사 기능
    • 기본값 : 감사 수행 x
    • 감사 기능 동작
      • 파라미터 파일의 audit_trail 값을 os, db로 변경하면 동작
    • 감사 규칙 설정
      • 모든 행동을 기록하도록 설정 → 비효율적
        • 로그양 방대
      • 문제 발생 시 원인을 찾기 위한 로그 분석 시간 큼 → 명확한 규칙 지정 필요
      • 감사 규칙 예시
        • 특정 질의문 사용시 기록
        • 실패 또는 성공한 로그인 기록
    • 감사 작업 유형
      • 로그인 감사
        • 데이터베이스에 사용자들이 로그인 또는 시도하는 경우 감사 진행
        • 질의문 구조
          • audit session [whenever successful | notsuccessful];
          • audit session [whenever successful | notsuccessful];
          • audit 감사 시작, whenever 특정 시점 (성공 or 실패, 안 적으면 둘 다), noaudit 감사 중단
      • 행동 감사
        • 특정 질의문 실행되면 기록
          • dml
        • 질의문 구조
          • audit action [by user] [by session | access] [whenever successful | notsuccessful];
          • noaudit action [by user] [whenever successful | notsuccessful];
          • action
            • 감사할 질의문 작성
            • view, table 과 같은 객체만 지정 가능
          • user
            • 특정 사용자 지정 감사 수행
            • 사용자 미지정 → 지정한 질의문 발생시 모든 사용자 감사 수행
          • session
            • 세션별로 지정한 질의문 수행
            • 동일한 문장 여러 번 실행 → 한번만 기록
          • access
            • 감사할 문장을 실행할 때마다 기록
      • 객체 감사
        • 특정 객체에 실행되는 질의문에 대한 감사 수행
        • 행동 감사와 유사하나 감사 초점이 객체
        • 질의문 구조
          • audit action on object [by session | access] [whenever successful | notsuccessful];
          • noaudit action on object [by session | access] [whenever successful | notsuccessful];
          • on
            • 감사를 수행할 특정 객체 지정
            • 객체마다 사용할 수 있는 질의문이 따로 존재하기 때문에 지정되는 행동이 객체에 따라 달라질 수 있음