오라클, 소유자가 아닌 테이블 조회 (스키마)
- Database
- 2023. 4. 6.
오라클(Oracle) 데이터베이스에서 테이블은 소유자가 있습니다. 만약 테이블을 소유한 계정이 아닌 계정이 테이블에 select 문을 실행하면 정상 조회될까요? 그렇지 않다면 확인해봐야 할 사항이 몇 가지 있습니다.
예를 들어, 오라클에 user라는 계정으로 접속했다고 가정합니다. table이라는 테이블에 select 쿼리를 날리려고 합니다. 그런데 table은 user2의 소유입니다. 이때 user 계정으로 아래와 같이 뭐리를 실행하면 테이블이 존재하지 않는다는 에러가 발생합니다.
select * from table;
이는 테이블명 앞에 소유자 표시를 생략했기 때문입니다. 아래와 같이 실행하면 조회가 가능합니다.
select * from user2.table;
그 이유는 스키마(schema)와 관련이 있습니다. 스키마는 오라클에서 테이블, 뷰, 인덱스 등을 그룹화하는 논리적 저장소입니다. 오라클 db에 접속하는 각 사용자는 자신만의 스키마를 가지며 테이블 소유자는 해당 테이블이 있는 스키마의 소유자입니다. 따라서 본인 소유가 아닌 테이블을 조회하려면 테이블 소유자의 스키마 명칭을 붙여줘야 합니다.
만약 소유자를 붙여서 select 쿼리를 실행했음에도 오류가 발생한다면 해당 테이블에 대한 select 권한이 없을 수 있습니다. 타 계정이 테이블을 조회하려면 먼저 계정에 조회 권한을 부여해야 합니다.
SELECT ON table TO user;
참고로 소유자가 자신의 테이블을 조회하는 경우엔 테이블명만 써도 조회가 가능합니다. 오라클은 기본적으로 현재 로그인한 사용자의 스키마를 참조하도록 설정되어 있기 때문입니다.
데이터베이스 내 테이블 조회
데이터베이스 안에 있는 테이블을 모두 조회할 때는 아래의 명령어를 사용합니다. 이 구문은 사용자가 소유하거나 권한이 부여된 테이블만 표시됩니다.
select * from all_tables
소유 권한과 관계 없이 모든 객체를 보려면 아래의 명령어를 사용할 수 있습니다.
select * from all_objects
'Database' 카테고리의 다른 글
MSSQL, nvarchar와 nchar 차이 (0) | 2023.04.10 |
---|---|
MSSQL, nvarchar(max) 사용하는 이유 (0) | 2023.04.10 |
오라클, dual 테이블이란? (0) | 2023.04.05 |
MSSQL, PRIMARY KEY CLUSTERED 의미 (0) | 2023.04.04 |
MSSQL, GETDATE() 함수 사용법 (0) | 2023.04.04 |