Java postgresql:关系的权限被拒绝
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/22595560/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
postgresql: permission denied for relation
提问by Henry
I'm building a project using postgresql and java (NetBeans).
我正在使用 postgresql 和 java (NetBeans) 构建一个项目。
When I try to execute a simple query (select * from costumer) I get an error, telling me that "permission denied for relation costumer".
当我尝试执行一个简单的查询(从客户中选择 *)时,我收到一个错误,告诉我“关系客户的权限被拒绝”。
When I searched for an answer, all I found was about granting user privileges, so I went into pgAdmin and wrote "grant all privileges on database dirty to henrik;" . That didn't change anything - and that's why I'm making a new post..
当我搜索答案时,我发现的只是授予用户权限,所以我进入 pgAdmin 并写下“将数据库脏的所有权限授予 henrik;” . 这并没有改变任何东西——这就是为什么我要发一个新帖子..
The complete error message output of the program:
程序完整的错误信息输出:
run:
1
2
3
Mar 23, 2014 7:47:18 PM sletdendog.SletDenDog main
SEVERE: ERROR: permission denied for relation costumer
org.postgresql.util.PSQLException: ERROR: permission denied for relation costumer
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2157)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1886)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:555)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:417)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:302)
at sletdendog.SletDenDog.main(SletDenDog.java:27)
BUILD SUCCESSFUL (total time: 0 seconds)
The java program is really simple - it looks like this:
Java 程序非常简单——它看起来像这样:
package sletdendog;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class SletDenDog {
private static Connection connection = null;
private static PreparedStatement statement = null;
private static ResultSet result = null;
private static ResultSetMetaData meta = null;
public static void main(String[] args) {
try{
System.out.println("1");
connection = DriverManager.getConnection("jdbc:postgresql://localhost/dirty", "henrik", "hokus pokus");
System.out.println("2");
statement = connection.prepareStatement("select * from costumer;");
System.out.println("3");
result = statement.executeQuery();
System.out.println("4");
meta = result.getMetaData();
System.out.println("5");
for (int i = 1; i <= meta.getColumnCount(); i++) {
System.out.println(meta.getColumnName(i));
}
} catch (SQLException ex){
Logger lgr = Logger.getLogger(SletDenDog.class.getName());
lgr.log(Level.SEVERE, ex.getMessage(), ex);
} finally {
try{
if(connection != null){
connection.close();
}
if(statement != null){
statement.close();
}
if(result != null){
result.close();
}
} catch(SQLException ex){
System.out.println("Something wasn't closed...");
}
}
}
}
采纳答案by Erwin Brandstetter
Privileges on the database are not enough.
You also need at least the USAGE
privilege for relevant schema and the SELECT
privilege for the table.
对数据库的特权是不够的。
您还至少需要USAGE
相关架构的SELECT
权限和表的权限。
More details in this closely related answer:
How to grant all privileges on views to arbitrary user
这个密切相关的答案中的更多细节:
如何将视图的所有权限授予任意用户