我敏感地启用了Hive的Sentry策略文件。因此
errorMessage:AuthorizationException: User '' does not have privileges to execute 'SELECT' on: db.table
在我的代码中,我设置了DB的管理员帐户的用户和密码。所以我不透露为什么它不读。
public static double getDolarFromImpala(String date) {
double dolar = 0.0;
try {
Class.forName(JDBC_DRIVER_IMPALA);
String sql = "SELECT value FROM db.table where date ='"+date+"'";
String JDBC_IMPALA_URL = "jdbc:impala://impala1:21050;auth=noSasl;UseNativeQuery=1";
Connection con = DriverManager.getConnection(JDBC_IMPALA_URL,IMPALA_USER,IMPALA_PASSWORD);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()){
dolar = rs.getDouble("value");
}
stmt.close();
con.close();
}
catch(SQLException se){
//Handle errors for JDBC
se.printStackTrace();
}
catch(Exception e){
//Handle errors for Class.forName
e.printStackTrace();
}
return dolar;
}
我做错了什么?
您会遇到此错误,因为您正在使用代码的用户对Impala中使用的数据库没有特权。要启用此功能,请按照以下命令。
注意:所有这些命令都应从Impala Super用户
执行首先,您必须为工作CREATE ROLE role_name;
创建角色接下来,您必须向使用GRANT ROLE role_name TO GROUP user_name
的用户授予该特定角色(我使用了功能用户,您也可以命名用户而不是组)最后一步是授予该特定角色GRANT ALL ON database database_name TO ROLE role_name;
此步骤之后,尝试从您授予角色的用户运行代码。
有关更多信息,请访问此链接:https://www.cloudera.com/documentation/enterprise/5-5-5-x/topics/sg_hive_sql.html