Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Simple User/Password authentication for HiveServer2 (without Kerberos/LDAP)

Tags:

java

hadoop

hive

How to provide a simple propertyfile or database user/password authentication for HiveServer2?

I already found this presentation about this, but it's not in English :(. On the Cloudera reference manual they talk about the hive.server2.authentication property. It supports CUSTOM implementations of the interface hive.server2.custom.authentication.

How to implement that?

like image 665
d0x Avatar asked Aug 12 '13 12:08

d0x


1 Answers

In essence, you have to provide a java application that can perform your authentication. Maybe you're authing to a mysql or postgres database, or a flat file, etc. You need to provide a jar that can implement the org.apache.hive.service.auth.PasswdAuthenticationProvider interface.

A simple example:

package org.apache.hive.service.auth.PasswdAuthenticationProvider.SampleAuth;

import java.util.Hashtable;
import javax.security.sasl.AuthenticationException;
import org.apache.hive.service.auth.PasswdAuthenticationProvider;

/*
 javac -cp $HIVE_HOME/lib/hive-service-0.12.0-cdh5.0.0-beta-2.jar SampleAuthenticator.java -d .
 jar cf sampleauth.jar hive
 cp sampleauth.jar $HIVE_HOME/lib/.
*/


public class SampleAuthenticator implements PasswdAuthenticationProvider {

  Hashtable<String, String> store = null;

  public SampleAuthenticator () {
    store = new Hashtable<String, String>();
    store.put("user1", "passwd1");
    store.put("user2", "passwd2");
  }

  @Override
  public void Authenticate(String user, String  password)
      throws AuthenticationException {

    String storedPasswd = store.get(user);

    if (storedPasswd != null && storedPasswd.equals(password))
      return;

    throw new AuthenticationException("SampleAuthenticator: Error validating user");
  }

}

And then in hive-site.xml, use your newly created custom authentication jar:

<property>
  <name>hive.server2.authentication</name>
  <value>CUSTOM</value>
</property>

<property>
  <name>hive.server2.custom.authentication.class</name>
  <value>org.apache.hive.service.auth.PasswdAuthenticationProvider.SampleAuth</value>
</property>
like image 129
JamCon Avatar answered Nov 09 '22 10:11

JamCon