В Debian GNU/Linux 7.0 репозитории доступен [PostgreSQL 9.1](
http://www.postgresql.org/), который
может быть установлен с помощью менеджера управления пакетами.
Установка сервера:
sudo aptitude install postgresql
Запуск, остановка, перезапуск сервера:
sudo /etc/init.d/postgresql start|stop|restart
или
sudo service postgresql start|stop|restart
В результате установки также будет установлен консольный клиент [psql](
http://www.postgresql.org/docs/9.1/static/app-psql.html).
Управление пользователями на уровне хоста
-----------------------------------------
При установке PostgreSQL в системе и в БД создаётся
пользователь с именем `postgres` (суперпользователь). Все настройки доступа
к базе данных на уровне хоста располагаются в файле `/etc/postgresql/9.1/main/pg_hba.conf`.
Настройки для пользователя `postgres` по умолчанию имеют вид:
local all postgres peer
Это означает, что пользователь `postgres` (роль в БД) с локального хоста (на
котором установлен PostgreSQL) имеет доступ ко всем базам данных, используемый
метод аутентификации - `peer`. Суть этого метода заключается в том, что при
доступе к БД в качестве имени роли используется текущее имя пользователя
операционной системы.
Создание баз данных и пользователей
-----------------------------------
Обычно, работа с базами данных не осуществляется от имени `postgres` (из
соображений безопасности). Поэтому
создадим для наших задач на уровне БД отдельного пользователя, назовём его
`pguser` (пароль `topsecret`):
sudo su postgres -c "createuser -P -e pguser"
Введите пароль для новой роли:
Повторите его:
Должна ли новая роль иметь полномочия суперпользователя? (y - да/n - нет) n
Новая роль должна иметь право создавать базы данных? (y - да/n - нет) n
Новая роль должна иметь право создавать другие роли? (y - да/n - нет) n
CREATE ROLE pguser PASSWORD 'md53efb3c70124a58a615eb89f66d1a1497' NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT LOGIN;
Мы создали пользователя, который не обладает правами суперпользователя,
не может создавать базы данных и другие роли
(см. [документацию](
http://www.postgresql.org/docs/9.1/stat ... erole.html)).
От имени `postgres` создадим базу данных `dbvega` и сделаем пользователя `pguser`
её владельцем:
sudo su postgres -c "createdb -O pguser --encoding=UTF8 dbvega"
Доступ с локального хоста
-------------------------
Для доступа к PostgreSQL с локального хоста от имени любого пользователя, отличного
от `postgres` будем использовать парольный метод аутентификации `md5`. Для
этого в файле `pg_hba.conf` отредактируем соответствующую строку и приведём
её к виду:
local all all md5
Перезагружаем сервер:
sudo service postgresql restart
Теперь при подключении к СУБД необходимо явно указывать имя того пользователя
от которого осуществляется подключение:
psql -d dbvega -U pguser
После чего сервер будет автоматически запрашивать пароль пользователя.
Доступ с удалённых хостов
-------------------------
Для разрешения доступа к серверу с других хостов, необходимо выполнить 2
настройки:
1. В файле `/etc/postgresql/9.1/main/postgresql.conf` раскомментировать
строку `listen_addresses = 'localhost'` и заменить её на
`listen_addresses = '*'`.
2. В файл `/etc/postgresql/9.1/main/pg_hba.conf` добавить строку вида:
host all all 10.22.0.0/24 md5
После чего перезапускаем сервер:
sudo service postgresql restart
Теперь с хостов, расположенных в подсети, указанной в файле `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`.