Oracle Database를 사용할 때, 데이터베이스에 접근하기 위해 사용자와 세션을 이해하는 것은 필수적입니다.
이 글에서는 오라클 데이터베이스에서 **사용자(User)**와 **세션(Session)**의 개념을 정의하고, 이를 관리하는 방법과 실무 예제를 소개하겠습니다.
1. 사용자(User)란?
오라클 데이터베이스에서 **사용자(User)**는 데이터베이스에 접근할 수 있는 계정(Account)을 의미합니다.
사용자는 데이터베이스 객체(테이블, 뷰, 인덱스 등)를 생성, 수정, 삭제할 수 있으며, 각 사용자는 고유한 권한과 역할을 가질 수 있습니다.
사용자 특징
- Schema: 사용자가 소유한 데이터베이스 객체들의 집합.
- Authentication: 사용자가 데이터베이스에 접근하려면 인증(아이디와 비밀번호)이 필요.
- 권한: 사용자는 특정 권한(예: SELECT, INSERT, UPDATE 등)을 통해 작업 수행.
사용자 생성하기
Oracle DB에서 사용자를 생성하려면 CREATE USER 명령을 사용합니다.
기본 문법
CREATE USER 사용자명 IDENTIFIED BY 비밀번호;
예제
CREATE USER TEST_USER IDENTIFIED BY test_password;
위 명령어로 TEST_USER라는 사용자를 생성했지만, 기본적으로 아무 권한도 부여되지 않은 상태입니다. 권한을 부여해야만 데이터베이스 작업을 수행할 수 있습니다.
권한 부여하기
사용자가 데이터베이스에 접근하고 작업을 수행하려면 적절한 권한이 필요합니다.
권한 부여 문법
GRANT 권한명 TO 사용자명;
예제
- 사용자가 데이터베이스에 로그인할 수 있도록 권한 부여:
GRANT CREATE SESSION TO TEST_USER;
- 테이블 생성 권한 부여:
GRANT CREATE TABLE TO TEST_USER;
- SELECT 권한 부여:
GRANT SELECT ON SCOTT.EMP TO TEST_USER;
2. 세션(Session)이란?
**세션(Session)**은 사용자가 데이터베이스와 연결된 상태를 의미합니다.
세션은 데이터베이스와의 연결 정보를 유지하며, 데이터 조회, 삽입, 업데이트 등의 작업이 이루어지는 컨텍스트를 제공합니다.
세션의 특징
- 한 사용자는 동시에 여러 세션을 가질 수 있습니다.
- 세션이 활성화되면 서버 프로세스가 사용자 요청을 처리합니다.
- 데이터베이스 리소스를 효율적으로 관리하기 위해 세션은 연결 수를 제한할 수 있습니다.
세션 확인하기
관리자는 현재 활성화된 세션을 조회하여 데이터베이스 사용 현황을 파악할 수 있습니다.
세션 정보 확인
SELECT SID, SERIAL#, USERNAME, STATUS, MACHINE
FROM V$SESSION;
- SID: 세션 식별자.
- SERIAL#: 세션의 고유 번호.
- USERNAME: 연결된 사용자 계정 이름.
- STATUS: 세션 상태 (ACTIVE 또는 INACTIVE).
- MACHINE: 세션이 실행 중인 클라이언트 머신.
세션 종료하기
비정상적으로 오래 실행되는 세션을 강제로 종료하려면 ALTER SYSTEM KILL SESSION 명령을 사용합니다.
세션 종료 문법
ALTER SYSTEM KILL SESSION 'SID,SERIAL#';
예제
ALTER SYSTEM KILL SESSION '123,456';
3. 사용자 및 세션 관리 실무 예제
예제 1: 사용자 생성 및 권한 부여
요구사항
- HR_USER라는 사용자를 생성하고, 다음 권한을 부여합니다.
- 데이터베이스 로그인 권한.
- 테이블 생성 및 조회 권한.
SQL
CREATE USER HR_USER IDENTIFIED BY hr_password;
GRANT CREATE SESSION TO HR_USER;
GRANT CREATE TABLE TO HR_USER;
GRANT SELECT ANY TABLE TO HR_USER;
예제 2: 특정 사용자의 세션 확인 및 종료
요구사항
TEST_USER 계정이 비정상적으로 많은 리소스를 소비하고 있는 세션을 종료합니다.
세션 확인
SELECT SID, SERIAL#, USERNAME, STATUS
FROM V$SESSION
WHERE USERNAME = 'TEST_USER';
세션 종료
ALTER SYSTEM KILL SESSION 'SID,SERIAL#';
-- 예: SID=101, SERIAL#=1234일 경우:
ALTER SYSTEM KILL SESSION '101,1234';
예제 3: 사용자 잠금 및 잠금 해제
요구사항
- 비정상적인 사용을 방지하기 위해 HR_USER 계정을 잠급니다.
- 이후 계정을 해제하여 정상 접근을 허용합니다.
사용자 잠금
ALTER USER HR_USER ACCOUNT LOCK;
사용자 잠금 해제
ALTER USER HR_USER ACCOUNT UNLOCK;
4. 사용자 및 세션 관리 시 주의사항
- 최소 권한 원칙
- 사용자에게 반드시 필요한 권한만 부여하세요. 과도한 권한은 보안 문제를 야기할 수 있습니다.
- 비밀번호 관리
- 주기적으로 사용자 비밀번호를 변경하거나 만료 정책을 설정하세요.
- 세션 제한 설정
- 특정 사용자가 데이터베이스 리소스를 과도하게 사용하는 것을 방지하려면 세션 제한을 설정하세요.
- 감사(Auditing)
- 중요한 데이터베이스 작업에 대한 로그를 기록하여 사용자의 작업을 추적하세요.
5. 결론
Oracle Database에서 사용자와 세션은 데이터베이스 관리의 핵심입니다.
사용자는 데이터베이스 객체와 작업의 소유권을 가지며, 세션은 사용자의 요청을 처리하는 연결 상태를 나타냅니다. 이 두 개념을 정확히 이해하고 적절히 관리하면 데이터베이스의 안정성과 보안을 유지할 수 있습니다.
이제 Oracle DB에서 사용자 및 세션 관리를 효율적으로 수행하여 체계적인 데이터베이스 운영 환경을 만들어 보세요! 😊
'Database' 카테고리의 다른 글
오라클 PL/SQL과 SQL의 차이점 이해하기 (0) | 2024.12.03 |
---|---|
오라클 패키지와 함수로 SQL 확장하기 (0) | 2024.12.03 |
오라클 SYNONYM과 PUBLIC SYNONYM 사용법 (0) | 2024.12.03 |
오라클 SEQUENCE로 자동 증가 번호 생성하기 (0) | 2024.12.03 |
오라클 SQL 제약 조건: NOT NULL, UNIQUE, CHECK (0) | 2024.12.03 |