HCatalog 권한 부여
HCatalog 권한 부여 (HCatalog Authorization)
저장 기반 권한 부여 (Storage Based Authorization)
Hive의 기본 권한 부여 모델 (Default Authorization Model of Hive)
Hive의 기본 권한 부여 모델은 사용자·그룹·역할(role)과 그들에게 데이터베이스나 테이블에 대한 작업 권한을 부여하는 전통적인 RDBMS 스타일의 권한 부여를 지원해요. 자세한 내용은 Hive Authorization과 Hive 폐기 권한 모드/Legacy Mode 문서에서 확인할 수 있어요.
이 RDBMS 스타일의 권한 부여는 구현상의 차이 때문에 Hadoop의 일반적인 사용 사례에는 잘 맞지 않을 수 있어요.
- 전통적인 RDBMS와 달리 Hive는 그 아래의 모든 데이터를 완전히 통제하지는 않아요. 데이터는 여러 파일에 저장되고, 파일 시스템에는 독립적인 권한 부여 시스템이 있습니다.
- 전통적인 RDBMS처럼 다른 프로그램이 데이터에 직접 접근하는 것을 막지 않는 것과 달리, 사람들은 Hive에서 사용되는 파일이나 디렉터리에 직접 읽고 쓰는 다른 애플리케이션을 사용하는 경향이 있어요.
이로 인해 다음과 같은 문제 상황이 발생할 수 있어요.
- 사용자에게 권한을 부여했는데, 사용자에게 파일 시스템 권한이 없어 데이터베이스나 파일 시스템에 접근하지 못하는 경우
- 사용자의 권한을 제거했는데, 사용자가 파일 시스템 권한을 갖고 있어서 직접 데이터에 접근할 수 있는 경우
출처: 문서
본문
저장 시스템 기반 권한 부여 모델 (Storage-System Based Authorization Model)
Hive 커뮤니티는 모든 상황에 맞는 단일 권한 부여 모델이 없을 수 있음을 깨닫고, 대체 권한 부여 모델을 플러그인할 수 있도록 지원해요.
HCatalog 패키지에서는 각 데이터베이스·테이블·파티션에 대한 권한의 기준으로 기본 파일 시스템(또는 일반적으로 저장 백엔드)의 권한을 사용하는 권한 부여 인터페이스 구현을 도입했어요.
참고 (Note)
이 기능은 릴리스 0.10.0부터 Hive metastore 쪽에서도 사용할 수 있어요 (Hive 문서의 저장 기반 권한 부여 참조). Hive 0.12.0부터는 클라이언트 쪽에서도 동작합니다 (HIVE-5048, HIVE-5402).
Hive에서 파일 시스템이 저장소로 사용될 때, 데이터베이스나 테이블에 해당하는 디렉터리가 있어요. 이 권한 부여 모델에서는 사용자나 그룹이 이 디렉터리에 대해 갖는 읽기/쓰기 권한이, 사용자가 데이터베이스나 테이블에 대해 갖는 권한을 결정합니다. HBase 같은 다른 저장 시스템의 경우, 시스템 안의 동등한 엔티티에 대한 권한 부여는 해당 시스템의 권한 메커니즘을 사용해 Hive에서의 권한을 결정해요.
예를 들어, ALTER TABLE 연산은 파일 시스템에 아무것도 변경하지 않더라도 테이블 디렉터리에 대한 사용자 권한을 확인한 후 연산을 허용해요.
사용자는 데이터베이스나 테이블의 상태를 변경할 수 있는 어떤 작업도 수행하려면 저장 시스템의 해당 엔티티에 대한 쓰기 접근 권한이 필요해요. 데이터베이스나 테이블에 대한 비변경(non-modifying) 작업을 하려면 읽기 접근 권한이 필요합니다.
데이터베이스나 테이블이 Unix/POSIX 스타일 권한 모델(예: HDFS)을 가진 파일 시스템으로 지원된다면, owner 사용자·그룹·'other'에 대해 읽기(r)와 쓰기(w) 권한을 설정할 수 있어요.
HDFS 권한의 자세한 내용은 다음에서 확인할 수 있어요: http://hadoop.apache.org/docs/rx.x.x/hdfs_permissions_guide.html
- HDFS Permissions Guide (release 1.0.4)
- HDFS Permissions Guide (release 1.2.1)
참고: Apache Hadoop 2.4에서 도입된 HDFS ACL 지원은 릴리스된 Hive 버전에서는 사용할 수 없어요. 즉, 사용자가 파일 시스템에 쓸 수 있는지 판단할 때 전통적인 rwx 스타일 권한만 확인합니다. ACL 지원은 Hive trunk(HIVE-7583)에 있으며 Hive 0.14에서 제공될 예정이에요.
다른 Hadoop 릴리스 문서 링크: http://hadoop.apache.org/docs/.
참고: hive.warehouse.subdir.inherit.perms가 활성화되면 Hive가 만든 파일과 디렉터리의 권한과 ACL은 다음 권한 상속 규칙에 따라 설정됩니다.
파일 시스템이 사용자가 디렉터리나 파일에 대한 권한이 있는지 판단하는 로직은 Hive도 동일하게 사용해요.
최소 권한 (Minimum Permissions)
이 권한 부여 모델에서 Hive 연산에 필요한 최소 권한은 다음과 같아요.
| Operation | Database Read Access | Database Write Access | Table Read Access | Table Write Access |
|---|---|---|---|---|
| LOAD | X | |||
| EXPORT | X | |||
| IMPORT | X | |||
| CREATE TABLE | X | |||
| CREATE TABLE AS SELECT | X | X(source table) | ||
| DROP TABLE | X | |||
| SELECT | X | |||
| ALTER TABLE | X | |||
| SHOW TABLES | X |
주의: 이 권한 부여 모델의 현재 구현은 악의적인 사용자가 나쁜 일을 하는 것을 막지 못해요. 아래 Known Issues 섹션을 참고하세요.
사용되지 않는 권한 DDL (Unused DDL for Permissions)
Hive의 기본 권한 부여 모델을 위한 권한 관리 DDL 문은 저장 기반 모델의 권한에는 아무 효과가 없어요.
주의 (Caution)
사용자·그룹·역할에 대한 모든 GRANT와 REVOKE 문은 무시됩니다. 아래 Known Issues 섹션을 참고하세요.
저장 시스템 기반 권한 부여 구성 (Configuring Storage-System Based Authorization)
파일 시스템 기반 권한 부여 모델의 구현은 Hive에 포함된 StorageBasedAuthorizationProvider라는 권한 부여 제공자로 제공돼요. (이 지원은 릴리스 0.10.0에 Hive 패키지에 추가되었어요 – HIVE-3705 및 Metastore Server의 저장 기반 권한 부여 참조)
버전 (Version)
이전에는 HCatalog 패키지에 HdfsAuthorizationProvider라는 구현이 있었지만, Hive 0.14 trunk부터 폐기되고 제거되었어요. 구성이 HdfsAuthorizationProvider를 가리키고 있다면 이 구성으로 업데이트하세요.
권한 부여를 활성화하려면 hive-site.xml에 다음 항목들을 추가해야 해요.
<property>
<name>hive.security.authorization.enabled</name>
<value>true</value>
<description>enable or disable the hive client authorization</description>
</property>
<property>
<name>hive.security.authorization.manager</name>
<value>org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider</value>
<description>the hive client authorization manager class name.
The user defined authorization class should implement interface
org.apache.hadoop.hive.ql.security.authorization.HiveAuthorizationProvider.
</description>
</property>
권한 부여를 비활성화하려면 hive.security.authorization.enabled를 false로 설정하세요. Hive의 기본 권한 부여 모델을 사용하려면 hive.security.authorization.manager 프로퍼티를 설정하지 마세요.
새 테이블이나 데이터베이스 만들기 (Creating New Tables or Databases)
적절한 권한으로 새 테이블이나 데이터베이스를 만들려면, Hive 커맨드 라인으로 테이블/데이터베이스를 만든 뒤 파일 시스템 연산으로 권한을 수정하거나, HCatalog 커맨드 라인(hcat)을 사용해 데이터베이스/테이블을 만들 수 있어요.
HCatalog 커맨드 라인 도구는 Hive와 같은 구문을 사용하며, 만드는 사용자가 소유하고 "-g" 인자에 해당하는 그룹과 "-p" 인자에 지정된 권한을 가진 대응 디렉터리와 함께 테이블이나 데이터베이스를 만듭니다.
알려진 이슈 (Known Issues)
- 일부 메타데이터 연산(대부분 읽기 연산)은 권한 부여를 확인하지 않아요. https://issues.apache.org/jira/browse/HIVE-3009 참조.
- 현재 구현은 클라이언트에서 권한 부여 검사를 수행해요. 즉, 악의적인 사용자가 이 검사를 우회할 수 있습니다.
- HBase 테이블 작업에는 다른 권한 부여 제공자(StorageDelegationAuthorizationProvider)를 사용해야 해요. 다만 충분히 테스트되지는 않았습니다.
- Hive 쿼리가 추가한 파티션 파일과 디렉터리는 테이블로부터 권한을 상속받지 않아요. 즉, 그룹에 테이블 접근 권한을 부여해도, 클러스터의 기본 umask가 그렇게 구성되어 있다면 새 파티션은 owner에게만 읽기 권한만 있을 수 있어요. https://issues.apache.org/jira/browse/HIVE-3094 참조. 별도의
hdfs chmod명령으로 권한을 수정해야 합니다. - 권한 관리용 DDL 문은 저장 기반 권한 부여에는 효과가 없지만, 현재는 오류 메시지를 반환하지 않아요. https://issues.apache.org/jira/browse/HIVE-3010 참조.
Hive 문서: Authorization 및 Metastore Server의 저장 기반 권한 부여
더 알아보기 (Learn more)
저장 기반 권한 부여는 RDBMS 스타일이 아닌, 파일 시스템 권한(rwx)을 그대로 테이블·데이터베이스 권한으로 사용하는 모델이에요. StorageBasedAuthorizationProvider를 hive-site.xml에 설정해 활성화하며, 운영 시 파일 디렉터리 권한 관리를 함께 해줘야 안전하게 쓸 수 있습니다.