Не выдаются права в контейнере docker postgresql
Создаются юзер и таблицы, но права не выдаются. Подскажите в чем может быть проблема - уже голову сломал:
Dockerfile:
FROM postgres:12-alpine
COPY src/main/resources/init.sql /docker-entrypoint-initdb.d/
init:
CREATE DATABASE rootdb;
\c rootdb;
CREATE USER root WITH PASSWORD 'root';
GRANT ALL PRIVILEGES ON DATABASE rootdb TO root;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO root;
CREATE TABLE IF NOT EXISTS public.students (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
NAME VARCHAR(255) NOT NULL,
COURSE VARCHAR(255) NOT NULL
);
CREATE TABLE IF NOT EXISTS public.emails (
ID INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
email varchar(255) NOT NULL UNIQUE,
STUDENT_ID INT REFERENCES STUDENTS(ID)
);
При подключении root к бд и попытки сделать выборку прав:
select * from emails;
ERROR: permission denied for table emails
SQL state: 42501
Причем если запустить повторно
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO root;
То все ок.
Ответы (1 шт):
Автор решения: Roman Konoval
→ Ссылка
Сначала создавайте таблицы, а уже потом давайте права.
GRANT ALL PRIVILEGES ON ALL TABLES дает права на все существующие таблицы, а не на те, которые будут созданы в будущем.
Второй вариант это сделайть пользователя владельцем БД ALTER DATABASE rootdb OWNER TO root. В этом случае у него будет доступ ко всем объектам в БД.