【发布时间】:2021-04-26 18:54:33
【问题描述】:
我继承了一个 Web 应用程序项目,而 ruby on rails 背后的所有隐含魔法有时仍然让我着迷。我创建了两个新表和关联的控制器 - invoices 和 invoice_items,它们之间有一个外键。在我的 rails 应用程序中,当它崩溃时,我会开始插入。
PG::InsufficientPrivilege: ERROR: permission denied for relation invoices
: INSERT INTO "invoices" ("created_at", "invoice_item_id", "quantity", "amount", "description",
"person_id", "effective_date", "schedule") VALUES ($1, $2, $3, $4, $5, $6, $7, $8) RETURNING "id"
app/controllers/registrations_controller.rb:22:in `confirm_bill'
我是 Rails / Postgres 的新手。我期待看到“table 发票的权限被拒绝”。在此错误上下文中,术语 relation 是否可以与术语 table 互换?如果没有,我如何授予关系权限?我提供了 invoice_item_id,因此不需要与 invoice_item 连接。以 app_student(rails 用户)身份登录时,我还可以在表格上进行手动插入。
有很多关于授予用户所有权限的帖子,但我试图遵循最小权限原则。应用程序用户只需要插入,因为另一个进程将提取发票并处理它们。据我所知,没有其他任何东西需要额外的权限。
GRANT INSERT ON TABLE public.invoices TO app_student;
为什么我的 ruby on rails 用户的这个权限不够?
【问题讨论】:
-
这看起来真的是一个 postgres 权限的东西,而不是一个 Rails 的东西(错误是正确的说关系似乎poanchen.github.io/blog/2018/03/07/…)
-
@Joel_Blum 虽然我倾向于同意你的观点,但我可以以 app_student 用户的身份手动插入。还有更多,因为涉及到 RoR。
-
你的 databases.yml 发生了什么?那里列出的用户确实是 app_student 吗?
-
@Joel_Blum 是的,当然,这是我获得手动尝试凭据的地方。
标签: ruby-on-rails sql-insert psql