【问题标题】:Ruby on Rails INSERT Error ***** PG::InsufficientPrivilege: ERROR: permission denied for relation invoicesRuby on Rails 插入错误 ***** PG::InsufficientPrivilege: 错误:关系发票的权限被拒绝
【发布时间】: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 是的,当然,这是我获得手动尝试凭据的地方。
  • 虽然我能理解您为什么会有这种感觉,但这绝对是数据库权限错误,与您使用 Rails 的事实无关。 pg gem 不需要 rails 即可工作(它不是依赖项)。此错误直接来自数据库(错误代码 42501),如显示 HereHere

标签: ruby-on-rails sql-insert psql


【解决方案1】:

一时兴起,我向我的 rails 应用程序用户授予了选择权限。我仍然不知道为什么,但这解决了我的问题。 rails 用户必须进行一些跟进才能看到插入成功。那是更多的轨道“魔术”吗?

GRANT SELECT, INSERT ON TABLE public.invoices TO app_student;

【讨论】:

    猜你喜欢
    • 2015-11-14
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 2016-11-11
    • 2012-11-08
    • 2022-06-13
    • 1970-01-01
    • 2022-07-07
    相关资源
    最近更新 更多