오라클 데이터베이스에서 특정 사용자가 가진 권한을 조회하고자 할 때 유용한 SQL 쿼리들을 모아봤습니다. DDL, DML, DCL 권한에 대한 설명과 함께 권한을 확인하는 방법을 단계별로 소개합니다.
1. 사용자에게 부여된 시스템 권한 확인하기
특정 사용자가 가진 시스템 권한을 조회하려면 아래 쿼리를 사용합니다. 시스템 권한은 CREATE SESSION, CREATE TABLE 등 다양한 권한을 포함합니다.
SELECT * FROM DBA_SYS_PRIVS
WHERE GRANTEE = '사용자명';
2. 사용자에게 부여된 롤(Role) 확인하기
오라클에서는 롤을 통해 여러 권한을 그룹으로 묶어 사용자의 편의를 돕습니다. 롤에 포함된 권한을 통해 시스템 권한을 관리할 수 있습니다. 특정 사용자에게 부여된 롤을 조회하려면 아래 쿼리를 사용하세요.
SELECT * FROM DBA_ROLE_PRIVS
WHERE GRANTEE = '사용자명';
3. 롤에 포함된 시스템 권한 확인하기
사용자에게 직접 부여된 시스템 권한 외에도 **롤(Role)**에 포함된 시스템 권한을 확인할 수 있습니다. 롤 이름을 이용하여 해당 롤이 가진 권한을 조회할 수 있습니다.
SELECT * FROM DBA_SYS_PRIVS
WHERE GRANTEE = '롤명';
4. 사용자에게 부여된 객체 권한 확인하기
특정 사용자가 다른 사용자에게 부여한 객체 권한, 예를 들어 테이블에 대한 권한을 확인하고 싶을 때는 다음과 같은 쿼리를 사용합니다.
SELECT * FROM DBA_TAB_PRIVS
WHERE OWNER = '테이블소유자명';
또는, 특정 사용자가 부여받은 객체 권한을 확인하려면 다음과 같은 쿼리를 사용할 수 있습니다.
SELECT * FROM DBA_TAB_PRIVS
WHERE GRANTEE = '권한부여자명';
권한 유형 설명
DDL 권한 (Data Definition Language)
- 기본적으로 CREATE TABLE 권한이 있으면 자신이 생성한 테이블에 대해 ALTER, DROP, TRUNCATE를 수행할 수 있습니다.
- 다른 사용자 테이블에 대한 생성 권한은 CREATE ANY TABLE 시스템 권한이 필요하며, 이를 DBA_SYS_PRIVS 뷰를 통해 확인할 수 있습니다.
DML 권한 (Data Manipulation Language)
- 본인 소유 테이블에 대해 모든 작업(INSERT, UPDATE, DELETE 등)을 수행할 수 있습니다.
- 다른 사용자 테이블에 대한 작업 권한은 위에서 언급한 DBA_TAB_PRIVS에서 확인할 수 있습니다.
DCL 권한 (Data Control Language)
- 자신의 테이블에 대해 다른 사용자에게 GRANT를 부여하는 것은 항상 가능합니다.
- 다른 사용자의 테이블에 대해 GRANT를 하려면 DBA_TAB_PRIVS.GRANTABLE 컬럼이 YES로 되어 있어야 합니다.
- GRANT ANY OBJECT PRIVILEGE 권한이 있다면 다른 사용자의 모든 객체에 대해 권한을 부여할 수 있습니다.
5. 오라클의 주요 시스템 계정 확인하기
오라클에서 내부적으로 사용하는 기본 시스템 계정 목록을 확인하려면 다음 쿼리를 사용합니다. 이 목록은 오라클 버전에 따라 상이할 수 있습니다.
SELECT USERNAME FROM DBA_USERS
ORDER BY 1;
일반적으로 자주 등장하는 오라클의 기본 시스템 계정은 다음과 같습니다.
- SYS, SYSTEM: 오라클 설치 시 기본으로 제공되는 관리자 계정
- DBSNMP, CTXSYS, MDSYS, XDB: 오라클 내부 기능 및 관리 용도
- SCOTT, HR, OE 등: 오라클 설치 시 테스트 계정으로 함께 제공됨
이외에도 버전에 따라 ANONYMOUS, APEX_PUBLIC_USER, ORDDATA 등 다양한 계정이 존재할 수 있습니다. 이러한 계정은 시스템 관리를 위해 주로 사용되며, 일반 사용자는 접근할 필요가 없습니다.
'※ 소소한 IT > ORACLE' 카테고리의 다른 글
[Oracle] 파티셔닝(Partitioning)을 활용한 대용량 데이터 관리 (0) | 2024.10.24 |
---|---|
[Oracle] 오라클 인덱스(Index) 개념과 활용 방법 (0) | 2015.09.10 |
오라클 시퀀스 초기화하기: DROP 없이 간단한 방법 (0) | 2015.09.03 |
[Oracle SQL 강좌]SQL의 종류 (0) | 2015.03.10 |
컬럼명으로 테이블 찾기!!! (0) | 2015.03.06 |