CloudSQL Postgres запутался вокруг столовых грантов и владельцев - PullRequest
0 голосов
/ 11 октября 2019

Я использую CloudSQL Postgres 11 на GCP, и у меня есть несколько вопросов относительно разрешений и грантов. Я просто не понимаю, как быть новичком в postgres.

У меня есть пользователь, pgadmin, который является суперпользователем. С помощью этого пользователя я могу подключиться к экземпляру и создать базу данных с именем «песочница», например.

У меня есть роль приложения, которая определяется следующим образом:

CREATE ROLE app;
GRANT CONNECT ON DATABASE <database name> TO app;
GRANT USAGE, CREATE ON SCHEMA public TO app;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO app;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO app;
GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO app;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT USAGE ON SEQUENCES TO app;

Я создаюпользователь с именем app_sandbox, которому я предоставляю эту роль.

Затем пользователь приложения выполняет миграцию базы данных, используя flyway, который создает 2 таблицы. С этой стороны все в порядке.

Но с моим суперпользователем, pgadmin, я не вижу эти таблицы и не запрашиваю их, даже если этот пользователь владеет базой данных и является суперпользователем. Я испробовал все виды грантов. Такое ощущение, что я упускаю что-то важное, потому что даже если я верен в создании роли «только для чтения» с пользователем pgadmin, я не могу предоставить доступ к базовым таблицам в общедоступной схеме базы данных.

Чего мне не хватает?

1 Ответ

1 голос
/ 11 октября 2019

То, что один пользователь (= pgadmin) владеет базой данных, не означает, что пользователь также владеет таблицами, созданными в этой базе данных. И поскольку pgadmin не владеет этими таблицами, вы не можете получить к ним доступ, когда вошли в систему как pgadmin

Если пользователь приложения создал таблицы, они принадлежат этому пользователю и только app Пользователь может предоставить права на эти таблицы другим пользователям.

...