postgresql - 关系 <table_name> 的权限被拒绝

标签 postgresql privileges

所以我正在制作这个应用程序,我正在使用 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/

相关文章:

ruby-on-rails - 使用针对 PostgreSQL 的数组参数在 Rails 中执行原始 SQL 查询

c - setuid() 后失去能力

java - 防止 jfx packager 的辅助启动器在 Windows 中触发 UAC/提升权限

php - 检查一个数组中的任何项目是否包含在另一个数组中的任何项目中

postgresql - Postgres : Check function input array for null or empty or containing null

sql - postgreSQL中的@@Fetch_status

sql - 将用户权限限制为仅对一个特定数据库

postgresql - "root"不允许执行 PostgreSQL 服务器

ruby-on-rails - Rails 7.0 架构具有任意精度 : 6 added on my timestamps

sql - 比较两个 PostgreSQL 列,字符串由斜杠 "/"或圆括号 "( )"分隔