gpt4 book ai didi

sql - GRANT SELECT 根本不起作用

转载 作者:行者123 更新时间:2023-11-29 11:41:42 34 4
gpt4 key购买 nike

我有一个用户需要允许 SELECT 访问数据库。我已经按照我发现的散落在 SO 各处的所有说明进行操作,但我什么也做不了。

我已经尝试了以下所有链接的所有建议解决方案:

How do you create a read-only user in PostgreSQL?

ERROR: permission denied for relation tablename on Postgres while trying a SELECT as a readonly user

Permission denied for relation

...以及对 PSQL 文档、博客和用户组的更多引用。没有任何效果。

以下是我最近使用的 postgres 用户授予权限的命令:

postgres@dev:~$ psql
psql (9.1.9)
Type "help" for help.

postgres=# grant usage on SCHEMA public to proton_read;
GRANT
postgres=# grant select on all tables in schema public to proton_read;
GRANT
postgres=# alter default privileges in schema public grant select on tables to proton_read;
ALTER DEFAULT PRIVILEGES

以下是作为只读用户使用的命令:

proton_read@dev:~$ psql proton
psql (9.1.9)
Type "help" for help.

proton=> select * from leads_lead limit 1;
ERROR: permission denied for relation leads_lead

这是关键,我有过一次这个工作。我有一个示例数据库转储,我用它来向业务同事教授基本的 SQL。我们将介绍简单的命令,例如 SELECTORDER BYLIMITJOIN。我有一个旧转储并且能够授予只读访问权限。我删除了数据库并使用更新版本的数据库执行了 pg_restore,现在我无法重新授予 SELECT 访问权限。

如有任何帮助,我们将不胜感激。

最佳答案

在 PostgreSQL 中,每个连接都指向一个特定的数据库,几乎所有你运行的东西都只在那个数据库中有效。 (一个异常(exception)是用户/角色本身的创建对于整个“集群”是全局的,即运行 Postgres 服务器。)

在您显示的 psql 命令中,您第一次连接时没有指定数据库 (psql),它将您连接到以当前系统用户命名的数据库,这是 postgres。这显示在 psql 提示符的开头:postgres=#(# 表明您已作为 super 用户连接)。

因此,您的 GRANT 语句只会更改此数据库。

您的第二个示例使用正确的命令连接到特定数据库 psql proton,您可以看到提示反射(reflect)了这一点:proton=>(带有> 替换 #,因为您没有以 super 用户身份连接)。

因此,您需要做的就是以您的 postgres 用户身份运行 psql proton,并以该特定数据库的 super 用户身份运行您的 GRANT 语句.您的提示将显示为 proton=#,表明您来对地方了。

关于sql - GRANT SELECT 根本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19817984/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com