Sql 授权选择根本不起作用

Sql 授权选择根本不起作用,sql,postgresql,Sql,Postgresql,我有一个需要允许SELECT访问数据库的用户。我已经按照我发现的分散在各处的所有说明进行操作,所以我什么也做不到 我尝试了以下所有链接的所有建议解决方案: …以及更多对PSQL文档、博客和用户组的引用。什么都没用 以下是我最近作为postgres用户用来授予特权的命令: postgres@dev:~$ psql psql (9.1.9) Type "help" for help. postgres=# grant usage on SCHEMA public to proton_read

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

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

…以及更多对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。我们将介绍一些简单的命令,如
SELECT
orderby
LIMIT
JOIN
。我有一个旧的转储文件,可以授予只读访问权限。我删除了数据库,并使用更新版本的数据库进行了pg_还原,现在我无法重新授予SELECT访问权限


任何帮助都将不胜感激。

在PostgreSQL中,每个连接都指向一个特定的数据库,您运行的几乎所有操作都只在该数据库中有效。(一个例外是,用户/角色本身的创建对于整个“集群”来说是全局的,即运行Postgres服务器。)

在显示的
psql
命令中,您第一次连接时未指定数据库(
psql
),该数据库将您连接到以当前系统用户命名的数据库,即
postgres
。这显示在
psql
提示符的开头:
postgres=#
#
显示您已作为超级用户连接)

因此,只有该数据库被
GRANT
语句更改

第二个示例使用正确的命令连接到特定的数据库,
psql-proton
,您可以看到提示反映了这一点:
proton=>
(由于您没有以超级用户身份连接,
替换了
#

因此,您需要做的就是以您的
postgres
用户身份运行
psql-proton
,并以超级用户身份在特定数据库上运行
GRANT
语句。您的提示将显示为
proton=#
,以显示您在正确的位置