2016-12-16 874 views
0

最近我启用了Hive的Sentry策略文件。所以,当我尝试执行使用黑斑羚,JDBC4在因帕拉查询(2.5.16版本)我得到这个错误:Impala JDBC错误:用户'没有执行'SELECT'的权限:表

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; 
} 

我做错了什么?

回答

0

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

注:所有这些命令应执行FROM THE 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

+0

如果政策文件中的黑斑羚活动时不起作用。我已经拥有一个拥有执行该查询权限的用户('IMPALA_USER')和密码('IMPALA_PASSWORD')。事情是,当我写'IMPALA_USER'错误不显示'用户'IMPALA_USER'没有特权',而是用户是空的。就像JDBC不会使用我设置的用户运行查询。 –

+0

您是否尝试过在JDBC连接字符串中传递用户名和密码以及正确的身份验证机制,如与JDBC驱动程序捆绑在一起的Cloudera Impala JDBC驱动程序安装PDF文档中所述?尝试这样:'jdbc:impala:// impala1:21050; authMech = 3; UID = IMPALA_USER; PWD = IMPALA_PASSWORD; UseSasl = 0; UseNativeQuery = 1' –

+0

使用该连接的URL –

相关问题