本文介绍了PostgreSQL:权限被拒绝的关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用Postgresql和Java(NetBeans)构建项目。

I'm building a project using postgresql and 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".

当我寻找答案时,发现的全部只是授予用户权限,因此我进入pgAdmin并写了将对脏数据库的所有特权授予henrik; 。
没什么改变-这就是为什么我要发表新文章。.

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..

程序的完整错误消息输出:

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)

Java程序非常简单-看起来像这样:

The java program is really simple - it looks like this:

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...");

        }
    }
}
}


推荐答案

数据库上的特权是不够的。

您还至少需要 USAGE 特权才能使用相关模式和表的 SELECT 特权。

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.

此紧密相关答案中的更多详细信息:

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

这篇关于PostgreSQL:权限被拒绝的关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-29 15:28
查看更多