Rumah pangkalan data tutorial mysql hive任务提交的相关权限认证详析

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

Jun 07, 2016 pm 04:57 PM
hive Pengesahan kuasa

最近在研究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;   }

    

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Gunakan bahasa Hive in Go untuk melaksanakan gudang data yang cekap Gunakan bahasa Hive in Go untuk melaksanakan gudang data yang cekap Jun 15, 2023 pm 08:52 PM

Dalam beberapa tahun kebelakangan ini, gudang data telah menjadi bahagian penting dalam pengurusan data perusahaan. Menggunakan pangkalan data secara langsung untuk analisis data boleh memenuhi keperluan pertanyaan mudah, tetapi apabila kita perlu melakukan analisis data berskala besar, pangkalan data tunggal tidak lagi dapat memenuhi keperluan Pada masa ini, kita perlu menggunakan gudang data untuk memproses data besar-besaran . Hive ialah salah satu komponen sumber terbuka yang paling popular dalam medan gudang data Ia boleh menyepadukan enjin pengkomputeran yang diedarkan Hadoop dan pertanyaan SQL dan menyokong pemprosesan data besar-besaran. Pada masa yang sama, dalam bahasa Go, gunakan

Bermula dengan PHP: PHP dan Hive Bermula dengan PHP: PHP dan Hive May 20, 2023 am 08:33 AM

PHP ialah bahasa pengaturcaraan bahagian pelayan yang digunakan secara meluas yang digunakan dalam hampir semua industri. Dalam artikel ini, kami akan meneroka peranan khas PHP dalam pemprosesan data besar. Dalam keadaan tertentu, PHP boleh bekerjasama dengan ApacheHive untuk mencapai pemprosesan dan analisis data masa nyata. Mula-mula, mari perkenalkan Hive. Hive ialah penyelesaian gudang data berasaskan Hadoop. Ia boleh memetakan data berstruktur ke dalam pertanyaan SQL dan melaksanakan pertanyaan sebagai tugasan MapReduce.

PHP melaksanakan platform analisis data besar Hive sumber terbuka PHP melaksanakan platform analisis data besar Hive sumber terbuka Jun 18, 2023 pm 02:47 PM

Apabila pemprosesan data menjadi semakin penting, analisis data besar menjadi semakin biasa. Walau bagaimanapun, banyak syarikat mungkin tidak mahu membelanjakan banyak wang pada platform analitik perniagaan. Penyelesaian sumber terbuka menawarkan syarikat ini pilihan yang berdaya maju. Dalam artikel ini, kami akan membincangkan cara melaksanakan platform analisis data besar Hive sumber terbuka menggunakan PHP. Hive ialah sistem gudang data berasaskan Hadoop yang boleh membuat pertanyaan dan mengurus set data berskala besar pada Hadoop melalui SQL. Ia menggunakan bahasa HiveQL seperti SQL untuk membuat pertanyaan

PHP melaksanakan pengesahan kebenaran dan kebenaran PHP melaksanakan pengesahan kebenaran dan kebenaran Jun 22, 2023 am 10:38 AM

PHP ialah bahasa pengaturcaraan yang digunakan secara meluas dalam pembangunan web. Dalam aplikasi web, keselamatan adalah penting, di mana pengesahan kebenaran dan kebenaran adalah salah satu aspek penting untuk melindungi aplikasi web daripada capaian yang tidak dibenarkan. Dalam artikel ini, kita akan mempelajari cara PHP melaksanakan pengesahan dan kebenaran kebenaran. Pengesahan kebenaran adalah untuk mengesahkan sama ada pengguna tertentu mempunyai hak untuk mengakses sumber atau menjalankan operasi. Untuk melaksanakan fungsi ini, sistem pengguna diperlukan terlebih dahulu, termasuk pengesahan pengguna dan mengesahkan sama ada pengguna mempunyai kebenaran untuk mengakses sumber tertentu. Pengesahan membolehkan

Pelayan Microsoft Exchange diserang oleh perisian tebusan 'windows.exe' Hive Pelayan Microsoft Exchange diserang oleh perisian tebusan 'windows.exe' Hive Apr 16, 2023 pm 01:28 PM

Walaupun memastikan perisian sentiasa dikemas kini dan hanya memuat turun fail daripada sumber yang dipercayai adalah amalan keselamatan siber standard, memandangkan peningkatan baru-baru ini dalam serangan perisian hasad, jelas bahawa lebih banyak pendidikan diperlukan dalam bidang ini. Untuk itu, pasukan forensik Varonis telah menyediakan beberapa panduan tentang cara penyerang menggunakan perisian tebusan Hive menyasarkan Pelayan Microsoft Exchange dalam siri serangan terbaru mereka. Bagi mereka yang tidak tahu, Hive mengikuti model ransomware-as-a-service. Walaupun Microsoft menyasarkan E pada 2021 untuk kelemahan yang diketahui,

Microsoft mengeluarkan pembetulan untuk Ralat Behavior:Win32/Hive.ZY dalam Windows Defender Microsoft mengeluarkan pembetulan untuk Ralat Behavior:Win32/Hive.ZY dalam Windows Defender Apr 28, 2023 pm 04:01 PM

Seorang pegawai Microsoft mengesahkan laporan meluas bahawa Google Chrome, ChromiumEdge, Discord dan beberapa aplikasi lain telah dibenderakan sebagai "Behavior:Win32/Hive.ZY" oleh perisian antivirus terbina dalam Microsoft "WindowsDefender". Gergasi teknologi itu mengesahkan dalam satu kenyataan bahawa ia sedang mengusahakan pembetulan yang akan dilancarkan kepada semua orang dalam beberapa jam akan datang. Jadi apakah sebenarnya "Behavior:Win32/Hive.ZY"? Menurut dokumen yang disiarkan pada portal keselamatan Microsoft, mana-mana fail bertanda "Behavior:Win32/Hive.ZY" ialah

Tutorial Hive pemasangan dan konfigurasi Centos7. Tutorial Hive pemasangan dan konfigurasi Centos7. Feb 19, 2024 pm 02:21 PM

Apabila memasang dan mengkonfigurasi Hive pada CentOS7, anda boleh mengikuti langkah berikut: Pastikan Java dipasang: Pertama, pastikan Java dipasang pada CentOS7. Anda boleh menyemak sama ada Java dipasang menggunakan arahan berikut: java-version Jika Java tidak dipasang, sila pasang versi Java yang sesuai mengikut keperluan anda. Muat turun Hive: Lawati tapak web rasmi ApacheHive () dan muat turun versi stabil terkini Hive. Nyahmampat pakej termampat Hive: Gunakan arahan berikut untuk menyahmampat pakej termampat Hive: tarxvfzhive-x.x.x.tar.gz Ini akan menyahmampat Hive ke direktori semasa. Konfigurasikan pembolehubah persekitaran: buka terminal,

Bagaimana untuk menyepadukan sistem pengesahan pihak ketiga dalam Laravel Bagaimana untuk menyepadukan sistem pengesahan pihak ketiga dalam Laravel Nov 03, 2023 pm 06:51 PM

Cara menyepadukan sistem pengesahan pihak berkuasa pihak ketiga dalam Laravel Pengenalan: Laravel ialah rangka kerja pembangunan PHP yang berkuasa yang menyediakan banyak fungsi dan alatan yang mudah untuk memudahkan proses pembangunan. Dalam pembangunan sebenar, kami selalunya perlu menyepadukan sistem pengesahan kebenaran pihak ketiga untuk mengurus kebenaran pengguna. Artikel ini akan memperkenalkan cara mengintegrasikan sistem pengesahan pihak ketiga dalam Laravel dan memberikan contoh kod khusus. Langkah 1: Pasang sistem pengesahan pihak ketiga Pertama, kita perlu memilih dan memasang sistem pengesahan pihak ketiga yang sesuai.

See all articles