Почему новый пользователь в PostgreSQL может подключаться ко всем базам данных? - PullRequest
7 голосов
/ 30 июля 2011

Я установил базу данных PostgreSQL 9 (миграция из Oracle10g), и меня очень смущает управление пользователями / ролями. Когда я создаю нового пользователя с помощью команды SQL, например CREATE USER или CREATE ROLE, или с помощью инструмента Navicat, созданный пользователь может видеть все базы данных! Он действительно может соединить их! Хотя он не может выбрать какие-либо данные из таблицы, он может видеть объекты и последовательности таблиц и так далее. Я пытался отменить подключение привилегий, но безрезультатно. Я ожидал, что новый пользователь не имеет никаких привилегий и ничего не видит. Я действительно не знаю, почему он может.

Ответы [ 3 ]

13 голосов
/ 25 декабря 2012

С http://www.postgresql.org/docs/9.2/static/sql-grant.html#SQL-GRANT-DESCRIPTION-OBJECTS (выделено мое):

PostgreSQL предоставляет права по умолчанию для некоторых типов объектов PUBLIC.По умолчанию PUBLIC не предоставляется никаких привилегий для таблиц, столбцов, схем или табличных пространств.Для других типов привилегиями по умолчанию, предоставленными PUBLIC, являются следующие: CONNECT и CREATE TEMP TABLE для баз данных ;EXECUTE привилегия для функций;и USAGE привилегия для языков.Владелец объекта может, конечно, REVOKE как по умолчанию, так и прямо предоставленные привилегии.(Для максимальной безопасности введите REVOKE в той же транзакции, в которой создается объект; тогда нет окна, в котором другой пользователь может использовать объект.) Кроме того, эти начальные настройки привилегий по умолчанию можно изменить с помощью ALTERКоманда DEFAULT PRIVILEGES .

Чтобы удалить все привилегии (включая CONNECT) для всех неуказанных пользователей в базе данных, используйте:

REVOKE ALL PRIVILEGES ON DATABASE <database> FROM public;

См. Также:

1 голос
/ 02 августа 2011

Возможно, вам также нужно изменить файл pg_hba.conf.По умолчанию локальная установка не выполняет проверки авторизации.

0 голосов
/ 31 июля 2011

Вы должны использовать GRANT и / или REVOKE , чтобы определить привилегии для пользователя или роли.Вы также можете использовать следующие функции link , чтобы узнать, есть ли у пользователя определенные привилегии для таблицы, базы данных и т. Д. *

...