【问题标题】:Why is my created postgres user being denied access to a table?为什么我创建的 postgres 用户被拒绝访问表?
【发布时间】:2013-02-16 14:56:59
【问题描述】:

我为我的 Postgres 数据库创建了一个用户,但我无法使用我设置的用户访问数据。

在 python shell 中,我运行了以下代码:

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

但这并没有帮助

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

【问题讨论】:

  • 我相信你的主机应该是一个 ip 或主机名
  • 你为openseaseme数据库设置了Postgres的用户权限吗?您必须明确授予它权限。
  • @Guy 不,我没有。我是一个 postgres 菜鸟。如果您发布有关如何执行此操作的链接,或者告诉我它在文档中的位置,我将排除该答案(如果它有效)。或者你可以是亲爱的,告诉我这个命令作为这个问题的答案。

标签: python postgresql psycopg


【解决方案1】:

试试这个, 登录 postgres

sudo -u postgres psql

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

然后

GRANT ALL ON db TO postgres;

如果一切顺利,您现在应该再次执行\l 并看到您现在享有特权。

【讨论】:

  • 感谢您的帮助。完美运行
【解决方案2】:

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

ProgrammingError: permission denied for relation author

虽然:

GRANT ALL ON db TO postgres;

可能会为某些人解决此错误,我后来发现: Permission denied for relation

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

至少,如果您遇到此错误,请阅读这篇文章和那篇文章,看看是否有任何一个可以解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    相关资源
    最近更新 更多