Невозможно создавать таблицы в общедоступной схеме без прав суперпользователя
постгрес - суперпользователь.
Что я наделал:
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". схема владельца "postgres" "общедоступная". \dn+ показывает, что администратор имеет полный доступ к схеме, но у меня это не работает.
Вы создали БД после предоставления привилегий по схеме 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;
Это работа, но не то, что я искал)
В зависимости от того, в каком клиенте базы данных/IDE вы находитесь, вам может потребоваться создать новое соединение. Однако вы подключились к базе данных postgres
в данный момент, вы должны сделать то же самое снова и просто заменить имя базы данных в настройках подключения на mydb
. Как только вы войдете, вы можете убедиться, выпустив select current_database(), current_user;
Большое спасибо. Оно работает! postgres=# \c myDB
и myDB=# GRANT USAGE, CREATE ON SCHEMA public TO admin;
Отдельное спасибо, я два дня застрял на этом вопросе, keycloak
не смог получить доступ к public schema
.
PostgreSQL 15 also revokes the CREATE permission from all users except a database owner from the public (or default) schema