Impala JDBC 错误:用户没有权限在: 表上执行"选择"



我敏感地启用了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

最新更新