Аутентификация и шифрование
В этой главе рассматриваются базовые принципы аутентификации и шифрования клиентских сеансов на сервере PostgreSQL В частности, описаны настройка файла pg_hba.conf для различных схем аутентификации и некоторые распространенные способы шифрования клиентских подключений.
Аутентификация клиента
Аутентификация клиентов занимает центральное место в PostgreSQL. Без нее пришлось бы либо пожертвовать возможностью удаленного подключения, либо слепо разрешать каждому, кто подключается к серверу, выборку и даже модификацию данных. PostgreSQL предоставляет в ваше распоряжение несколько механизмов аутентификации клиентов, и вы как администратор базы данных должны выбрать тот механизм, который лучше подходит для вашей системы.
В PostgreSQL 7.1.x клиентский доступ на уровне хоста задается в файле pg_hba.conf. Права и ограничения, описанные в этом файле, не следует путать с правами доступа к объектам базы данных, установленными для пользователей PostgreSQL. Файл pg_hba.conf позволяет задать тип аутентификации на уровне хоста, выполняемой перед подключением к базе данных, после которого вступают в силу права пользователей.
Примечание
Файл pg_hba.conf находится в каталоге данных PostgreSQL (например, /usr/local/pgsql/data) и создается автоматически при выполнении команды initdb в процессе установки PostgreSQL.
Аутентификация PostgreSQL на уровне хоста отличается высокой гибкостью и большим разнообразием настраиваемых параметров. Например, доступ к базе данных можно ограничить отдельными хостами или предоставить его семейству IP-адресов при помощи сетевых масок. С каждым хостом связывается специальная запись, представленная отдельной строкой в файле pg_hba.conf.
Используя хостовые записи, можно ограничить доступ пользователя одной конкретной базой данных или разрешить ему доступ ко всем базам. Более того, при поступлении запроса на подключение пользователя с заданного хоста можно потребовать, чтобы пользователь прошел аутентификацию по таблице пользователей PostgreSQL.
Проще говоря, файл pg_hba.conf определяет, кому, с какого компьютера и к каким базам данных разрешено подключение, а также каким образом должна проходить проверка для предоставления доступа.
Внимание
В механизме удаленной аутентификации пароли могут пересылаться по сети в обычном текстовом виде. Все зависит от того, организовали ли вы шифрование клиентского сеанса. Прежде чем разрешать пользователям удаленное подключение к базам данных PostgreSQL, необходимо хорошо разобраться в том, как ваше приложение взаимодействует с PostgreSQL.
Аутентификация с использованием паролей
Пароли используются для подтверждения личности пользователей PostgreSQL и предотвращения посторонних подключений. В PostgreSQL 7.1.x пароли хранятся в текстовом виде в системной таблице pg_shadow, структура которой описана в табл. 8.1. Хотя пароли хранятся в виде простого текста, просмотр содержимого таблицы pg_shadow разрешен только суперпользователям PostgreSQL.
Таблица 8.1. Структура таблицы pg_shadow.
Поле | Тип |
---|---|
usenatne | name |
usesysld | integer- |
usecreatedb | boolean |
usetrace | boolean |
usesuper | boolean |
usecatupd | boolean |
passwd | text |
val until | abstime |
Системная таблица pg_shadow доступна из любой базы данных. Из этого следует, что пользовательский доступ не ограничивается конкретной базой. Если данные некоторого пользователя присутствуют в таблице pg_shadow, то этот пользователь сможет подключиться к любой базе данных на серверном компьютере (конечно, если ему вообще разрешено подключение).