gpt4 book ai didi

postgresql - 关系 的权限被拒绝

转载 作者:行者123 更新时间:2023-11-29 14:26:22 28 4
gpt4 key购买 nike

所以我正在制作这个应用程序,我正在使用 Postgres,我已经创建了一个数据库、一个用户和一个密码,并将数据库的所有权限授予我创建的用户。

问题是,当我使用 \c <database_name> 在 psql 中切换数据库时我很好,可以在上面使用查询。

但是当我运行 psql使用 postgres://user_name:password@localhost:5432/databasename在终端上尝试 select * from the <table_name>它给了我这条信息

permission denied for relation <table_name>

你能告诉我该怎么做吗,我以前遇到过这个问题,我不得不创建另一个数据库或更改用户,但我想要一个更好的解决方案。

PS:我试过用这个:

GRANT ALL PRIVILEGES ON TABLE <table_name> to <user_name>

这是我创建和访问数据库的方式:

rawan95=# create database food ;
CREATE DATABASE

rawan95=# create user meal with password '123';
CREATE ROLE

rawan95=# grant all privileges on database food to meal;
GRANT

rawan95=# \c food
You are now connected to database "food" as user "rawan95".

在那之后,我用

构建了它
food=# \i src/database/db_build.sql
BEGIN
DROP TABLE
CREATE TABLE
INSERT 0 1
COMMIT

然后我很好地从表中选择了数据,但是当我尝试使用它访问它时,出现错误:psql postgres://meal:123@localhost:5432/food

food=> select * from foods;

ERROR: permission denied for relation foods

最佳答案

创建表之前授予权限。由于当时没有 table ,所以什么都不会被授予。您创建的表不属于用户 meal 而属于用户 rawan95(\c 命令告诉您)。

另外:授予对数据库的“所有权限”,不授予任何选择权限。 As documented in the manual “所有权限”是:CREATE、CONNECT、TEMPORARY、TEMP。 CREATE 权限将允许用户 meal 在该数据库中创建表。

如果您希望所有这些表都由用户 meal 拥有,您需要在以用户 meal 身份连接后运行设置脚本> (\c 命令没有改变当前用户)

如果您确实希望 rawan95 成为表的所有者,您需要在创建所有表后授予选择权限:

grant select on all tables in schema public to meal;

或者,您可以在创建表之前更改默认权限(在运行 db_build.sql 之前),以便将来将它们应用于所有表:

alter default privileges in schema public
grant select on all tables to meal;

alter default privileges 仅对之后创建的表有效。因此,要修复您当前的设置,您需要首先授予对现有表的选择权限,然后更改将来创建的所有表的默认权限。

关于postgresql - 关系 <table_name> 的权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57452427/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com