Я должен что-то упустить в отношении настройки PostgreSQL. Я хотел бы создать несколько баз данных и пользователей, которые изолированы друг от друга, чтобы у определенного пользователя был доступ только к тем базам данных, которые я указал. Однако из того, что я могу определить, любой созданный пользователь имеет доступ ко всем базам данных без предоставления каких-либо конкретных грантов.
Вот что я делаю на Ubuntu Server 12.04:
- apt-get установить postgresql
- sudo -u postgres createuser -DRSP mike1 (указание пароля для нового пользователя)
- sudo -u postgres созданный data1
- psql -h localhost -U mike1 data1 (указание пароля для входа в систему пользователя mike1)
Кажется, что у нового пользователя "mike1" нет проблем с подключением к базе данных "data1", созданием таблиц и т. Д. И это вообще без какой-либо команды GRANT (а владельцем "data1" является "postgres", так как я не указал владелец на шаге 3). Это действительно, как это должно работать?
Я хотел бы предоставить mike1 полный доступ к data1, а затем повторить это для большего количества пользователей и баз данных, убедившись, что пользователи имеют доступ только к одной (или, возможно, нескольким) базам данных по моему выбору.
источник
Ответы:
На уровне SQL каждый пользователь может подключаться к вновь созданной базе данных, пока не будет выполнена следующая команда SQL:
После этого каждому пользователю или роли, которые должны иметь возможность подключаться, должна быть явно предоставлена привилегия подключения:
Изменить: В сценарии с несколькими арендаторами,
connect
будет удалено больше, чем просто привилегия. Чтобы получить советы и рекомендации по работе с несколькими арендаторами, вы можете прочитать на общедоступной вики-странице postgresql: Хостинг общих баз данных и управление правами в PostgreSQL .источник
postgres
может получить доступ ко всем базам данных.PUBLIC имеет доступ к базе данных по умолчанию, но не может получить доступ к данным. Вы можете отменить публикацию:
Если вы хотите этот параметр для всех будущих баз данных, отмените CONNECT в базе данных template1 (база данных шаблона по умолчанию для создания новой базы данных):
источник
Помимо отзыва привилегий подключения из PUBLIC по умолчанию и предоставления их по желанию, другой уровень, на котором вы можете контролировать доступ, - через файл pg_hba.conf.
Вы можете найти, где хранится файл:
Если вы решите использовать этот механизм, есть встроенные комментарии, которых может быть достаточно для начала работы. Документы здесь:
http://www.postgresql.org/docs/current/interactive/auth-pg-hba-conf.html
источник
GRANT
/REVOKE
техник обсуждается в других ответах, наверное , проще. Во-первых, для этого вам просто нужно соединение с базой данных суперпользователя, а не логин ОС, который может редактировать файл.Я наткнулся на эту тему в поисках способа запретить пользователям даже перечислять другие имена баз данных. Это
REVOKE CONNECT
не мешает этому.В соответствии с ответами на этот вопрос SO нет (рекомендуемый) способ достичь этого.
источник