2. 이 문서는
• Hive 0.11.0 버전을 기준으로 작성 (하둡 1.1.2)
• 인증에 관한 자세한 내용은 포함하지 않음
• 다음을 참고하여 작성됨
- https://cwiki.apache.org/confluence/display/Hive/
LanguageManual+Authorization
- https://github.com/apache/hive BRANCH-0.11 브랜치
- 하이브 완벽 가이드, O’REILLY, 한빛 미디어
- http://www.slideshare.net/thejasmn/hive-authorization-models ,
Hadoop Summit 2013
7. 권한 관리 구현체
• 권한은 hive.security.authorization.manager가 관리
org.apache.hadoop.hive.ql.security.authorization.DefaultHiveAu
thorizationProvider
기본 구현체
8. HiveAuthenticationProvider
public interface HiveAuthorizationProvider extends Configurable{
public void init(Configuration conf) throws HiveException;
public HiveAuthenticationProvider getAuthenticator();
public void setAuthenticator(HiveAuthenticationProvider authenticator);
public void authorize(Privilege[] readRequiredPriv, Privilege[] writeRequiredPriv)
throws HiveException, AuthorizationException;
public void authorize(Database db, Privilege[] readRequiredPriv, Privilege[] writeRequiredPriv) throws
HiveException, AuthorizationException;
public void authorize(Table table, Privilege[] readRequiredPriv,
Privilege[] writeRequiredPriv) throws HiveException, AuthorizationException;
public void authorize(Partition part, Privilege[] readRequiredPriv, Privilege[] writeRequiredPriv) throws
HiveException, AuthorizationException;
public void authorize(Table table, Partition part, List<String> columns,
Privilege[] readRequiredPriv, Privilege[] writeRequiredPriv)
throws HiveException, AuthorizationException;
}
9. 역할 role
• 역할role은 사용자user와 그룹group과 달리 사용자가
생성할 수 있다
CREATE ROLE role_name
DROP ROLE role_name
역할 생성
GRANT ROLE role_name TO USER user1, user2
GRANT ROLE role_name TO GROUP group1
GRANT ROLE role_name TO ROLE role1
REVOKE ROLE role_name FROM USER user1
REVOKE ROLE role_name FROM GROUP group1, group2
역할 부여 / 파기
10. 특권 Privileges
이름 설명
ALL 모든 퍼미션을 한번에 부여
ALTER 테이블 변경 가능
UPDATE 테이블이나 파티션에 로드 또는 삽입 가능
CREATE 테이블 생성 가능
DROP 테이블이나 파티션 삭제 가능
INDEX 색인 생성 가능
LOCK 동시성을 활성화인 경우 테이블을 잠그거나 잠금을 푼다
SELECT 테이블이나 파티션 쿼리 가능
SHOW_DATABASE 이용 가능한 데이터베이스 조회 가능
11. 권한 부여/ 회수
GRANT
priv_type [(column_list)] [, priv_type [(column_list)]] ...
[ON object_type]
TO principal_specification [, principal_specification] ...
[WITH GRANT OPTION]
REVOKE
priv_type [(column_list)] [, priv_type [(column_list)]] ...
[ON object_type priv_level]
FROM principal_specification [, principal_specification] ...
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
object_type: TABLE | DATABASE
priv_level: db_name | tbl_name
principal_specification : USER user | GROUP group | ROLE role
priv_type: ALL, ALTER, UPDATE, CREATE, DROP, INDEX, LOCK, SELECT, SHOW_DATABASE
12. 권한 부여/ 회수
-- 테이블에 사용자 권한 부여 / 회수
grant select on table src_autho_test to user hive_test_user;
revoke select on table src_autho_test from user hive_test_user;
-- 컬럼에 사용자 권한 부여 / 회수
grant select(key) on table src_autho_test to user hive_test_user;
-- 테이블에 그룹 권한 부여 / 회수
grant select on table src_autho_test to group hive_test_group1;
revoke select on table src_autho_test from group hive_test_group1;
13. 권한 보기
show grant user test_user on table src_autho_test;
show grant user test_user on table src_autho_test(key);
show grant group test_group1 on table src_autho_test;
show grant group test_group1 on table src_autho_test(key);
show grant role test_role1 on table src_autho_test;
show grant role test_role1 on table src_autho_test(key);
14. 파티션 수준의 권한
• 파티션 단위로 퍼미션을 부여하려면
PARTITION_LEVEL_PRIVILEGE를 true로 설정해야 한다
CREATE TABLE authorize_part (key INT, value STRING) PARTITIONED BY (ds STRING);
-- 기존 테이블에 파티션 퍼미션 설정
ALTER TABLE authorization_part
SET TBLPROPERTIES (‘PARTITION_LEVEL_PRIVILEGE’=‘TRUE’);
-- 사용자에게 select 권한 파기
REVOKE SELECT ON TABLE authorization_part PARTITION (ds=’3’) FROM USER admin;
-- 사용자에게 select 권한 부여
GRANT SELECT ON TABLE authorization_part PARTITION (ds=’3’) TO USER admin;
16. 자동 권한 부여 예
<property>
<name>hive.security.authorization.createtable.user.grants</name>
<value>admin1,michael:select;user1:create</value>
</property>
• 특정 사용자는 생성한 테이블에 대한 퍼미션을 자동
으로 부여 받을 수 있다
18. beeline로 hs2 접근
hive --service beeline
beeline 실행
• hiveserver2 를 위한 새로운 CLI
beeline 접속
!connect jdbc:hive2://localhost:10000 user password org.apache.hive.jdbc.HiveDriver
19. JDBC로 hs2 접근
Connection con = DriverManager.getConnection("jdbc:hive2://
localhost:10000/default", "user", "password");
Statement stmt = con.createStatement();
String sql = "select * from dual";
System.out.println("Running: " + sql);
ResultSet res = stmt.executeQuery(sql);
while (res.next()) {
System.out.println(String.valueOf(res.getInt(1)));
}
21. HDFS 권한 설정
hadoop fs -chmod -R 777 /path/to/warehouse/on/hdfs
hadoop fs -chmod -R 777 /path/to/scratchdir/on/hdfs
스토리지 권한 설정
• 사용자가 HDFS상의 권한도 가지고 있어야 한다
23. 현재 하이브의 권한은 ..
• 전통적인 RDBMS 방식과 스토리지 방식의 한계
• 악의적 사용자에게서 메타데이터를 완벽하게 보호하
지 못함
• 하지만 사용자의 오사용을 방지를 위해서 필요
• 새로운 권한 모델 제안
- http://www.slideshare.net/thejasmn/hive-authorization-
models by Thejas Nair at Hadoop Summit 2013
- https://issues.apache.org/jira/browse/HIVE-3720