오라클 데이터베이스를 처음 설치하고 나면 곧바로 마주하게 되는 것이 사용자 계정 생성과  권한 관리이다. 이 단계를 제대로 설정하지 않으면 나중에 보안 문제나 운영 상의 어려움을 겪을 수 있다. 이 글에서는 오라클 데이터베이스를 설치한 후 반드시 해야 하는 초기 환경 설정과 사용자 권한 관리에 대해 알아보고자 한다. 특히 자주 사용하는 명령어와 실제 사용 예시를 통해 누구나 쉽게 따라할 수 있도록 작성했으니, 차근차근 따라가 보자.

 

1. 오라클 설치 후 초기 환경 확인 및 설정

1.1 데이터베이스 상태 확인

오라클을 설치한 후 가장 먼저 해야 할 일은 데이터베이스가 제대로 실행 중인지 확인하는 것이다. SQL*Plus를 통해 간단히 확인할 수 있다.

SQL> CONNECT / AS SYSDBA
SQL> SELECT status FROM v$instance;

정상적으로 실행 중이라면 ‘OPEN’ 상태로 표시된다. 만약 데이터베이스가 실행 중이 아니라면 다음 명령어로 시작할 수 있다.

SQL> STARTUP

1.2 리스너 상태 확인 및 설정

리스너는 클라이언트의 연결 요청을 처리하는 중요한 구성 요소다. 리스너 상태를 확인하고 필요시 시작해야 한다.

$ lsnrctl status
$ lsnrctl start

리스너가 제대로 구성되지 않았다면 listener.ora 파일을 편집해야 한다. 이 파일은 일반적으로 $ORACLE_HOME/network/admin 디렉토리에 위치해 있다.

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = your_hostname)(PORT = 1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = your_SID)
      (ORACLE_HOME = /path/to/oracle/home)
    )
  )

여기서 your_hostname은 서버의 호스트명이나 IP 주소로, your_SID는 데이터베이스 SID로 변경해야 한다.

1.3 중요 초기 파라미터 설정

오라클 데이터베이스는 수백 개의 파라미터를 가지고 있지만, 몇 가지 중요한 파라미터는 초기에 설정하는 것이 좋다.

SQL> ALTER SYSTEM SET processes=300 SCOPE=SPFILE;
SQL> ALTER SYSTEM SET open_cursors=500 SCOPE=SPFILE;
SQL> ALTER SYSTEM SET db_recovery_file_dest_size=10G SCOPE=BOTH;
SQL> ALTER SYSTEM SET db_recovery_file_dest='/oracle/recovery' SCOPE=BOTH;

SCOPE=SPFILE은 변경사항이 다음 재시작 시 적용됨을, SCOPE=BOTH는 즉시 적용되고 재시작 후에도 유지됨을 의미한다. 파라미터 값(processes=300, open_cursors=500 등)은 시스템 규모와 용도에 맞게 조정해야 한다.

1.4 문자 집합 확인

데이터베이스 생성 후 문자 집합 변경은 매우 어렵기 때문에, 초기에 문자 집합을 확인하고 필요하다면 데이터베이스를 재생성해야 한다.

SQL> SELECT parameter, value FROM nls_database_parameters 
     WHERE parameter IN ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');

한글을 포함한 다국어 지원을 위해서는 보통 AL32UTF8을 사용한다.

 

2. 사용자 계정 관리

2.1 기본 사용자 계정 상태 확인 및 보안 설정

오라클은 설치 시 여러 기본 계정이 생성되는데, 보안을 위해 불필요한 계정은 잠그거나 비밀번호를 변경해야 한다.

SQL> SELECT username, account_status FROM dba_users;

SYS와 SYSTEM 계정의 비밀번호는 반드시 변경하는 것이 좋다.

SQL> ALTER USER SYSTEM IDENTIFIED BY "new_password";

new_password 부분에는 복잡한 비밀번호를 사용해야 한다. 오라클 12c 이상에서는 큰따옴표로 비밀번호를 감싸 대소문자를 구분할 수 있다.

2.2 사용자 생성 (create user)

애플리케이션용 사용자 계정을 생성해보자. 12c 이전 버전에서는 다음과 같이 간단히 생성할 수 있다.

SQL> CREATE USER app_user IDENTIFIED BY "App_password123" 
     DEFAULT TABLESPACE users
     TEMPORARY TABLESPACE temp
     QUOTA 100M ON users;

12c 이상에서는 CDB(Container Database)와 PDB(Pluggable Database) 개념이 도입되어, PDB에서 사용자를 생성하려면 먼저 PDB에 연결해야 한다.

SQL> ALTER SESSION SET container = your_pdb_name;
SQL> CREATE USER app_user IDENTIFIED BY "App_password123" 
     DEFAULT TABLESPACE users
     TEMPORARY TABLESPACE temp
     QUOTA 100M ON users;

여기서 your_pdb_name은 사용 중인 PDB 이름으로 변경하고, app_userApp_password123는 각자의 환경에 맞는 사용자 이름과 비밀번호로 설정한다.

2.3 사용자 계정 관리, 잠금, 삭제 (alter user)

자주 사용하는 계정 관리 명령어를 알아보자.

계정 잠금/해제:

SQL> ALTER USER app_user ACCOUNT LOCK;
SQL> ALTER USER app_user ACCOUNT UNLOCK;

비밀번호 만료 설정:

SQL> ALTER USER app_user PASSWORD EXPIRE;

사용자 삭제(관련 객체 모두 삭제):

SQL> DROP USER app_user CASCADE;

CASCADE 옵션을 사용하면 사용자가 소유한 모든 객체도 함께 삭제된다.

 

3. 사용자 권한 설정

3.1 시스템 권한과 객체 권한 (create session, create table,, select, insert, update, delete권한)

오라클에서 권한은 크게 시스템 권한과 객체 권한으로 나뉜다.

  • 시스템 권한: 데이터베이스 수준의 작업을 수행할 수 있는 권한(CREATE SESSION, CREATE TABLE 등)
  • 객체 권한: 특정 객체에 대한 작업 권한(SELECT, INSERT, UPDATE, DELETE 등)

3.2 기본 권한 부여 (grant create session, grant create table, grant select, insert, update, delete)

새로 생성한 사용자는 아무 권한이 없기 때문에, 최소한 데이터베이스에 접속할 수 있는 권한을 부여해야 한다.

SQL> GRANT CREATE SESSION TO app_user;

테이블을 생성하고 관리할 수 있는 권한을 부여하려면:

SQL> GRANT CREATE TABLE, ALTER ANY TABLE, DROP ANY TABLE TO app_user;

다른 사용자의 테이블에 대한 객체 권한을 부여하려면:

SQL> GRANT SELECT, INSERT, UPDATE, DELETE ON hr.employees TO app_user;

여기서 hr.employees는 HR 스키마의 employees 테이블을 의미한다. 실제 환경에서는 자신의 스키마와 테이블 이름으로 변경해야 한다.

3.3 WITH ADMIN OPTION과 WITH GRANT OPTION

권한을 부여할 때 추가 옵션을 사용할 수 있다.

시스템 권한을 다른 사용자에게 부여할 수 있는 권한까지 함께 부여:

SQL> GRANT CREATE TABLE TO app_user WITH ADMIN OPTION;

객체 권한을 다른 사용자에게 부여할 수 있는 권한까지 함께 부여:

SQL> GRANT SELECT ON hr.employees TO app_user WITH GRANT OPTION;

이 옵션들은 권한 관리를 분산시킬 수 있지만, 의도치 않게 권한이 확산될 수 있으므로 신중하게 사용해야 한다.

3.4 롤(Role)을 활용한 권한 관리 (create role)

여러 사용자에게 동일한 권한 세트를 부여해야 할 때는 롤을 사용하면 편리하다.

SQL> CREATE ROLE app_read_role;
SQL> GRANT SELECT ANY TABLE TO app_read_role;
SQL> GRANT SELECT ANY DICTIONARY TO app_read_role;
SQL> GRANT app_read_role TO app_user1, app_user2, app_user3;

자주 사용되는 기본 롤에는 CONNECT, RESOURCE, DBA가 있다.

SQL> GRANT CONNECT, RESOURCE TO app_user;

CONNECT 롤은 기본 연결 권한을, RESOURCE 롤은 객체 생성 권한을 포함한다. DBA 롤은 거의 모든 권한을 가지므로 운영 환경에서는 신중하게 부여해야 한다.

3.5 프로파일을 통한 리소스 및 비밀번호 관리 (create profile)

사용자 계정의 리소스 사용량과 비밀번호 정책을 관리하기 위해 프로파일을 사용할 수 있다.

SQL> CREATE PROFILE app_user_profile LIMIT
     SESSIONS_PER_USER 5
     CPU_PER_SESSION UNLIMITED
     PASSWORD_LIFE_TIME 90
     PASSWORD_REUSE_TIME 1800
     PASSWORD_REUSE_MAX 10
     FAILED_LOGIN_ATTEMPTS 5
     PASSWORD_LOCK_TIME 1/24;

이 프로파일은 다음과 같은 제약을 설정한다:

  • 사용자당 최대 5개 세션 허용
  • CPU 사용량 제한 없음
  • 비밀번호 90일마다 만료
  • 비밀번호는 1800일 동안 재사용 불가
  • 최근 10개 비밀번호는 재사용 불가
  • 5번 로그인 실패 시 계정 잠금
  • 계정 잠금 시간은 1시간

프로파일을 사용자에게 적용하려면:

SQL> ALTER USER app_user PROFILE app_user_profile;

 

4. 초기 설정 후 유지 관리

4.1 정기적인 비밀번호 변경

보안을 위해 정기적으로 중요 계정의 비밀번호를 변경해야 한다.

SQL> ALTER USER system IDENTIFIED BY "New_system_pwd123";

4.2 권한 감사 설정(audit)

중요 작업에 대한 감사를 설정해 보안 관리를 강화할 수 있다.

SQL> AUDIT ALTER ANY TABLE BY ACCESS;
SQL> AUDIT SELECT TABLE, INSERT TABLE, UPDATE TABLE, DELETE TABLE BY ACCESS;

4.3 불필요한 권한 회수 (revoke)

필요 없어진 권한은 즉시 회수하는 것이 좋다.

SQL> REVOKE CREATE TABLE FROM app_user;
SQL> REVOKE SELECT ON hr.employees FROM app_user;
SQL> REVOKE app_read_role FROM app_user;

 

오라클 데이터베이스의 초기 환경 설정과 사용자 권한 관리는 데이터베이스 보안과 성능의 기초라 할 수 있다. 특히 중요한 점은 최소 권한의 원칙을 따르는 것이다. 사용자에게는 필요한 최소한의 권한만 부여하고, 정기적으로 불필요한 권한을 검토하고 회수해야 한다. 또한 보안 강화를 위해 정기적인 비밀번호 변경과 감사 설정을 활용하는 것이 좋다.

 

 

댓글 남기기