Как суперпользователь, я создал две роли в Postgres по одной и той же схеме:
read_only_with_create_view
read_write
Затем я создал двух пользователей из каждой роли:
read_only_with_create_view_user
read_write
Теперь read_write_user
не может получить доступ к любым новым представлениям, созданным read_only_with_create_view_user
, поскольку у представлений другой владелец (read_only_with_create_view_user
).
Так как же получить доступ ко всем новым представлениям read_write_user
?
Я хочу, чтобы все, что создано одним пользователем, было доступно другому пользователю.
Шаги, которые я выполнил:
CREATE ROLE read_only_role WITH
NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION VALID UNTIL 'infinity';
GRANT CONNECT ON DATABASE mydb to read_only_role;
GRANT USAGE,CREATE ON SCHEMA myschema TO read_only_role;
GRANT SELECT ON ALL TABLES IN SCHEMA myschema TO read_only_role;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA myschema TO read_only_role;
CREATE USER read_only_with_create_view_user
WITH PASSWORD '*****'
in ROLE read_only_role;
-- Now created new views using this role. That means read_only_with_create_view_user is owner of those views.
-- Creating new read-write role.
CREATE ROLE rw_role WITH
NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION VALID UNTIL 'infinity' IN ROLE read_only_role;
GRANT CONNECT ON DATABASE mydb to rw_role;
GRANT USAGE ON SCHEMA myschema TO crn_rw_role_qa;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA myschema TO rw_role;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA myschema TO rw_role;
CREATE USER read_write_user
WITH PASSWORD '*****'
in role rw_role;
После входа в систему с помощью read_write_user
, когда я пытаюсь получить доступ к новым представлениям, созданным read_only_with_create_view_user
, я получаю эту ошибку:
ERROR: permission denied for relation view_name
********** Error **********
ERROR: permission denied for relation view_name
SQL state: 42501