PostgreSQL — Ограничение доступа пользователей postgresql к определенной базе данных

#sql #postgresql

Вопрос:

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

ПРЕДОСТАВЬТЕ ВСЕ ПРАВА НА ИМЯ БАЗЫ ДАННЫХ dbname имени пользователя;

Тогда все созданные пользователи смогут подключиться ко всем существующим базам данных. После этого я попробовал с новым пользователем без предоставления каких-либо разрешений. Вместо этого я создал новую роль с правами на подключение к определенной базе данных и прикрепил эту роль к новому пользователю. Но результат был тот же, новый пользователь мог подключиться к любой базе данных. Затем я попытался отменить все привилегии с помощью команды:

ОТОЗВАТЬ ВСЕ ИМЯ БАЗЫ ДАННЫХ db ИЗ ОБЩЕДОСТУПНОЙ;

Проблема остается нерешенной.

Ответ №1:

Посмотрите на разрешения в базе данных:

 SELECT datacl FROM pg_database WHERE datname = 'dbname';  

Если это значение равно НУЛЮ, то применяются разрешения по умолчанию: владелец базы данных имеет все права и PUBLIC может CONNECT и TEMP .

В этом случае ваше REVOKE заявление username предотвратит подключение к этой базе данных, если username только вы не являетесь владельцем базы данных (или членом владельца).

Комментарии:

1. Похоже, это не решило проблему.

2. Я использовал несколько «если»в своем ответе. Я могу дать вам более прямой ответ, если вы отредактируете свой вопрос и покажете результат запроса в моем ответе.