Impala JDBC 错误:用户 '' 没有执行 'SELECT' 的权限:表

Posted

技术标签:

【中文标题】Impala JDBC 错误:用户 \'\' 没有执行 \'SELECT\' 的权限:表【英文标题】:Impala JDBC Error: User '' does not have privileges to execute 'SELECT' on: tableImpala JDBC 错误:用户 '' 没有执行 'SELECT' 的权限:表 【发布时间】:2016-12-16 14:39:07 【问题描述】:

最近我为 Hive 启用了 Sentry 策略文件。因此,当我尝试使用 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】:

您收到此错误是因为您用于运行代码的用户对您在 impala 中使用的数据库没有权限。要启用此功能,请执行以下命令。

注意:所有这些命令都应该由 IMPALA 超级用户执行

首先你必须为你的工作创建一个角色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-x/topics/sg_hive_sql.html

【讨论】:

如果策略文件在 Impala 中处于活动状态,这将不起作用。我已经有一个有权执行该查询的用户 (IMPALA_USER) 和密码 (IMPALA_PASSWORD)。问题是当我写IMPALA_USER 时,错误没有显示User 'IMPALA_USER' does not have privileges,而是用户为空。就像 JDBC 不使用我设置的用户运行查询一样。 您是否尝试过在 JDBC 连接字符串中传递用户名和密码以及正确的身份验证机制,如与 JDBC 驱动程序捆绑在一起的 Cloudera Impala JDBC 驱动程序安装 PDF 文档中所述?试试这样的:jdbc:impala://impala1:21050;AuthMech=3;UID=IMPALA_USER;PWD=IMPALA_PASSWORD;UseSasl=0;UseNativeQuery=1 使用了那个连接 URL 使用了那个连接 URL,程序卡在了DriverManager.getConnection。这是驱动程序日志的最后一次跟踪,没有看到任何错误:dic 26 12:31:17.762 TRACE 1 com.cloudera.impala.hivecommon.core.HiveJDBCEnvironment.createConnection(): +++++ enter +++ ++ @JoaquínSilva 你能通过这一步吗?我被困在这里,不胜感激。谢谢!

以上是关于Impala JDBC 错误:用户 '' 没有执行 'SELECT' 的权限:表的主要内容,如果未能解决你的问题,请参考以下文章

Impala JDBC 连接:错误设置/关闭会话:打开会话错误

在没有 Impala JDBC 驱动程序的情况下从 R 连接到 Impala

jdbc连接impala

带有 Impala JDBC 驱动程序的业务对象

使用 keytab 文件连接到 Impala 的 jdbc URL

在 kerberos 授权下使用 JDBC 连接到 impala 时出错