Суперпользователь не может войти

32

Я создал суперпользовательский портал с помощью следующей команды

create role portal with superuser password 'portal'

Когда я пытался войти в postgres с пользователем портала, я получаю следующую ошибку в rails.

FATAL:  role "portal" is not permitted to log in

Я не могу следить за тем, что происходит.

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

Antony
источник
2
Потому что a roleникогда не может войти в систему. Вы должны были использовать, create userесли хотите что-то, что может войти в систему.
a_horse_with_no_name
1
@a_horse_with_no_name Чтобы быть точным, нет никакой разницы между ролью и пользователем, но есть между CREATE ROLEи CREATE USER, см. ответ Крейга.
Дезсо

Ответы:

57

Вы не указали LOGINправо:

ALTER ROLE portal WITH LOGIN;

Если вы используете CREATE USERвместо CREATE ROLEна LOGINправо предоставляется автоматически; в противном случае вы должны указать это в WITHпункте CREATEзаявления.

Суперпользователи по своей сути не имеют LOGINправа; проверка прав доступа все еще выполняется для суперпользователя на это право. Причина этого в том, что вы можете иметь роль суперпользователя, к которой вы можете SET ROLE, но не можете быть подключены как напрямую.

Крейг Рингер
источник
4
CREATE ROLE 'portal' WITH LOGIN SUPERUSER PASSWORD 'portal';
Комплект
источник
Добро пожаловать на сайт! В вашем ответе нет объяснения - если вы посмотрите вокруг, хорошие ответы всегда говорят вам не только о том, что, но и зачем делать. Учитывая это, что ваш ответ добавляет к ответу Крейга?
Дезсо