역할을 사용하면 관계형 데이터베이스의 사용자에 대해 권한을 더 쉽게 부여하고 회수할 수 있습니다. 각 사용자에 대해 권한을 개별적으로 관리하는 대신, 역할별로 권한을 관리하며 해당 역할에 할당된 모든 사용자에게 모든 변경 사항이 적용됩니다. 조직에서는 각자의 고유한 요구에 맞추기 위해 종종 여러 역할을 만듭니다.
하지만 대부분의 데이터베이스에는 PUBLIC이라는 사전 정의된 역할이 함께 제공됩니다. 이 블로그에서는 Oracle에서 PUBLIC 역할이 무엇을 의미하는지와 이를 사용할 때의 주요 모범 사례를 설명합니다.
Oracle의 PUBLIC 역할이란?
PUBLIC 역할은 모든 데이터베이스 사용자가 생성 시에 암묵적으로 상속받는 특수 역할입니다. Oracle 11g 문서에서는 PUBLIC 역할은 모든 데이터베이스 사용자에게 액세스 가능하며, 따라서 PUBLIC 역할에 부여된 모든 권한과 역할은 모든 데이터베이스 사용자에게도 액세스 가능합니다. 관리자가 특정 사용자에게 PUBLIC 역할을 부여하거나 회수하는 명령을 내릴 수는 있지만, 이러한 명령은 실질적인 효과가 없습니다. 사용자는 항상 이 역할을 갖게 됩니다.
DBA_ROLES 뷰에는 PUBLIC 역할이 나열되지 않는다는 점이 흥미롭습니다:
SQL> SELECT * FROM DBA_ROLES WHERE ROLE =’PUBLIC’;
no rows selected
하지만 SYS.USER$ 테이블을 조회해 보면 PUBLIC이 실제로 존재하며, type# 값이 0인 것은 그것이 역할임을 의미합니다:
SQL> SELECT user#, type#, name FROM SYS.USER$ WHERE type# = 0 ORDER BY 1;
다음 예시에서 모든 데이터베이스 사용자에 대해 PUBLIC 역할이 자동으로 부여되는(암묵적) 성격을 확인할 수 있습니다. PUBLIC 역할에 CONNECT 권한을 부여하면, 새 사용자가 명시적으로 권한을 부여받지 않아도 그 권한을 상속받게 됩니다.
SQL> CREATE USER bob IDENTIFIED BY MyPassword;
SQL> conn bob/MyPassword;
PUBLIC 역할에 대한 모범 사례
PUBLIC 역할은 사용자 권한 관리를 위해 사용해서는 안 됩니다. 즉, 현재의 모든 데이터베이스 사용자와 향후에 생성될 수 있는 모든 신규 사용자에게 해당 권한과 역할을 부여하려는 의도가 아닌 한, PUBLIC에 권한이나 역할을 절대 할당하지 마십시오.
실제로 PUBLIC 역할에 권한과 역할을 직접 부여하는 행위는 다음과 같은 발견사항 으로 분류됩니다. 이는 미 국방정보시스템국(Defense Information Systems Agency, DISA)이 제시한 것입니다. DISA Security Technical Implementation Guide (STIG) 취약점 ID V-61435 는 데이터베이스 또는 시스템 권한을 PUBLIC에 부여해서는 안 된다고 명시하고 있으며, V-61443 는 애플리케이션 역할 권한을 PUBLIC에 할당해서는 안 된다고 명시합니다.
왜 그런지 이해하려면 약간의 배경 설명이 필요합니다. 컨테이너 데이터베이스(CDB) 또는 플러그형 데이터베이스(PDB) 환경에서는 공통 역할(common roles)과 로컬 역할(local roles)이라는 개념이 있습니다. CDB에서는 공통 역할이 루트에서 생성되며, 현재와 미래의 모든 컨테이너에서 이를 알 수 있습니다. PDB 환경에서는 로컬 역할이 특정 PDB에만 로컬로 적용됩니다. 즉, 해당 로컬 역할이 정의된 PDB 안에서만 사용할 수 있습니다.
하지만 Oracle 멀티 테넌트 환경에서는 역할이 조금 더 복잡합니다. 기본적으로 Oracle이 PUBLIC 역할에 부여하는 모든 권한은 로컬과 일반적으로 모두 부여됩니다. Oracle에 따르면 PUBLIC에 권한을 일반적으로 부여해서는 안 됩니다. 다시 말해, 루트나 CDB에서 PUBLIC 역할에 어떤 유형의 권한도 절대 부여하지 마십시오. 각 CDB에서 PUBLIC 역할을 별도로 수정하는 것은 가능하지만, 꼭 필요한 경우가 아니면 권장되지 않습니다.
PUBLIC 역할에 대해 사용자가 부여한 권한은 부작용 없이 철회할 수 있습니다. 하지만 데이터베이스 생성 과정에서 PUBLIC 역할에 기본으로 부여된 권한을 철회할 때는 주의가 필요합니다. 해당 권한이 향후 업그레이드 또는 패치 과정에서 다시 부여될 수 있기 때문입니다.
PUBLIC 역할을 포함해 모든 Oracle 역할과 권한을 나열하는 데 도움이 필요하다면, Netwrix StealthAUDIT 같은 제3자 솔루션에 투자하는 것을 고려해 보세요. 이 솔루션은 기본 제공만으로도 자세한 권한(엔타이틀먼트) 보고서를 생성할 수 있습니다.
공유하기
더 알아보기
저자 소개
Kevin Joyce
제품 관리 책임자
Netwrix의 제품 관리( Product Management ) 책임자입니다. Kevin은 사이버 보안에 대한 열정이 있으며, 특히 공격자들이 조직 환경을 악용하기 위해 사용하는 전술과 기술을 이해하는 데 집중합니다. Active Directory 및 Windows 보안에 초점을 맞춰 제품 관리 분야에서 8년의 경험을 쌓아, 조직이 Identity, 인프라 및 데이터를 보호할 수 있도록 솔루션을 구축하는 데 그 열정을 더했습니다.