42501:在 Postgresql 中查询时出现特权不足错误

Posted

技术标签:

【中文标题】42501:在 Postgresql 中查询时出现特权不足错误【英文标题】:42501: INSUFFICIENT PRIVILEGE ERROR while querying in Postgresql 【发布时间】:2013-08-12 17:53:56 【问题描述】:

我正在尝试在 postgresql 中查询数据库表,但每次运行以下查询时,它都会给我 INSUFFICIENT PRIVILEGE 错误。这种权限被拒绝错误的原因可能是什么。另外,我在 windows 中使用 pgadmin 工具来连接 Linux 环境中的数据库。以下是我正在运行的查询

> > SELECT appid,hash 
>       FROM app
>       WHERE appid=1;

在运行相同的查询时,我收到以下错误

ERROR:  permission denied for relation app

********** Error **********

ERROR: permission denied for relation app
SQL state: 42501

【问题讨论】:

是的,我在 Linux 上运行 【参考方案1】:

运行查询的用户将需要对该表的权限。您可以使用 GRANT 语句将它们授予该用户。以下是授予 PUBLIC 的示例

GRANT SELECT ON tablename TO PUBLIC;

我还看到 SELinux 引起问题,并且在 here 等地方提到过它。我不太确定关闭 SELinux 的命令,但您可以通过使用查看它是否正在运行

selinuxenabled && echo enabled || echo disabled

【讨论】:

感谢 harper89,我已经尝试了 GRANT 语句,它仍然没有给我特权,而是向我显示与以前相同的错误(42501),并且我已经运行了你上面提到的命令,它说“启用”可能是什么原因,是管理员还是“root”必须运行的东西? @akiiddweeber NP。您可以在以管理员身份在数据库上运行时尝试 GRANT。以无法访问该表的同一用户身份运行将不允许 GRANT 通过。在调查 SELinux 问题之前,我会先与具有管理员权限的人一起解决 GRANT 问题。 感谢 harper89 的评论,我正在努力解决。【参考方案2】:

这只是意味着您没有访问应用表的权限。请求您的根管理员或数据库管理员授予您访问应用表的权限。如果您是 root 或具有授予权限,您可以使用 grant 命令授予您自己使用表或数据库上的所有 sql 语句的权限 例如:

               grant all privileges on database money to cashier;

在此之前,您必须以 root 或具有授予权限的用户身份登录 有关此命令的更多详细信息,请参阅 http://www.postgresql.org/docs/8.1/static/sql-grant.html

【讨论】:

【参考方案3】:

如果是 DB2,则转到 DB2 的命令控制台,选择相应的数据库并通过右键单击数据库选择权限选项,然后添加相应的 DB2 用户并授予所需的访问权限。

【讨论】:

【参考方案4】:

您需要确保与您连接的用户对您尝试与该用户访问的架构也具有“USAGE”访问权限。我最近遇到了一个错误,我将转储恢复到数据库中,然后有一些我应该只提供只读访问权限的用户。我已按照以下步骤操作 -

CREATE ROLE myapp_readonly;
GRANT CONNECT ON DATABASE database TO myapp_readonly;
GRANT USAGE ON SCHEMA schema TO myapp_readonly;
GRANT SELECT ON TABLE schema.table_name TO myapp_readonly;
GRANT myapp_readonly TO usre;

当我尝试访问表时执行这些步骤后,收到以下错误 -

SQL Error [42501]: ERROR: permission denied for schema schema

就我而言,我的用户已经可用,并且架构和数据库最近已恢复。在我向用户提供架构的“USAGE”访问权限后,错误就解决了。

【讨论】:

以上是关于42501:在 Postgresql 中查询时出现特权不足错误的主要内容,如果未能解决你的问题,请参考以下文章

Postgresql:更改所有者对象时出现错误“必须是关系的所有者”

使用 psycopg2 在 python 中执行查询时出现“ProgrammingError:在或附近出现语法错误”

为啥在 PostgreSQL 中创建生成的列时出现错误?

加载 back.json 文件 PostgreSQL 时出现重复键问题

在 Spring Boot 中使用 PostgreSQL 驱动程序创建数据源时出现异常

将 oracle 转换为 PostgreSQL 时出现数字溢出