Данный урок посвящен установке и базовой настройке СУБД PostgreSQL в Linux(Ubuntu).
Установка.
Первым делом обновим информацию о пакетах в репозитории, чтобы получить последнюю версию.
1 |
sudo apt-get update |
После этого APT обновит информацию о пакетах из доступных ему репозиториев (файл /etc/apt/sources.list).
Теперь установим PostgreSQL.
1 |
sudo apt-get install postgresql |
Все. СУБД установлена и теперь мы займемся настройкой.
Настройка подключений.
Первая проблема — по умолчанию запрещено подключение по TCP/IP. Исправим это. Переходим в файл настроек /etc/postgresql/<version>/main/postgresql.conf.
В нем найдите закомментированную строку listen_addresses. Удалите комментарий и установите ее значение в localhost:
1 |
listen_addresses = 'localhost' |
Другой способ — перечислить адреса конкретных хостов, с которых разрешено подключение к вашему серверу по TCP (или 0.0.0.0 если разрешаете удаленное подключение любых хостов). Теперь давайте попробуем подключиться к нашей СУБД с использованием клиента psql. Данная утилита позволяет вам подключаться к различным базам данных, выполнять как обычные DDL, DML-запросы, так и большое количество всевозможных служебных команд.
Запустим psql, передав ей один параметр — имя пользователя(роли), под которым мы хотим приконнектиться:
1 |
sudo -u postgres psql |
На экране должно появиться примерно следующее (по умолчанию вы подключитесь к автоматически созданной БД с именем postgres):
Теперь давайте настроим пароль пользователя postgres:
1 |
ALTER USER postgres WITH ENCYPTED PASSWORD 'your_password'; |
После настройки пароля, откроем файл pg_hba.conf, чтобы для данного пользователя настроить аутентификацию с помощью MD5.
1 2 3 4 5 6 7 |
#hostssl - тип подключения к СУБД(с SSL) #all - разрешение подключаться ко всем базам данных #postgres - имя пользователя #0.0.0.0/0 - маска сети, с которой разрешено подключения #MD5 - способ шифрования пароля hostssl all postgres 0.0.0.0/0 MD5 |
Роли.
В PostgreSQL существует понятие роли, как механизма управления доступом. Роли не делятся на группы или пользователей, но могут быть вложенными друг в друга.
Для просмотра существующих ролей наберите команду \du:
Для создания новой роли существует команда CREATE ROLE. В качестве примера я создам еще одну роль.
1 |
CREATE ROLE demo; |
Снова выведу список ролей на экран:
У созданной таким образом роли не будет в системе никаких прав, отсутствует даже возможность подключения(Cannot login).
По умолчанию у вас есть возможность подключиться к системе только через суперпользователя с именем postgres. После создания других ролей, нужно наделить их определенными правами(директива GRANT). Но обо всем по порядку. Чтобы создать роль с возможностью подключения, наберите:
1 |
CREATE ROLE test_login WITH LOGIN; |
Вместо данной команды, можно было использовать команду, CREATE USER, которая наделяет новую роль правами входа по умолчанию:
1 |
CREATE USER test_login; |
Назначение привилегий.
Изменить привилегии существующей роли можно с помощью команды ALTER ROLE:
1 |
ALTER ROLE demo WITH LOGIN; |
По умолчанию все привилегии на БД или таблицу есть только у той роли, которая их создала. Чтобы передать некоторые права другой роли, используется команда GRANT.
Давайте создадим в нашей базе тестовую табличку:
1 |
CREATE TABLE test(id INTEGER PRIMARY KEY, data VARCHAR(100)); |
В общем виде команда GRANT выглядит следующим образом:
1 |
GRANT <permissions> ON <table> TO <role>; |
Теперь дадим разрешение на обновление таблицы пользователю с именем demo.
1 |
GRANT UPDATE ON test TO demo; |
На вставку данных в таблицу:
1 |
GRANT INSERT ON test TO demo; |
Выдать пользователю все права:
1 |
GRANT ALL ON test TO demo; |