我有一个“生产”用户和数据库,我想授予对属于生产组的所有用户的访问权限。
不幸的是,我没有成功,保持访问被拒绝的错误。
你能看看下面的示例脚本并告诉我我错过了什么(生产用户/数据库是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
本身的访问权限: