我有一个“生产”用户和数据库,我想在其上授予属于生产组的所有用户的权限。

不幸的是,我没有成功,保持访问被拒绝错误。

你能看看下面的示例脚本并告诉我我错过了什么(生产用户/数据库是 toto,生产组是 toto_group)吗?

一些评论:

  • 用例是:数据加载已经在生产中。开发人员(titi 等)现在只需读取数据,我们希望他们从生产数据库中读取数据,以避免复制所有内容。
  • 我最初在 Linux 上尝试过,但我在 windows 上做了测试脚本。结果相同。
  • 我正在使用 postgresql 9.5
  • 我还尝试授予对表而不是架构的访问权限。结果相同。

非常感谢。

\c postgres postgres

DROP DATABASE IF EXISTS toto;
DROP TABLESPACE IF EXISTS toto_ts;
DROP ROLE IF EXISTS toto;
DROP DATABASE IF EXISTS titi;
DROP TABLESPACE IF EXISTS titi_ts;
DROP ROLE IF EXISTS titi;
DROP ROLE IF EXISTS toto_group;

CREATE ROLE toto_group NOLOGIN;

CREATE ROLE toto WITH PASSWORD 'toto' LOGIN;
CREATE TABLESPACE toto_ts OWNER toto LOCATION 'd:/pg_ts/toto';
CREATE DATABASE toto TABLESPACE=toto_ts TEMPLATE=template0 OWNER=toto;
GRANT toto_group TO toto;

CREATE ROLE titi WITH PASSWORD 'titi' LOGIN;
CREATE TABLESPACE titi_ts OWNER titi LOCATION 'd:/pg_ts/titi';
CREATE DATABASE titi TABLESPACE=titi_ts TEMPLATE=template0 OWNER=titi;
GRANT toto_group TO titi;

COMMIT;

\c toto

DROP SCHEMA public;
CREATE SCHEMA s_test;
SET SCHEMA 's_test';
GRANT SELECT ON ALL TABLES IN SCHEMA s_test TO toto_group;
CREATE TABLE t_test (id INTEGER);

COMMIT;

\c titi

DROP SCHEMA public;
CREATE SCHEMA s_test;
SET SCHEMA 's_test';
GRANT SELECT ON ALL TABLES IN SCHEMA s_test TO toto_group;
CREATE TABLE t_test (id INTEGER);

COMMIT;
有帮助吗?

解决方案

您还应该授予对数据库和 SCHEMA 本身的访问权限:

GRANT CONNECT ON DATABASE toto TO toto_group;
GRANT USAGE ON SCHEMA s_test TO toto_group;
许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top