ARCHIVES

Hive의 권한 시스템

(주)비트나인 2015. 9. 22. 17:18



권한 및 인증 시스템이란?


데이터베이스 시스템에서 권한(authorization)은 어떤 사용자가 어떤 데이터베이스 오브젝트(테이블이나 뷰 등)에 대해 어떤 연산을 수행할 수 있는지를 제한할 수 있는 시스템을 말합니다. 흔히 인증(authentication)과 혼동하기도 하는데 인증은 데이터베이스 시스템에 접속한 사용자가 누구인지를 확인하는(identify) 과정을 말합니다. 인증 방법도 여러 가지가 있지만 가장 많이 사용하는 ID와 비밀번호 입력 방식을 사용한다면 해당 ID의 비밀번호를 정확히 알고 있다면 현재 접속한 사용자가 ID에 해당하는 사용자임을 확인하는것 입니다. 권한은 이와 같이 인증 과정을 통해 신원이 확인된 사용자에 대해 이 사용자가 접근 가능한 오브젝트에 수행할 수 있는 연산만을 수행하도록 하는 시스템입니다.





오브젝트 및 권한


Hive 역시 인증 및 권한 시스템을 제공하고 있습니다. 권한은 크게 스토리지 기반의 권한 시스템과 SQL 표준 기반의 권한 시스템으로 나뉘는데, 여기서는 SQL 표준 기반 권한 시스템에 대해 알아보도록 하겠습니다.

SQL 표준 기반의 권한시스템이라고는 하지만 Hive의 권한 시스템은 SQL 표준을 완벽히 지원하지는 않습니다. 우선 Hive의 권한 관리 대상 오브젝트는 다음과 같습니다.

  • 테이블

데이터베이스 전체에 대한 권한이나 컬럼 단위의 세세한 권한 관리는 아직 제공하고 있지 않습니다.

그리고 이런 오브젝트에 대해 설정할 수 있는 권한은 다음과 같습니다.

  • SELECT 권한
  • INSERT 권한
  • UPDATE 권한
  • DELETE 권한
  • ALL 권한 (위의 모든 권한)



롤(Role)

롤은 권한의 집합을 말합니다. 롤은 권한 관리의 편의성을 높이기 위해 사용합니다. 같은 권한을 가진 사용자에게 똑 같은 권한을 일일이 다시 부여하는 것이 아니라 롤에 여러 권한을 부여한 후 사용자에게 롤을 부여하면 같은 권한 집합을 가진 여러 사용자를 만들 수 있습니다. 그리고 역할 별로 사용자를 구분해 권한을 부여할 수도 있습니다. 사용자는 한 개 이상의 롤에 속할 수 있습니다. 

사실 사용자라는 개념과 롤이라는 개념은 유사한 면이 많습니다. 특정 권한을 사용자에게 부여할 수도 있고 롤에 부여할 수 도 있습니다. 또한 특정 롤을 다른 롤에게 부여하는 것도 가능합니다. Hive에서는 롤과 사용자를 별개의 개념으로 다루지만 PostgreSQL에서는 이 둘을 동일한 개념으로 다루기도 합니다. 

특별한 의미를 가진 롤이 있습니다. public과 admin인데 모든 사용자는 public 롤에 속합니다. 따라서 모든 사용자에게 어떤 권한을 주고자 한다면 이 public 롤에 부여하면 매우 간단히 수행할 수 있습니다. admin 롤은 데이터베이스 관리 기능을 수행할 수 있는 롤입니다. 이 롤에 속한 사용자는 "create role"과 "drop role"을 실행할 수 있습니다. 또한 명시적으로 권한을 부여 받지 않은 오브젝트에 대해서도 액세스할 수 있습니다. 이 admin 롤은 막강하기 때문에 이 롤을 부여할 때에는 주의를  필요로 합니다. 또한 admin롤에 속한 사용자라고 하더라도 "set role" 구문을 통해 admin 롤을 사용하겠다고 명시적으로 알려줘야 이 롤을 사용할 수 있습니다.




권한 관련 DDL 문

  • 롤 생성 관련
CREATE ROLE role_name;   // 롤 생성
DROP ROLE role_name;     // 롤 삭제

admin 롤만이 실행할 수 있습니다.

  • Current 롤 관련
SHOW CURRENT ROLES;    // 사용자의 현재 롤을 보여준다.

SET ROLE (role_name | ALL)   // 특정 롤만을 지정한다 (ALL은 기본 롤 목록으로 복귀)

사용자가 로그인 하면 사용자에게 부여된 모든 롤이 기본으로 부여됩니다(admin 제외). 그러다 특정 롤만을 사용할 경우에는 SET ROLE 문을 통해 지정할 수 있습니다.

  • 롤 부여

GRANT role_name [, role_name] ...                             // 롤 부여

TO principal_specification [, principal_specification] ...

[ WITH ADMIN OPTION ];


REVOKE [ADMIN OPTION FOR] role_name [, role_name] ...  // 롤 회수

FROM principal_specification [, principal_specification] ... ;

 

principal_specification

  : USER user

  | ROLE role


  • 오브젝트 권한 부여 관리

GRANT

    priv_type [, priv_type ] ...

    ON table_or_view_name

    TO principal_specification [, principal_specification] ...

    [WITH GRANT OPTION];


REVOKE [GRANT OPTION FOR]

    priv_type [, priv_type ] ...

    ON table_or_view_name

    FROM principal_specification [, principal_specification] ... ;

 

principal_specification

  : USER user

  | ROLE role

 

priv_type

  : INSERT | SELECT | UPDATE | DELETE | ALL






Posted by Bitnine(비트나인)

'ARCHIVES' 카테고리의 다른 글

pg_statsinfo 소개  (0) 2015.09.22
JDO(Java Data Objects)와 Datanucleus 소개  (0) 2015.09.22
오픈소스 라이선스(Open Source License)의 개괄  (0) 2015.09.22
PostgreSQL에서 사용하는 암호화 방식  (0) 2015.09.22
Reflection  (0) 2015.09.22