【问题标题】:PostgreSQL: permission denied for sequence posts_post_id_seqPostgreSQL:序列 posts_post_id_seq 的权限被拒绝
【发布时间】:2022-12-07 04:47:02
【问题描述】:

我是 PostgreSQL 的新手,正在 cPanel 上测试 NodeJS/React 应用程序。

我能够从 PostgresSQL 数据库读取数据,但是当我尝试向其中插入数据时,出现错误“序列 posts_post_id_seq 的权限被拒绝”。 posts是表名,post_id是PK。

在节点中,我像这样建立与数据库的连接:

postgresql://${process.env.DB_USER_PROD}:${process.env.DB_PASSWORD_PROD}@${process.env.DB_HOST_PROD}/${process.env.DB_NAME_PROD}

我检查了上面字符串中的每个值都是正确的;如上所述,我可以使用 SELECT 从 Node 获取数据。 DB_USER_PROD值为柠檬管理员在下面的 phpPgAdmin 屏幕截图中,我看到该用户拥有所有权限

用于插入的服务器代码是这样的:

app.post('/api/postsdb', async (req, res) => {
   
    const {title, content, author} = req.body
    try {
        const postQuery = 'INSERT INTO posts(title, author, content) VALUES($1, $2, $3)'
        await pool.query(postQuery, [title, author, content])
       
        return res.send({status: 'ok', msg:'alrigth'})
    } catch (error) {
       
        return  res.send({status: 'failed', msg: error.message})
    }   
})

这在本地与 Postbird 一起工作。

由于我是 PG 的新手,所以很可能我遗漏了一些东西

我只能访问 phpPgAdmin。我没有 SSH 访问权限。

我如何授予该用户不仅可以选择,还可以插入、更新和删除的权限?我必须从 phpPgAdmin 做,拜托。

谢谢

【问题讨论】:

  • 看来你在那个表上有INSERT权限,你没有的是在posts_post_id_seq上的the USAGE or UPDATE permissions序列.
  • 感谢您的意见。我该如何解决?我读了你链接的文章,但我不是很清楚。谢谢

标签: postgresql


【解决方案1】:

要授予 INSERT、UPDATE、DELETE 使用:

GRANT UPDATE, INSERT, DELETE ON posts TO username;

但看起来表格有一些按顺序提供的列。并且用户需要有权使用该序列。

GRANT USAGE, SELECT ON SEQUENCE posts_post_id_seq TO username;

另请注意,以上代码都没有架构,运行前不要忘记添加或选择。

【讨论】:

    猜你喜欢
    • 2014-04-30
    • 2023-04-09
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    相关资源
    最近更新 更多