最近我启用了配置单元的哨兵策略文件。因此,当我尝试使用impala-jdbc4(版本2.5.16)在impala中执行查询时,出现以下错误:
errorMessage:AuthorizationException: User '' does not have privileges to execute 'SELECT' on: db.table
在我的代码中,我设置了数据库管理员帐户的用户和密码。所以我不明白为什么它没有读出来。
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;
}
我做错了什么?
1条答案
按热度按时间yzuktlbb1#
出现此错误的原因是,用于运行代码的用户对您在impala中使用的数据库没有权限。要启用此功能,请执行以下命令。
注意:所有这些命令都应该从impala超级用户执行
首先,你必须为你的工作创造一个角色
CREATE ROLE role_name;
接下来,您必须将该特定角色授予正在使用的用户GRANT ROLE role_name TO GROUP user_name
(我使用了functional user,您也可以命名user而不是group)最后一步是授予该特定角色对数据库的权限GRANT ALL ON database database_name TO ROLE role_name;
在此步骤之后,请尝试从您授予角色的用户运行代码。有关更多信息,请访问以下链接:https://www.cloudera.com/documentation/enterprise/5-5-x/topics/sg_hive_sql.html