보안: 사용자 접근 권한 부여

1. 서론

Oracle 데이터베이스에서 보안은 매우 중요한 요소입니다. 특히, 사용자 접근 권한 관리는 데이터 무결성, 기밀성, 가용성을 보장하는 데 핵심적인 역할을 수행합니다. 이번 가이드에서는 Oracle 데이터베이스에서 사용자 접근 권한을 효과적으로 관리하는 방법에 대해 자세히 설명하고 실무에 바로 적용 가능한 예시를 제공합니다.

2. 권한의 기본 개념

권한은 특정 데이터베이스 객체 (예: 테이블, 뷰, 프로시저)에 대해 특정 작업을 수행할 수 있는 권리입니다. Oracle 데이터베이스는 크게 시스템 권한과 객체 권한으로 나뉩니다.

  • 시스템 권한 (System Privileges): 데이터베이스 전반에 걸쳐 특정 작업을 수행할 수 있는 권한입니다. 예를 들어, 테이블 생성 (CREATE TABLE), 사용자 생성 (CREATE USER), 시스템 설정 변경 등이 있습니다.
  • 객체 권한 (Object Privileges): 특정 데이터베이스 객체에 대한 작업을 수행할 수 있는 권한입니다. 예를 들어, 테이블에 대한 SELECT, INSERT, UPDATE, DELETE 권한 등이 있습니다.

3. 사용자 및 롤 생성

사용자를 생성하고 필요한 권한을 부여하는 것은 기본적인 보안 설정의 시작입니다. 롤(Role)을 사용하면 여러 사용자에게 동일한 권한 집합을 쉽게 부여하고 관리할 수 있습니다.

3.1 사용자 생성 예시

다음은 사용자를 생성하고 비밀번호를 설정하는 예시입니다.

CREATE USER hr_manager IDENTIFIED BY password123;

3.2 롤 생성 예시

다음은 HR_ROLE이라는 롤을 생성하는 예시입니다.

CREATE ROLE HR_ROLE;

4. 권한 부여 및 회수

사용자 또는 롤에 권한을 부여하고 필요에 따라 회수할 수 있습니다. 권한 부여에는 GRANT 명령을, 회수에는 REVOKE 명령을 사용합니다.

4.1 시스템 권한 부여 예시

다음은 HR_ROLE 롤에 테이블 생성 권한 (CREATE TABLE)을 부여하는 예시입니다.

GRANT CREATE TABLE TO HR_ROLE;

다음은 hr_manager 사용자에게 롤을 부여하는 예시입니다.

GRANT HR_ROLE TO hr_manager;

4.2 객체 권한 부여 예시

다음은 hr_manager 사용자에게 employees 테이블에 대한 SELECT 권한을 부여하는 예시입니다.

GRANT SELECT ON employees TO hr_manager;

WITH GRANT OPTION 절을 사용하면 해당 권한을 받은 사용자가 다른 사용자에게 권한을 다시 부여할 수 있습니다.

GRANT SELECT ON employees TO hr_manager WITH GRANT OPTION;

4.3 권한 회수 예시

다음은 HR_ROLE 롤에서 테이블 생성 권한을 회수하는 예시입니다.

REVOKE CREATE TABLE FROM HR_ROLE;

다음은 hr_manager 사용자에게서 HR_ROLE 롤을 회수하는 예시입니다.

REVOKE HR_ROLE FROM hr_manager;

5. 뷰를 이용한 권한 관리

뷰는 특정 테이블의 일부 열이나 행만 보여주도록 제한하여 데이터 접근을 제어하는 데 유용합니다.

5.1 뷰 생성 예시

다음은 employees 테이블에서 특정 열 (employee_id, first_name, last_name, department_id)만 보여주는 emp_view 뷰를 생성하는 예시입니다.

CREATE VIEW emp_view AS
SELECT employee_id, first_name, last_name, department_id
FROM employees;

5.2 뷰에 대한 권한 부여 예시

다음은 hr_manager 사용자에게 emp_view 뷰에 대한 SELECT 권한을 부여하는 예시입니다.

GRANT SELECT ON emp_view TO hr_manager;

6. 저장 프로시저를 이용한 권한 관리

저장 프로시저는 데이터베이스 서버에 저장된 SQL 코드 블록입니다. 저장 프로시저를 사용하면 데이터 접근 로직을 캡슐화하고, 사용자에게 테이블에 직접 접근 권한을 부여하지 않고도 데이터에 접근할 수 있도록 할 수 있습니다.

6.1 저장 프로시저 생성 예시

다음은 특정 부서의 직원 정보를 반환하는 get_employees_by_dept 저장 프로시저를 생성하는 예시입니다.

CREATE OR REPLACE PROCEDURE get_employees_by_dept (
 p_dept_id IN NUMBER,
 p_cursor OUT SYS_REFCURSOR
) AS
BEGIN
 OPEN p_cursor FOR
  SELECT employee_id, first_name, last_name
  FROM employees
  WHERE department_id = p_dept_id;
END;
/

6.2 저장 프로시저 실행 권한 부여 예시

다음은 hr_manager 사용자에게 get_employees_by_dept 저장 프로시저 실행 권한을 부여하는 예시입니다.

GRANT EXECUTE ON get_employees_by_dept TO hr_manager;

7. 최소 권한 원칙 (Principle of Least Privilege)

가장 중요한 보안 원칙 중 하나는 최소 권한 원칙입니다. 사용자에게 필요한 최소한의 권한만 부여하여 시스템의 보안을 강화하는 것입니다. 불필요한 권한을 부여하면 보안 사고 발생 시 피해 범위가 커질 수 있습니다. 예를 들어, 모든 사용자에게 DROP TABLE 권한을 부여하는 것은 매우 위험합니다.

8. 감사 (Auditing)

감사는 데이터베이스 활동을 추적하고 기록하는 기능입니다. 감사를 통해 누가 언제 어떤 작업을 수행했는지 확인할 수 있습니다. Oracle 데이터베이스는 다양한 감사 기능을 제공하며, 이를 통해 보안 정책 준수 여부를 모니터링하고 보안 사고 발생 시 원인을 분석할 수 있습니다.

8.1 감사 설정 예시

다음은 hr_manager 사용자가 employees 테이블에 대해 수행하는 모든 SELECT 문을 감사하는 예시입니다.

AUDIT SELECT ON hr.employees BY hr_manager;

9. 결론

Oracle 데이터베이스에서 안전한 사용자 접근 권한 관리는 지속적인 관심과 노력이 필요한 부분입니다. 위에 제시된 방법들을 이해하고 실제 환경에 적용함으로써 데이터베이스 보안을 강화하고 잠재적인 위협으로부터 데이터를 보호할 수 있습니다. 정기적인 감사와 검토를 통해 권한 설정을 최적화하고, 변화하는 보안 요구 사항에 적응하는 것이 중요합니다.

10. 추가 정보

  • Oracle Database Security Guide: Oracle 데이터베이스 보안 관련 전반적인 내용을 다룹니다.
  • Oracle Database SQL Language Reference: SQL 명령 구문과 사용법에 대한 자세한 정보를 제공합니다.
  • Oracle Database PL/SQL Packages and Types Reference: PL/SQL 패키지 및 유형에 대한 자세한 정보를 제공합니다.
위로 스크롤