ホームページ データベース 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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Go 言語で Hive を使用して効率的なデータ ウェアハウスを実装する Go 言語で Hive を使用して効率的なデータ ウェアハウスを実装する Jun 15, 2023 pm 08:52 PM

近年、データ ウェアハウスは企業のデータ管理に不可欠な部分となっています。データ分析にデータベースを直接使用すると、単純なクエリのニーズを満たすことができますが、大規模なデータ分析を実行する必要がある場合、単一のデータベースではニーズを満たすことができなくなり、大量のデータを処理するデータ ウェアハウスを使用する必要があります。 。 Hive は、データ ウェアハウス分野で最も人気のあるオープン ソース コンポーネントの 1 つで、Hadoop 分散コンピューティング エンジンと SQL クエリを統合し、大量のデータの並列処理をサポートできます。同時に、Go 言語では次を使用します。

PHP はオープンソースの Hive ビッグデータ分析プラットフォームを実装します PHP はオープンソースの Hive ビッグデータ分析プラットフォームを実装します Jun 18, 2023 pm 02:47 PM

データ処理の重要性が高まるにつれて、ビッグデータ分析がますます一般的になってきています。ただし、多くの企業はビジネス分析プラットフォームに多額の費用を費やしたくないかもしれません。オープンソース ソリューションは、これらの企業に実行可能な選択肢を提供します。この記事では、PHP を使用してオープンソースの Hive ビッグ データ分析プラットフォームを実装する方法について説明します。 Hive は、SQL を介して Hadoop 上の大規模なデータ セットをクエリおよび管理できる 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 は、Web 開発で広く使用されているプログラミング言語です。 Web アプリケーションでは、セキュリティが非常に重要であり、権限の認証と認可は、Web アプリケーションを不正アクセスから保護するための重要な側面の 1 つです。この記事では、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 がインストールされていることを確認します。 まず、Java が CentOS7 にインストールされていることを確認します。次のコマンドを使用して、Java がインストールされているかどうかを確認できます。 java-version Java がインストールされていない場合は、必要に応じて適切な Java バージョンをインストールしてください。 Hive をダウンロードする: ApacheHive の公式 Web サイト () にアクセスし、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にサードパーティ権限認証システムを統合する方法 Laravelにサードパーティ権限認証システムを統合する方法 Nov 03, 2023 pm 06:51 PM

Laravel にサードパーティ権限認証システムを統合する方法 はじめに: Laravel は、開発プロセスを簡素化するための便利な機能とツールを多数提供する強力な PHP 開発フレームワークです。実際の開発では、ユーザーの権限を管理するためにサードパーティの権限認証システムを統合する必要があることがよくあります。この記事では、Laravel にサードパーティ機関の認証システムを統合する方法と、具体的なコード例を紹介します。ステップ 1: サードパーティ機関認証システムをインストールする. まず、適切なサードパーティ機関認証システムを選択してインストールする必要があります。

See all articles