2013-03-02 199 views
1

我已经为我的Postgres数据库创建了一个用户,但是我无法使用我设置的用户访问数据。为什么我创建的postgres用户被拒绝访问表?

在Python壳我已经运行下面的代码:

>>> import psycopg2 

>>> conn=psycopg2.connect(
database="db", 
user="postgres", 
host="/tmp/", 
password="opensesame" 
) 

>>> cur = conn.cursor() 

>>> state = 'Arkansas' 

>>> cur.execute("SELECT city FROM table WHERE state = %s", (state,)) 

Traceback (most recent call last): 
    File "<pyshell#8>", line 1, in <module> 
    cur.execute("SELECT city FROM table WHERE state = %s", (state,)) 
ProgrammingError: permission denied for relation table 

成为超级用户,我曾尝试:

db=# ALTER USER postgres SET TO default 

,但它并没有帮助

我需要得到此用户访问此表,任何帮助将不胜感激。感谢您的观看。

+0

我相信您的主机应该是IP或主机名 – dm03514 2013-03-02 00:15:46

+0

您是否为Openseaseme数据库设置了Postgres的用户权限?你必须明确授予它权限。 – gmaliar 2013-03-02 00:16:14

+0

@Guy不,我没有。我是postgres noob。如果你发布了关于如何做到这一点的链接,或者告诉我它在文档中的位置,我会除了答案(如果有效的话)。或者你可以成为一个亲爱的人,向我展示命令作为这个问题的答案。 – 2013-03-02 00:21:04

回答

1

试试这个, 日志向Postgres

sudo -u postgres psql

然后输入\l它会列出所有的表,你会看到你创建的数据库列表,

然后

GRANT ALL ON db TO postgres;

如果一切顺利您现在应该再次做\l,看到你现在有特权。

+0

感谢您的帮助。完美工作 – 2013-03-02 07:35:29

0

在我的代码,我收到错误消息:

ProgrammingError: permission denied for relation author 

虽然:

GRANT ALL ON db TO postgres; 

可以解决此错误一些,我后来位于: Permission denied for relation

,发现您可能想要命名关系,序列或表格而不是数据库。根据上面的链接,授予数据库权限可能与访问连接有关,而不是通过递归遍历表,关系和序列并授予所有这些权限。

至少,如果遇到此错误,请阅读本文和该文章,看看是否有人能解决问题。