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