• Save
Hive Authorization
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Hive Authorization

  • 3,952 views
Uploaded on

Hive Authorization

Hive Authorization

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,952
On Slideshare
2,436
From Embeds
1,516
Number of Embeds
4

Actions

Shares
Downloads
0
Comments
0
Likes
1

Embeds 1,516

http://julingks.tistory.com 1,509
http://webcache.googleusercontent.com 4
http://www.hanrss.com 2
http://translate.googleusercontent.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Hive Authorization July 2nd 2013 Minwoo Kim michael.kim@nexr.com
  • 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
  • 3. 권한 활성화 <property> <name>hive.security.authorization.enabled</name> <value>true</value> <description>하이브 클라이언트 권환을 활성화 또는 비활성화하 한다 </description> </property> hive> set hive.security.authorization.enabled=true; hive-site.xml CLI
  • 4. 권한 대상 • 하이브는 사용자user, 그룹group, 역할role에 퍼미션을 부여하거 나 회수할 수 있다 - 하이브의 사용자는 시스템 사용자 - 그룹은 사용자의 첫번째 POSIX 그룹과 동일 - HiveServer2의 경우에는 사용자를 지정하여 접속 할 수 있다
  • 5. 사용자user, 그룹group • 사용자user와 그룹group은 hive.security.authenticator.manager가 관리 org.apache.hadoop.hive.ql.security.HadoopDefaultAuthenticator 기본 구현체 - job configuration에서 hadoop.job.ugi 값으로 username과 group을 결정
  • 6. HiveAuthenticationProvider public interface HiveAuthenticationProvider extends Configurable{ public String getUserName(); public List<String> getGroupNames(); public void destroy() throws HiveException; }
  • 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;
  • 15. 자동 권한 부여 <property> <name>hive.security.authorization.createtable.owner.grants</name> <value>ALL</value> <description>테이블이 생성될 때 소유자에게 자동으로 퍼미션을 설정한다. select, drop이 라 설정하면 select와 drop 퍼미션이 테이블 소유자에게 자동으로 부여된다. </description> </property> • 기타 자동 권한 부여 설정들 - hive.security.authorization.createtable.user.grant - hive.security.authorization.createtable.group.grant - hive.security.authorization.createtable.role.grant
  • 16. 자동 권한 부여 예 <property> <name>hive.security.authorization.createtable.user.grants</name> <value>admin1,michael:select;user1:create</value> </property> • 특정 사용자는 생성한 테이블에 대한 퍼미션을 자동 으로 부여 받을 수 있다
  • 17. HiveSever2 시작 hive --service hiveserver2
  • 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))); }
  • 20. HDFS 권한 설정 <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> <description>location of default database for the warehouse</description> </property> 기본 warehouse 위치 설정 <property> <name>hive.exec.scratchdir</name> <value>/tmp/hive-${user.name}</value> <description>Scratch space for Hive jobs</description> </property> 기본 scratchdir 위치 설정
  • 21. HDFS 권한 설정 hadoop fs -chmod -R 777 /path/to/warehouse/on/hdfs hadoop fs -chmod -R 777 /path/to/scratchdir/on/hdfs 스토리지 권한 설정 • 사용자가 HDFS상의 권한도 가지고 있어야 한다
  • 22. 대역 설정 <property> <name>hive.server2.enable.doAs</name> <value>true</value> <description> Impersonate the connected user, default true</ description> </property> • true 설정하면 대역 기능 활성화 • false 로 설정하면 hive의 시스템 사용자를 사용자로 지정한다 • 여러 사용자의 권한을 사용하기 위해서는 대역기능이 필요하므로 true로 설 정되어 있어야 한다
  • 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
  • 24. 참고 자료 • 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