Hive 권한 관리 조사 연구
1. 네 가지 권한 수여 모델
1.1 저장 기반 인증 (Storage Based Authorization in the Metastore Server)
Hive 는 테이블 저장 층 으로 한다.HDFS 파일 / 디 렉 터 리 권한 관리 및 Hive 메타 데이터 설정 을 통 해 사용자 액세스 데이터 권한 을 부여 합 니 다.Metastore 의 메타 데 이 터 를 악성 사용자 에 의 해 파괴 되 지 않도록 보호 할 수 있 지만 파일 에 대한 권한 관리 로 인해 세분 화 (열 등급, 줄 등급) 접근 제어 가 제공 되 지 않 았 습 니 다.Hive 0.12.0 버 전 이후 지원 을 시작 합 니 다.
1.2 SQL 표준 기반 Hive 인증 (SQL Standards Based Hive Authorization)
SQL 표준 을 기반 으로 하 는 Hive 권한 수 여 는 SQL 을 완전히 호 환 하 는 권한 수여 모델 로 현재 사용자 에 게 뒤로 호 환 되 는 문 제 를 가 져 오지 않 기 때문에 추천 되 어 사 용 됩 니 다.사용자 가 더욱 안전 한 권한 수여 체제 로 이전 하면 기본 적 인 권한 수여 체 제 는 버 려 질 수 있다.
SQL 기반 인증 모델 은 저장 기반 인증 모델 (Hive Metastore Server) 과 결합 하여 사용 할 수 있 습 니 다.
Hive 의 기본 권한 수여 메커니즘 과 마찬가지 로 발생 하 는 SQL 문장의 컴 파일 단 계 를 확인 할 수 있 는 권한 을 부여 합 니 다.
이 권한 수여 모델 이 안전 역할 을 하 는 것 을 확보 하기 위해 클 라 이언 트 역시 안전 보증 이 필요 하고 다음 과 같은 두 가지 방식 으로 할 수 있다.
(1) 사용자 가 방문 해 야 하 며 HiveServer 2 만 통과 할 수 있 습 니 다.
(2) 사용자 코드 와 비 SQL 명령 이 실행 되 는 것 을 제한 합 니 다.
인증 확인 시 SQL 명령 을 제출 한 사용자 신분 을 근거 로 하지만 SQL 명령 은 Hive Server 사용자 신분 (즉 Hive Server 의 프로 세 스 사용자) 으로 실행 되 므 로 Hive Server 사용 자 는 해당 디 렉 터 리 (파일) 권한 을 가 져 야 합 니 다 (SQL 명령 에 따라 필요 한 권한 도 다 릅 니 다).
이러한 권한 수여 모델 제어 하에 서 Hive CLI, HDFS commands, Pig command line, 'hadop jar' 등 도구 (명령) 를 사용 할 수 있 는 권한 을 가 진 사용 자 를 특권 사용자 라 고 부른다.한 조직 (팀) 에서 ETL 관련 업 무 를 수행 해 야 하 는 일부 팀 은 이러한 특수 한 권한 이 필요 합 니 다. 이 도구 들 의 방문 은 Hive Server 2 를 거치 지 않 기 때문에 이러한 권한 수여 모델 의 통 제 를 받 지 않 습 니 다.Hive CLI, Pig, MapReduce 를 통 해 Hive 표를 방문 해 야 하 는 사용자 에 게 는 Hive Metastore Server 에서 Storage Based Authorization 을 사용 하여 해당 하 는 권한 제 어 를 할 수 있 으 며 첫 번 째 모드 를 참고 할 수 있 습 니 다.다른 경우 Hadoop 의 보안 메커니즘 과 결합 해 야 할 수도 있다.Hive CLI 방식 은 공식 적 으로 포기 하 라 고 건의 하 는데 이 방식 은 안전 하지 않다.
대부분의 사용자 (SQL 문 구 를 사용 하고 ODBC / JDBC 를 통 해 HiveServer 2 를 방문 하여 상업 분석) 는 이러한 권한 수여 모델 로 권한 통 제 를 할 수 있다.
1.3 Apache Ranger & Sentry 를 통 해 권한 부여
Apache Ranger & Sentry 는 hive 가 제공 하 는 플러그 인 을 통 해 권한 을 부여 하 는 것 으로 이들 은 많은 선진 적 인 기능 을 제공 할 수 있다.
1.4 오래된 Hive 기본 권한 부여 (전통 모드)
Hive 의 오래된 기본 권한 수여 (2.0.0 버 전 이전) 모델 에는 남 겨 진 안전 위험 이 많 습 니 다.예 를 들 어 모든 사용 자 는 자신 에 게 표 나 데이터 베 이 스 를 부여 할 수 있다.
이 모델 은 SQL 표준 을 바탕 으로 하 는 권한 수여 와 비슷 하고 grant / revoke 경로 제어 도 제공 하지만 이들 의 바 텀 메커니즘 이 다 르 고 서로 호 환 되 지 않 습 니 다.이 모드 는 Hive 명령 행 사용자 만 지원 하 며 안전 하지 않 은 모드 입 니 다.
2. SQL 표준 을 바탕 으로 하 는 Hive 권한 수여 장면 응용
2.1 장면 소개
1. hive 와 hdfs 사용 자 는 Hive 모든 라 이브 러 리 시트 의 모든 권한 을 가지 고 있 습 니 다.
2. 팀 팀 팀 1 사용자 그룹의 zhaominhui 는 ODS 라 이브 러 리 student 의 데이터 읽 기 권한 을 가진다.
2.2 테스트 환경
CDH 버 전 5.7.4
하 이브 버 전 1.1.0
2.3 Hive 설정
CDH 에서 Hive 서비스 설정 에 있 는 hive - site. xml 의 Hive 서비스 고급 설정 코드 세그먼트 (안전 밸브) 설정 옵션 에 다음 과 같은 내용 을 추가 합 니 다.
hive.security.authorization.enabled
true
hive.users.in.admin.role
hive,hdfs
hive.security.authorization.createtable.owner.grants
ALL
hive.security.metastore.authorization.manager
org.apache.hadoop.hive.ql.security.authorization.MetaStoreAuthzAPIAuthorizerEmbedOnly,org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider
hive.security.authorization.manager
org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdConfOnlyAuthorizerFactory
# , Hive 。
hive.security.authorization.task.factory
org.apache.hadoop.hive.ql.parse.authorization.HiveAuthorizationTaskFactoryImpl
2.4 권한 부여 사용
hadop 및 hive 가 있 는 노드 에 사용자 zhaominhui 를 만 들 고 사용자 그룹 에 귀속 하여 Hive 로 설정 합 니 다.
[root@hadoop2]# useradd zhaominhui
[root@hadoop2]# passwd zhaominhui
[root@hadoop2 ~]# usermod -a -G hive zhaominhui
Hive 의 집 디 렉 터 리 를 hive: hive 로 설정 합 니 다. 권한 은 771 입 니 다.
# /user/hive/warehouse 771, hive 。
[hdfs@hadoop1 /opt/cloudera/parcels/CDH-5.7.4-1.cdh5.7.4.p0.2/lib/hive/bin]$ hadoop fs -chmod -R 771 /user/hive/warehouse
# /user/hive/warehouse hive
[hdfs@hadoop1 /opt/cloudera/parcels/CDH-5.7.4-1.cdh5.7.4.p0.2/lib/hive/bin]$ hadoop fs -chown -R hive:hive /user/hive/warehouse
admin 캐릭터 를 사용 하여 캐릭터 팀 1 을 만 들 고 이 캐릭터 에 게 ODS 라 이브 러 리 student 표를 읽 을 수 있 는 권한 을 부여 합 니 다. 이 캐릭터 를 사용자 에 게 zhaominhui 를 부여 합 니 다.
# hive beeline
[root@hadoop1 /opt/cloudera/parcels/CDH-5.7.4-1.cdh5.7.4.p0.2/lib/hive/bin]# ./beeline
beeline> !connect jdbc:hive2://hadoop1:10000
Enter username for jdbc:hive2://hadoop1:10000: hive
Enter password for jdbc:hive2://hadoop1:10000:
0: jdbc:hive2://hadoop1:10000> set role admin;
0: jdbc:hive2://hadoop1:10000> alter databse ods set owner role admin;
# team1
0: jdbc:hive2://hadoop1:10000> create role team1;
# ods.student team1
0: jdbc:hive2://hadoop1:10000> grant select on ods.student to role team1;
# team1 zhaominhui
0: jdbc:hive2://hadoop1:10000> grant team1 to user zhaominhui with admin option;
# zhaominhui
0: jdbc:hive2://hadoop1:10000> show role grant user zhaominhui;
+---------+---------------+----------------+----------+--+
| role | grant_option | grant_time | grantor |
+---------+---------------+----------------+----------+--+
| public | false | 0 | |
| team1 | true | 1599186703000 | hive |
+---------+---------------+----------------+----------+--+
# zhaominhui beeline
[root@hadoop1 /opt/cloudera/parcels/CDH-5.7.4-1.cdh5.7.4.p0.2/lib/hive/bin]# ./beeline
beeline> !connect jdbc:hive2://hadoop1:10000
Enter username for jdbc:hive2://hadoop1:10000: zhaominhui
Enter password for jdbc:hive2://hadoop1:10000:
# ods.student , 。
0: jdbc:hive2://hadoop1:10000> select * from ods.student;
+---------------+--+
| student.name |
+---------------+--+
| c |
+---------------+--+
# ods.test , 。
0: jdbc:hive2://hadoop1:10000> select * from ods.test;
Error: Error while compiling statement: FAILED: HiveAccessControlException Permission denied: Principal [name=zhaominhui, type=USER] does not have following privileges for operation QUERY [[SELECT] on Object [type=TABLE_OR_VIEW, name=ods.test]] (state=42000,code=40000)
# ods.student , 。
0: jdbc:hive2://hadoop1:10000> insert into student values("i");
Error: Error while compiling statement: FAILED: HiveAccessControlException Permission denied: Principal [name=zhaominhui, type=USER] does not have following privileges for operation QUERY [[INSERT] on Object [type=TABLE_OR_VIEW, name=ods.student, action=INSERT]] (state=42000,code=40000)
2.5 센트 리 와 의 차이
1) SQL 표준 을 바탕 으로 하 는 Hive 권한 수여 방식 은 이 사용자 가 hdfs 관련 권한 을 가 져 야 하 며, Sentry 는 표 권한 을 설정 한 후 hdfs 데이터 대응 권한 을 자동 으로 부여 합 니 다.
2) hive 와 hdfs 사용자, Sentry 방식 에 서 는 beeline 에서 sql 명령 을 사용 하여 이 사용자 admin 방식 을 부여 해 야 모든 권한 을 부여 할 수 있 습 니 다. SQL 표준 Hive 권한 을 바탕 으로 설정 파일 에 admin 사용 자 를 설정 한 후 beeline 클 라 이언 트 에 서 는 sql 명령 으로 admin 권한 을 부여 하지 않 아 도 됩 니 다. hive / hdfs 사용자 에 게 도 Hive 모든 라 이브 러 리 표 의 모든 권한 이 있 습 니 다.
3) SQL 표준 을 기반 으로 하 는 Hive 권한 수여 방식 은 show databases, use databaseName, show tables 작업 에 대한 권한 제어 (확장 이 필요 해 야 가능) 가 불가능 하 며, Sentry 는 show databases, use databaseName, show tables 작업 에 대한 권한 제 어 를 실현 할 수 있 습 니 다.
4) SQL 표준 을 기반 으로 하 는 Hive 권한 부여, 권한 부 여 는 표 등급 이나 보기 등급 으로 이 루어 지 며 데이터베이스 등급 의 권한 부 여 는 지원 되 지 않 습 니 다.이 는 같은 팀 구성원 간 또는 서로 다른 팀 구성원 간 에 데 이 터 를 공유 하 는 데 불편 을 가 져 올 수 있 습 니 다. 모두 표 나 보기 로 해당 하 는 권한 을 부여 해 야 하지만 사용자 의 데이터 (표 나 보기) 가 더욱 안전 하 다 는 장점 이 있 습 니 다.Sentry 는 데이터베이스 등급 의 인증 을 지원 합 니 다.
3. 총화
상기 에서 Hive 권한 수여 의 네 가지 모델 을 약술 하고 SQL 기준 을 바탕 으로 하 는 Hive 권한 수여 모델 장면 응용 실천 을 중심 으로 소개 하 며 Sentry 와 비교 설명 을 했다.
장면 응용 실천 에서 zhaominhui 사용 자 는 Linux 시스템 사용자 로 hive 사용자 그룹 으로 설정 한 것 은 hdfs 경로 데이터 와 관련 된 권한 을 가지 기 위해 서 입 니 다. 그렇지 않 으 면 beeline 에서 표 권한 만 설정 하고 hdfs 데이터 의 접근 등 관련 권한 이 없 으 면 권한 통 제 를 실현 할 수 없습니다.여기 설 치 된 zhaominhui 사용자 소속 그룹 은 hive 이 고 다른 사용자 그룹 으로 설정 할 수 있 습 니 다. 그러나 이 사용자 그룹 은 hdf 경로 / user / hive / warehouse / ods. db / student 에 대해 읽 기 권한 을 가 져 야 상기 실천 과 같은 권한 제어 효 과 를 실현 할 수 있 습 니 다.이 테이블 에 읽 기 권한 이 필요 한 사용 자 는 모두 이 사용자 그룹 에 속 할 수 있 으 며, 팀 1 의 역할 인 ods. student 테이블 의 읽 기 권한 을 사용자 그룹 에 부여 하여 여러 번 사용자 에 게 역할 을 부여 하지 않도록 할 수 있 습 니 다.
레 퍼 런 스https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Authorization#LanguageManualAuthorization-2SQLStandardsBasedAuthorizationinHiveServer2
https://cwiki.apache.org/confluence/display/Hive/Storage+Based+Authorization+in+the+Metastore+Server?spm=a2c63.p38356.879954.6.c00d33fbI8epBL
https://cwiki.apache.org/confluence/display/Hive/SQL+Standard+Based+Hive+Authorization?spm=a2c63.p38356.879954.8.c00d33fbI8epBL
https://www.cnblogs.com/yurunmiao/p/4441735.html
https://www.cnblogs.com/yurunmiao/p/4449439.html
https://blog.csdn.net/wangwenting2016/article/details/53843998?utm_medium=distribute.pc_relevant.none-task-blog-title-1&spm=1001.2101.3001.4242
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.