#sql #postgresql
Вопрос:
У меня есть несколько баз данных в PostgreSQL. Я создал уникальных пользователей с намерением предоставить им доступ к уникальной базе данных. После создания пользователей первое, что я сделал, это использовал следующую команду:
ПРЕДОСТАВЬТЕ ВСЕ ПРАВА НА ИМЯ БАЗЫ ДАННЫХ dbname имени пользователя;
Тогда все созданные пользователи смогут подключиться ко всем существующим базам данных. После этого я попробовал с новым пользователем без предоставления каких-либо разрешений. Вместо этого я создал новую роль с правами на подключение к определенной базе данных и прикрепил эту роль к новому пользователю. Но результат был тот же, новый пользователь мог подключиться к любой базе данных. Затем я попытался отменить все привилегии с помощью команды:
ОТОЗВАТЬ ВСЕ ИМЯ БАЗЫ ДАННЫХ db ИЗ ОБЩЕДОСТУПНОЙ;
Проблема остается нерешенной.
Ответ №1:
Посмотрите на разрешения в базе данных:
SELECT datacl FROM pg_database WHERE datname = 'dbname';
Если это значение равно НУЛЮ, то применяются разрешения по умолчанию: владелец базы данных имеет все права и PUBLIC
может CONNECT
и TEMP
.
В этом случае ваше REVOKE
заявление username
предотвратит подключение к этой базе данных, если username
только вы не являетесь владельцем базы данных (или членом владельца).
Комментарии:
1. Похоже, это не решило проблему.
2. Я использовал несколько «если»в своем ответе. Я могу дать вам более прямой ответ, если вы отредактируете свой вопрос и покажете результат запроса в моем ответе.