如何为 HiveServer2 提供简单的属性文件或数据库用户/密码身份验证?
我已经找到了有关此的演示文稿,但不是英文的:(。在Cloudera 参考手册中,他们讨论了该hive.server2.authentication
属性。它支持CUSTOM
接口的实现hive.server2.custom.authentication
。
如何实施?
如何为 HiveServer2 提供简单的属性文件或数据库用户/密码身份验证?
我已经找到了有关此的演示文稿,但不是英文的:(。在Cloudera 参考手册中,他们讨论了该hive.server2.authentication
属性。它支持CUSTOM
接口的实现hive.server2.custom.authentication
。
如何实施?
本质上,您必须提供一个可以执行身份验证的 java 应用程序。也许您正在对 mysql 或 postgres 数据库或平面文件等进行身份验证。您需要提供一个可以实现 org.apache.hive.service.auth.PasswdAuthenticationProvider 接口的 jar。
一个简单的例子:
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");
}
}
然后在 hive-site.xml 中,使用您新创建的自定义身份验证 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>