为什么我创建的Postgres用户被拒绝访问表?

2 投票
2 回答
12984 浏览
提问于 2025-04-17 17:39

我为我的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

但这并没有解决问题。

我需要让这个用户能够访问这个表,任何帮助都非常感谢。谢谢你的关注。

2 个回答

0

在我的代码中,我收到了一个错误信息:

ProgrammingError: permission denied for relation author

虽然:

GRANT ALL ON db TO postgres;

对一些人来说,这可能会解决这个错误,但我后来发现了一个问题:

权限被拒绝

我发现你可能需要给关系、序列或表命名,而不是数据库。根据上面的链接,给数据库授权可能更多是和连接的访问有关,而不是递归地去处理所有的表、关系和序列,然后给它们授权。

至少,如果你遇到这个错误,可以看看这篇文章和那篇文章,看看有没有能解决你问题的方法。

1

试试这个,

先登录到postgres数据库,

sudo -u postgres psql

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

接下来,

GRANT ALL ON db TO postgres;

如果一切顺利,你现在可以再输入 \l,看看你是否已经获得了权限。

撰写回答