Установка сервера баз данных
----------------------------
![][01-postgis-09]
В Ubuntu 16.04 в репозитории доступен
[PostgreSQL 9.5.11](http://www.postgresql.org/), который
может быть установлен с помощью менеджера управления пакетами.
Установка сервера:
sudo apt install postgresql
Запуск, остановка, перезапуск сервера:
sudo systemctl start|stop|restart postgresql
В результате установки также будет установлен консольный клиент
[psql](https://www.postgresql.org/docs/9.5/static/app-psql.htm).
Управление пользователями на уровне хоста
-----------------------------------------
При установке PostgreSQL в системе и в БД создаётся
пользователь с именем `postgres` (суперпользователь). Все настройки
доступа к базе данных на уровне хоста располагаются в файле
`/etc/postgresql/9.5/main/pg_hba.conf`. Настройки для пользователя
`postgres` по умолчанию имеют вид:
local all postgres peer
Это означает, что пользователь `postgres` (роль в БД) с локального хоста
(на котором установлен PostgreSQL) имеет доступ ко всем базам данных,
используемый метод аутентификации - `peer`. Суть этого метода
заключается в том, что при доступе к БД в качестве имени роли
используется текущее имя пользователя операционной системы.
Создание баз данных и пользователей
-----------------------------------
Обычно, работа с базами данных не осуществляется от имени `postgres` (из
соображений безопасности). Поэтому создадим для наших задач на уровне БД
отдельного пользователя, назовём его `pguser` (пароль `topsecret`):
sudo -u postgres createuser -P -e pguser
Мы создали пользователя, который не обладает правами суперпользователя,
не может создавать базы данных и другие роли
(см. [документацию](http://www.postgresql.org/docs/9.5/static/sql-createrole.html)).
От имени `postgres` создадим базу данных `dbvega` и сделаем пользователя
`pguser` её владельцем:
sudo -u postgres createdb -O pguser -E UTF8 dbvega
Доступ с локального хоста
-------------------------
Для доступа к PostgreSQL с локального хоста от имени любого
пользователя, отличного от `postgres` будем использовать парольный метод
аутентификации `md5`. Для этого в файле `pg_hba.conf` отредактируем
соответствующую строку и приведём её к виду:
local all all md5
Перезагружаем сервер:
sudo systemctl restart postgresql
Теперь при подключении к СУБД необходимо явно указывать имя того
пользователя от которого осуществляется подключение:
psql -d dbvega -U pguser
После чего сервер будет автоматически запрашивать пароль пользователя.
Доступ с удалённых хостов
-------------------------
Для разрешения доступа к серверу с других хостов, необходимо выполнить 2
настройки:
1. В файле `/etc/postgresql/9.5/main/postgresql.conf` раскомментировать
строку `listen_addresses = 'localhost'` и заменить её на
`listen_addresses = '*'`.
2. В файл `/etc/postgresql/9.5/main/pg_hba.conf` добавить строку вида:
host all all 10.22.0.0/24 md5
После чего перезапускаем сервер:
sudo systemctl restart postgresql
Теперь с хостов, расположенных в подсети, указанной в файле `pg_hba.conf`
(`10.22.0.0/24`) к серверу можно подключиться, используя следующую команду:
psql -h 10.22.0.9 -d dbvega -U pguser
После ввода данной команды будет запрошен пароль пользователя `pguser`.
В данном примере PostgreSQL функционирует в подсети `10.22.0.0/24` по адресу
`10.22.0.9`.
[01-postgis-09]: ../img/01-postgis-09.png