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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 16:43:58  来源:igfitidea点击:

postgresql: permission denied for relation

javapostgresql

提问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 USAGEprivilege for relevant schema and the SELECTprivilege for the table.

对数据库的特权是不够的。
您还至少需要USAGE相关架构的SELECT权限和表的权限。

More details in this closely related answer:
How to grant all privileges on views to arbitrary user

这个密切相关的答案中的更多细节:
如何将视图的所有权限授予任意用户