impala jdbc错误:用户“”没有对表执行“select”的权限

6qftjkof  于 2021-06-28  发布在  Hive
关注(0)|答案(1)|浏览(955)

最近我启用了配置单元的哨兵策略文件。因此,当我尝试使用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;
}

我做错了什么?

yzuktlbb

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

相关问题