Мне нужно создать одну базу данных [myDB] и одну пользовательскую схему [mySchema], а не общедоступную c одну.
Где я go ошибся:
Я создал 3 users: user_admin, user_rw, user_ro, которому будет предоставлен доступ с изменением.
Теперь я авторизируюсь с моим суперпользователем: postgres [Я использую postgres 11 на GCP] через облачную оболочку.
Создал мою базу данных: myDB, я вошел в myDB. И я запустил следующие команды для доступа всех 3 пользователей.
# for admin user
GRANT CONNECT ON DATABASE myDB TO user-admin;
GRANT USAGE ON SCHEMA mySchema TO user-admin ;
GRANT ALL PRIVILEGES ON SCHEMA mySchema TO user-admin ;
GRANT ALL ON ALL TABLES IN SCHEMA mySchema TO user-admin ;
GRANT ALL ON ALL SEQUENCES IN SCHEMA mySchema TO user-admin ;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA mySchema TO user-admin ;
ALTER DEFAULT PRIVILEGES IN SCHEMA mySchema GRANT ALL PRIVILEGES ON TABLES TO user-admin;
# for read write user
GRANT CONNECT ON DATABASE myDB TO user-rw;
GRANT USAGE ON SCHEMA mySchema TO user-rw ;
GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA mySchema TO user-rw ;
GRANT SELECT,UPDATE ON ALL SEQUENCES IN SCHEMA mySchema TO user-rw ;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA mySchema TO user-rw ;
ALTER DEFAULT PRIVILEGES IN SCHEMA mySchema GRANT SELECT,INSERT,UPDATE ON TABLES TO user-rw;
# for read only user
GRANT CONNECT ON DATABASE myDB TO user-ro;
GRANT USAGE ON SCHEMA mySchema TO user-ro ;
GRANT SELECT ON ALL TABLES IN SCHEMA mySchema TO user-ro ;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA mySchema TO user-ro ;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA mySchema TO user-ro ;
ALTER DEFAULT PRIVILEGES IN SCHEMA mySchema GRANT SELECT ON TABLES TO user-ro;
До этого момента у меня не было никаких проблем.
Я создал таблицу в mySchema с помощью user-admin, это будет работать так же и в будущем.
И остальные два пользователя будут использовать только для чтения, а другой для чтения-записи. .
Проблема в том, что я не могу увидеть созданную таблицу от других пользователей, включая postgres, user-rw, user-ro, но только владелец, который был user-admin, имеет доступ для выполнения всех операций. например create and drop.
Кроме того, после создания таблицы от пользователя admin, когда я повторно запускаю команду, указанную ниже, это дает мне разрешение на отказ.
GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA mySchema TO user-rw ;
Пожалуйста, дайте мне знать, что я делаю неправильно.