Созданный пользователь может получить доступ ко всем базам данных в PostgreSQL без каких-либо грантов

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

Вот что я делаю на сервере Ubuntu 12.04:

  1. apt-get install postgresql
  2. sudo -u postgres createuser -DRSP mike1 (Указание пароля для нового пользователя)
  3. sudo -u postgres createdb data1
  4. psql -h localhost -U mike1 data1 (Указание пароля для пользователя mike1 для входа в систему)

Кажется, что у нового пользователя «mike1» нет проблем с подключением к базе данных «data1» и созданием таблиц и т. д. И это без выполнения какой-либо команды GRANT вообще (а владелец «data1» - «postgres», t указать владельца на шаге 3). Действительно ли это работает?

То, что я хотел бы сделать, - предоставить mike1 полный доступ к data1, а затем повторить это для большего количества пользователей и баз данных, убедившись, что пользователи имеют доступ только к одной (или, возможно, к нескольким) базам данных по моему выбору.

35 голосов | спросил mikeplate 13 Maypm12 2012, 12:58:10

3 ответа


31

На уровне SQL каждый пользователь может действительно подключиться к недавно созданной базе данных, пока не будет выдан следующий SQL-код:

REVOKE connect ON DATABASE database_name FROM PUBLIC;

После завершения каждого пользователя или роли, которые должны иметь возможность подключения, должна быть явно предоставлена ​​привилегия подключения:

GRANT connect ON DATABASE database_name TO rolename;

Изменить: В сценарии с несколькими арендаторами будет удалена больше, чем только привилегия connect. Для советов по многократной аренде и лучших практик вы можете прочитать в общедоступной wiki postgresql: общий хостинг баз данных и Управление правами в PostgreSQL .

ответил Daniel Vérité 13 Maypm12 2012, 13:44:54
19

PUBLIC имеет доступ к базе данных по умолчанию, но не может получить доступ к данным. Вы можете ОТКРЫТЬ ОБЩЕСТВЕННОСТЬ:

REVOKE CONNECT ON DATABASE your_database FROM PUBLIC;

Если вы хотите этот параметр для всех будущих баз данных, отмените CONNECT в базе данных template1 (база данных шаблонов по умолчанию для создания новой базы данных):

REVOKE CONNECT ON DATABASE template1 FROM PUBLIC;
ответил Frank Heikens 13 Maypm12 2012, 13:46:27
4

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

Вы можете найти, где хранится файл:

SHOW hba_file;

Если вы решите использовать этот механизм, есть встроенные комментарии, которых может быть достаточно, чтобы вы начали. Документы находятся здесь:

http://www.postgresql.org/документы /ток /интерактивный /авт-Pg-HBA-conf.html

ответил kgrittn 13 Maypm12 2012, 17:27:11

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132