데이터 베이스 MySQL 튜토리얼 hive任务提交的相关权限认证详析

hive任务提交的相关权限认证详析

Jun 07, 2016 pm 04:57 PM
hive 권한 인증

最近在研究Hue,遇到一个问题,在HiveEditor写一个HQL,提交后会报权限错误,类似这样的Authorizationfailed:NoprivilegeSelectfoundforinputs&n..

    最近在研究Hue,遇到一个问题,在Hive Editor写一个HQL,提交后会报权限错误,类似这样的

Authorization failed:No privilege 'Select' found for inputs {database:xxx, table:xxx, columnName:xxx}. Use show grant to get more details.

    Hue的登录用户是hadoop,使用cli方式查询的时候,是没问题的,但是使用Hue连接HiveServer2的方式,就查询不了对应的表了,排除Hue的干扰,使用Beeline来连接HiveServer2,同样报权限的错误,堆栈信息如下图



wKiom1O1KT_jKAZdAAyGT2bPY6U498.jpg


    根据堆栈信息大概梳理了下源码(只列出比较重要的代码),Hive提交SQL的权限验证流程如下

    Driver.compile(String command, boolean resetTaskIds){       if (HiveConf.getBoolVar(conf,           HiveConf.ConfVars.HIVE_AUTHORIZATION_ENABLED)) {         try {           perfLogger.PerfLogBegin(LOG, PerfLogger.DO_AUTHORIZATION);           //进行权限校验           doAuthorization(sem);         }      }      Driver.doAuthorization(BaseSemanticAnalyzer sem){         //判断op的操作类型为QUERY         if (op.equals(HiveOperation.CREATETABLE_AS_SELECT)               || op.equals(HiveOperation.QUERY)) {             if (cols != null && cols.size() > 0) {                 //进行更具体的验证                 ss.getAuthorizer().authorize(tbl, null, cols,                     op.getInputRequiredPrivileges(), null);             }          }      }      BitSetCheckedAuthorizationProvider.authorize(Table table, Partition part, List columns,Privilege[] inputRequiredPriv, Privilege[] outputRequiredPriv){             //验证用户对DB和Table的权限             authorizeUserDBAndTable(table, inputRequiredPriv, outputRequiredPriv,inputCheck,outputCheck)             //验证用户对Table中column的权限             for (String col : columns) {                 PrincipalPrivilegeSet partColumnPrivileges = hive_db                       .get_privilege_set(HiveObjectType.COLUMN, table.getDbName(),table.getTableName(),partValues, col,this.getAuthenticator().getUserName(), this.getAuthenticator().getGroupNames());                 authorizePrivileges(partColumnPrivileges, inputRequiredPriv, inputCheck2,                        outputRequiredPriv, outputCheck2);             }      }

    Hive的权限验证首先会调用authorizeUserDBAndTable验证用户是否对访问的DB和Table有访问权限,对应到MetaStore的DB_PRIVS和TBL_PRIVS表,在进行验证的时候,会通过thrift与HiveMetaStore进程进行交互来获取MetaStore库中对应表的相关信息。如果用户对更大粒度的资源有访问权限,则会直接返回,不会再继续进行更细粒度的验证,也就是说如果用户对DB有相关的权限,则不会继续验证对Table和Column的访问权限。

    查看了下DB_PRIVS表,hadoop用户对访问的数据库是有Select权限的,所以再传统CLI模式下访问是没有问题的。看上述代码也都是在预料之中,因为实际上CLI模式和HiveServer模式的权限验证是一套代码。决定remote debug下,进而发现this.getAuthenticator().getUserName()的值为hive,也即是启动HiveServer2的用户,而不是提交SQL的用户hadoop,顺藤摸瓜,找到了设置authenticator相关属性的代码

    SessionState.start(SessionState startSs) {         //实例化默认的HadoopDefaultAuthenticator,方法内部,,使用ReflectionUtils反射加载类的时候,进而调用了HadoopDefaultAuthenticator.setConf方法         startSs.authenticator=HiveUtils.getAuthenticator(startSs.getConf(),HiveConf.ConfVars.HIVE_AUTHENTICATOR_MANAGER);     }     HadoopDefaultAuthenticator.setConf(Configuration conf){         ugi = ShimLoader.getHadoopShims().getUGIForConf(conf);     }     HadoopShimsSecure.getUGIForConf(Configuration conf) throws IOException {         return UserGroupInformation.getCurrentUser();     }      UserGroupInformation.getCurrentUser() throws IOException {     AccessControlContext context = AccessController.getContext();     Subject subject = Subject.getSubject(context);     //HiveServer刚启动的时候,subject为空,调用getLoginUser     if (subject == null || subject.getPrincipals(User.class).isEmpty()) {       return getLoginUser();     } else {       return new UserGroupInformation(subject);     }   } UserGroupInformation.getLoginUser() {     if (loginUser == null) {       try {         Subject subject = new Subject();         LoginContext login;         if (isSecurityEnabled()) {           login = newLoginContext(HadoopConfiguration.USER_KERBEROS_CONFIG_NAME,               subject, new HadoopConfiguration());         } else {           login = newLoginContext(HadoopConfiguration.SIMPLE_CONFIG_NAME,                subject, new HadoopConfiguration());         }         login.login();         loginUser = new UserGroupInformation(subject);         loginUser.setLogin(login);         loginUser.setAuthenticationMethod(isSecurityEnabled() ?                                           AuthenticationMethod.KERBEROS :                                           AuthenticationMethod.SIMPLE);         loginUser = new UserGroupInformation(login.getSubject());         String fileLocation = System.getenv(HADOOP_TOKEN_FILE_LOCATION);         if (fileLocation != null) {           Credentials cred = Credentials.readTokenStorageFile(               new File(fileLocation), conf);           loginUser.addCredentials(cred);         }         loginUser.spawnAutoRenewalThreadForUserCreds();       } catch (LoginException le) {         LOG.debug("failure to login", le);         throw new IOException("failure to login", le);       }       if (LOG.isDebugEnabled()) {         LOG.debug("UGI loginUser:"+loginUser);       }     }     return loginUser;   }

    

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Go 언어로 Hive를 사용하여 효율적인 데이터 웨어하우스 구현 Go 언어로 Hive를 사용하여 효율적인 데이터 웨어하우스 구현 Jun 15, 2023 pm 08:52 PM

최근 몇 년 동안 데이터 웨어하우스는 기업 데이터 관리의 필수적인 부분이 되었습니다. 데이터 분석을 위해 데이터베이스를 직접 사용하면 간단한 쿼리 요구 사항을 충족할 수 있지만, 대규모 데이터 분석을 수행해야 하는 경우 단일 데이터베이스로는 더 이상 이러한 요구 사항을 충족할 수 없습니다. . Hive는 데이터 웨어하우스 분야에서 가장 널리 사용되는 오픈 소스 구성 요소 중 하나입니다. Hadoop 분산 컴퓨팅 엔진과 SQL 쿼리를 통합하고 대규모 데이터의 병렬 처리를 지원할 수 있습니다. 동시에 Go 언어에서는 다음을 사용합니다.

PHP는 오픈 소스 Hive 빅 데이터 분석 플랫폼을 구현합니다. PHP는 오픈 소스 Hive 빅 데이터 분석 플랫폼을 구현합니다. Jun 18, 2023 pm 02:47 PM

데이터 처리가 점점 더 중요해짐에 따라 빅데이터 분석이 점점 더 보편화되고 있습니다. 그러나 많은 기업에서는 비즈니스 분석 플랫폼에 많은 돈을 지출하고 싶어하지 않을 수 있습니다. 오픈 소스 솔루션은 이러한 회사에 실행 가능한 옵션을 제공합니다. 이번 글에서는 PHP를 사용하여 오픈소스 Hive 빅데이터 분석 플랫폼을 구현하는 방법에 대해 설명하겠습니다. Hive는 Hadoop의 대규모 데이터 세트를 SQL을 통해 쿼리하고 관리할 수 있는 Hadoop 기반 데이터 웨어하우스 시스템입니다. SQL과 유사한 HiveQL 언어를 사용하여 쿼리합니다.

PHP 시작하기: PHP와 Hive PHP 시작하기: PHP와 Hive May 20, 2023 am 08:33 AM

PHP는 거의 모든 산업 분야에서 널리 사용되는 서버 측 프로그래밍 언어입니다. 이 글에서는 빅데이터 처리에서 PHP의 특별한 역할을 살펴보겠습니다. 특정 상황에서 PHP는 ApacheHive와 협력하여 실시간 데이터 처리 및 분석을 달성할 수 있습니다. 먼저 Hive를 소개하겠습니다. Hive는 Hadoop 기반 데이터 웨어하우스 솔루션입니다. 구조화된 데이터를 SQL 쿼리에 매핑하고 쿼리를 MapReduce 작업으로 실행할 수 있습니다.

PHP는 권한 인증 및 권한 부여를 구현합니다. PHP는 권한 인증 및 권한 부여를 구현합니다. Jun 22, 2023 am 10:38 AM

PHP는 웹 개발에 널리 사용되는 프로그래밍 언어입니다. 웹 애플리케이션에서는 보안이 매우 중요합니다. 여기서 권한 인증 및 권한 부여는 웹 애플리케이션을 무단 액세스로부터 보호하는 중요한 측면 중 하나입니다. 이 기사에서는 PHP가 권한 인증 및 권한 부여를 구현하는 방법을 알아봅니다. 권한 인증은 특정 사용자가 리소스에 접근하거나 작업을 수행할 수 있는 권한이 있는지 확인하는 것입니다. 이 기능을 구현하기 위해서는 먼저 사용자 인증, 사용자가 특정 리소스에 접근할 수 있는 권한이 있는지 확인하는 등의 사용자 시스템이 필요하다. 인증 활성화

Microsoft Exchange Server가 Hive의 'windows.exe” 랜섬웨어에 의해 공격을 받았습니다. Microsoft Exchange Server가 Hive의 'windows.exe” 랜섬웨어에 의해 공격을 받았습니다. Apr 16, 2023 pm 01:28 PM

소프트웨어를 최신 상태로 유지하고 신뢰할 수 있는 소스에서만 파일을 다운로드하는 것이 표준 사이버 보안 관행이지만 최근 맬웨어 공격이 증가한 것을 고려할 때 이 분야에 대한 더 많은 교육이 필요하다는 것은 분명합니다. 이를 위해 Varonis 포렌식 팀은 Hive 랜섬웨어를 사용하는 공격자가 최신 일련의 공격에서 Microsoft Exchange Server를 표적으로 삼는 방법에 대한 몇 가지 지침을 제공했습니다. 모르시는 분들을 위해 설명하자면, Hive는 서비스형 랜섬웨어 모델을 따릅니다. Microsoft는 알려진 취약점에 대해 2021년 E를 목표로 하고 있지만,

Centos7 설치 및 구성 Hive 튜토리얼. Centos7 설치 및 구성 Hive 튜토리얼. Feb 19, 2024 pm 02:21 PM

CentOS7에 Hive를 설치하고 구성할 때 다음 단계를 수행할 수 있습니다. Java가 설치되어 있는지 확인합니다. 먼저 CentOS7에 Java가 설치되어 있는지 확인합니다. 다음 명령을 사용하여 Java가 설치되어 있는지 확인할 수 있습니다. java-version Java가 설치되어 있지 않은 경우 필요에 따라 적절한 Java 버전을 설치하십시오. Hive 다운로드: ApacheHive() 공식 웹사이트를 방문하여 최신 안정 버전의 Hive를 다운로드하세요. Hive 압축 패키지 압축 해제: 다음 명령을 사용하여 Hive 압축 패키지의 압축을 해제합니다. tarxvfzhive-x.x.x.tar.gz 이렇게 하면 Hive가 현재 디렉터리로 압축 해제됩니다. 환경 변수 구성: 터미널을 열고,

Microsoft는 Windows Defender의 Behavior:Win32/Hive.ZY 오류에 대한 수정 사항을 출시했습니다. Microsoft는 Windows Defender의 Behavior:Win32/Hive.ZY 오류에 대한 수정 사항을 출시했습니다. Apr 28, 2023 pm 04:01 PM

Microsoft 관계자는 Google Chrome, ChromiumEdge, Discord 및 기타 여러 응용 프로그램이 Microsoft 내장 바이러스 백신 소프트웨어 "WindowsDefender"에 의해 "Behavior:Win32/Hive.ZY"로 표시되었다는 광범위한 보고를 확인했습니다. 거대 기술 기업은 성명을 통해 앞으로 몇 시간 안에 모든 사람에게 배포될 수정 사항을 작업 중이라고 확인했습니다. 그렇다면 "Behavior:Win32/Hive.ZY"는 정확히 무엇입니까? Microsoft의 보안 포털에 게시된 문서에 따르면 "Behavior:Win32/Hive.ZY"라고 표시된 모든 파일은

Laravel에서 제3자 인증 시스템을 통합하는 방법 Laravel에서 제3자 인증 시스템을 통합하는 방법 Nov 03, 2023 pm 06:51 PM

Laravel에서 제3자 인증 시스템을 통합하는 방법 소개: Laravel은 개발 프로세스를 단순화하기 위해 많은 편리한 기능과 도구를 제공하는 강력한 PHP 개발 프레임워크입니다. 실제 개발에서는 사용자 권한을 관리하기 위해 타사 권한 인증 시스템을 통합해야 하는 경우가 많습니다. 이 글에서는 Laravel에서 제3자 인증 시스템을 통합하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1단계: 제3자 권한 인증 시스템 설치 먼저 적합한 제3자 권한 인증 시스템을 선택하고 설치해야 합니다.

See all articles