(세종대학교) 데이터베이스 보안 - 수업 정리 내용
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
- Data Guard 작업 수행
SYSKM 계정
- Transparent Data Encryption (TDE) 작업 수행
- 오라클에서 제공하는 데이터 암호화 기능 수행 가능
- 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;
→ 변경된 설정값 즉시 반영
- ex)
- 데이터베이스 설치와 함께 Root 계정 자동 생성
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
- 데이터베이스 복구
- ALTER DATABASE ARCHIVELOG
- CREATE DATABASE (데이터베이스 생성) 권한
- DROP DATABASE (데이터베이스 삭제) 권한
- CREATE SPFILE (서버 파라미터 파일 생성) 권한
- SPFILE : 오라클 시스템 동작에 필수적인 파라미터 정리
- 변경 설정 값 즉시 반영된다는 장점
- SPFILE : 오라클 시스템 동작에 필수적인 파라미터 정리
SYSOPER
- 사용자가 기본적인 데이터베이스 운영을 위한 작업 수행
- 사용자 데이터를 볼 수 있는 기능 미제공
- RESTRICTED SESSION 권한 보유
- SYSDBA 기능 대부분 수행 가능
- ALTER DATABASE RECOVER
- 완전 복구만 가능 (불완전한 복구 기능 미제공, SYSDBA 권한시만 가능)
- ALTER DATABASE RECOVER
그 외의 관리자 권한
- 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 테이블 권한 부여
- ex)
- 특이점
- CREATE USER 권한으로 다양한 기능 수행 가능
- ALTER USER, DROP USER, CREATE ROLE, RENAME USER, CREATE USER, DROP ROLE, REVOKE ALL PRIVILEGES
- → oracle의 경우 각각의 권한 필요
- CREATE USER 권한으로 다양한 기능 수행 가능
- ALL PRIVILEGES 권한
6.2. 사용자 생성 및 권한 부여
- 새로운 맴버
- 사용자 계정 생성
- 권한 부여
6.2.1. 사용자 생성
Oracle
- create user 시스템 권한 필요
create user 사용자명 identified by 암호;
- create문으로 사용자 생성해도 권한은 없음
- 로그인하는데 필요한 create session 시스템 권한 부여
grant create session to 사용자명;
- create user 시스템 권한 필요
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
- oracle
- alter user 명령어를 사용해 암호 변경 가능
사용자 삭제
- drop user 명령어 사용
- oracle
- drop user 시스템 권한 필요
drop user 사용자명 [CASCADE];
- → cascade : 사용자 삭제 전 해당 사용자의 스키마에 있는 모든 객체 삭제
- drop user 시스템 권한 필요
- mysql
- create user 권한 필요
drop user '사용자명'@'호스트명';
- create user 권한 필요
- oracle
- 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 문을 통해 얻은 검색 결과를 모아 나타내는 것)
- 여러 테이블 합쳐질 수도 있고,
- 한 테이블에서도 분리해서 보여줄 수 있음
- 이미 생성된 뷰를 기반으로 뷰 생성 가능
- (select 문을 통해 얻은 검색 결과를 모아 나타내는 것)
장점
- 질의어 간소화
- 검색을 위한 복잡한 SQL 문을 매번 작성하지 않아도 됨
- 데이터에 대한 보안
- 사용자에게 접근이 허용된 테이블 내 일부 데이터만을 제한적으로 보여주고자 할 때 사용
- (특정 데이터만 선택)
- 논리적 데이터 독립성
- 데이터베이스에 영향을 주지 않고, 응용 프로그램이 원하는 형태로 데이터에 접근할 수 있도록 하는 것
- 질의어 간소화
단점
- 논리적으로만 존재하는 가상 테이블로 select 문을 제외한 일부 물리적인 테이블의 갱신 작업에 제약 존재
- insert, update, delete 문은 상황에 따라 제약 발생
- alter문을 사용한 뷰 정의 변경 불가
- 논리적으로만 존재하는 가상 테이블로 select 문을 제외한 일부 물리적인 테이블의 갱신 작업에 제약 존재
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
- 감사를 수행할 특정 객체 지정
- 객체마다 사용할 수 있는 질의문이 따로 존재하기 때문에 지정되는 행동이 객체에 따라 달라질 수 있음
- 로그인 감사
'학교수업 > 데이터베이스' 카테고리의 다른 글
데이터베이스 보안 - 7주차. 데이터베이스 시스템 보안 (2) | 2025.04.19 |
---|---|
데이터베이스 보안 - 5주차. 데이터베이스 보안 개요 (2) | 2025.04.19 |
데이터베이스 보안 - 4주차. 구조화 질의어 (SQL) (3) | 2025.04.12 |
데이터베이스 보안 - 3주차. 관계형 데이터베이스 (RDB) (0) | 2025.04.12 |
데이터베이스 보안 - 2주차. 데이터베이스 관리 시스템 (DBMS) (2) | 2025.04.12 |