Postgres 15. разрешение запрещено для общедоступной схемы

Невозможно создавать таблицы в общедоступной схеме без прав суперпользователя

постгрес - суперпользователь.

Что я наделал:

ALTER SCHEMA public owner to postgres;  

CREATE USER admin WITH PASSWORD 'my-password';   

GRANT USAGE, CREATE ON SCHEMA public TO postgres;   
GRANT USAGE, CREATE ON SCHEMA public TO admin;    

CREATE DATABASE mydb;    
GRANT ALL ON DATABASE mydb TO admin;

привилегии:

postgres=# \dn+
                          List of schemas
  Name  |  Owner   |  Access privileges   |      Description       
--------+----------+----------------------+------------------------
 public | postgres | postgres=UC/postgres+| standard public schema
        |          | =UC/postgres        +| 
        |          | admin=UC/postgres    | 
(1 row)

что я получил: Postgres 15. разрешение запрещено для общедоступной схемы

Как создавать таблицы в общедоступной схеме?...

ньюфаг

postgresql.org/about/news/postgresql-15-released-2526PostgreSQL 15 also revokes the CREATE permission from all users except a database owner from the public (or default) schema
Richard Huxton 18.10.2022 14:15

База данных владельцев "postgres". схема владельца "postgres" "общедоступная". \dn+ показывает, что администратор имеет полный доступ к схеме, но у меня это не работает.

Anton login 18.10.2022 14:21
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
3
2
2 480
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы создали БД после предоставления привилегий по схеме public. Скорее всего, ваш пользователь admin использует новую БД, которая имеет только привилегии по умолчанию.

Ответ принят как подходящий

Все действия, которые вы предприняли в базе данных postgres в отношении привилегий пользователя admin в схеме public, касаются только этой схемы в базе данных postgres. Схема public в базе данных postgres не совпадает со схемой public во вновь созданной mydb.

Кроме того, это:

GRANT ALL ON DATABASE mydb TO admin;

предоставляет привилегии самой базе данных, а не вещам в базе данных. admin теперь может, например, удалить базу данных, не имея возможности создавать таблицы в схеме public. Я предполагаю, что вы хотели сделать admin также владельцем mydb, и в этом случае вам нужно добавить

ALTER DATABASE mydb OWNER TO admin;

Или вам нужно повторить свой GRANT USAGE, CREATE ON SCHEMA public TO admin; на mydb.

Спасибо! Я понимаю, что публика бывает разной. Как я могу выполнить команду: GRANT USAGE, CREATE ON SCHEMA public TO admin; Для общедоступной схемы на «mydb»? Извините, если мой вопрос глупый) ALTER DATABASE mydb OWNER TO admin; Это работа, но не то, что я искал)

Anton login 18.10.2022 15:36

В зависимости от того, в каком клиенте базы данных/IDE вы находитесь, вам может потребоваться создать новое соединение. Однако вы подключились к базе данных postgres в данный момент, вы должны сделать то же самое снова и просто заменить имя базы данных в настройках подключения на mydb. Как только вы войдете, вы можете убедиться, выпустив select current_database(), current_user;

Zegarek 18.10.2022 15:40

Большое спасибо. Оно работает! postgres=# \c myDB и myDB=# GRANT USAGE, CREATE ON SCHEMA public TO admin;

Anton login 18.10.2022 15:53

Отдельное спасибо, я два дня застрял на этом вопросе, keycloak не смог получить доступ к public schema.

Askar 26.10.2022 11:17

Другие вопросы по теме