Digital Q.DataBase предлагает шифрование на нескольких уровнях и обеспечивает гибкость при защите данных от раскрытия вследствие кражи сервера баз данных, недобросовестных действий администраторов и использования незащищенных сетей. Шифрование также может потребоваться для защиты конфиденциальных данных, таких как медицинские записи или финансовые транзакции.
Пароли пользователей базы данных хранятся в виде хешей (определяемых параметром password_encryption), поэтому администратор не может определить фактический пароль, назначенный пользователю. Если для аутентификации клиента используется шифрование SCRAM или MD5, незашифрованный пароль даже временно не появляется на сервере, так как клиент шифрует его перед отправкой по сети. Рекомендуется использовать SCRAM, так как этот протокол является интернет-стандартом и более безопасен, чем специфичный для PostgreSQL протокол аутентификации MD5.
Модуль pgcrypto позволяет хранить определенные поля в зашифрованном виде. Это целесообразно, если конфиденциальной является лишь часть данных. Клиент предоставляет ключ дешифрования, данные расшифровываются на сервере и затем передаются клиенту.
Расшифрованные данные и ключ дешифрования находятся на сервере в течение короткого периода времени, пока выполняется дешифрование и обмен данными между клиентом и сервером. Это создает кратковременную возможность перехвата данных и ключей лицом, имеющим полный доступ к серверу баз данных, например, системным администратором.
Шифрование хранилища может быть реализовано на уровне файловой системы или на уровне блоков. Варианты шифрования файловой системы в Linux включают eCryptfs и EncFS, в то время как во FreeBSD используется PEFS. К вариантам шифрования на уровне блоков или полного диска относятся dm-crypt + LUKS в Linux и модули GEOM geli и gbde во FreeBSD. Данный функционал поддерживается и во многих других операционных системах, включая Windows.
Данный механизм предотвращает чтение незашифрованных данных с дисков в случае кражи дисковых накопителей или всего компьютера. Это не обеспечивает защиту от атак при смонтированной файловой системе, так как в этом случае операционная система предоставляет данные в расшифрованном виде. Однако для монтирования файловой системы необходимо обеспечить передачу ключа шифрования в операционную систему; иногда этот ключ хранится непосредственно на хосте, выполняющем монтирование диска.
Соединения SSL шифруют все данные, передаваемые по сети: пароли, запросы и возвращаемые данные.
pg_hba.conf Файл позволяет администраторам определить, какие хосты могут использовать незашифрованные соединения (host)
а какие требуют соединений с шифрованием SSL
(hostssl). Кроме того, на стороне клиента можно настроить
подключение к серверам только через SSL.
Соединения с шифрованием GSSAPI шифруют все данные, передаваемые по сети, включая запросы и возвращаемые результаты. (При этом пароль не передаётся по сети.) pg_hba.conf Данный файл позволяет администраторам указывать, какие узлы могут использовать незашифрованные соединения (host) , а для каких требуются соединения с шифрованием GSSAPI
(hostgssenc). Кроме того, клиенты могут требовать,
чтобы подключение к серверам выполнялось только через соединения с шифрованием GSSAPI
(gssencmode=require).
Stunnel или SSH также могут применяться для шифрования передаваемых данных.
Существует возможность взаимного предоставления SSL-сертификатов клиентом и сервером. Это требует дополнительной настройки на каждой из сторон, но обеспечивает более надёжную проверку подлинности, чем обычное использование паролей. Это не позволяет другому компьютеру выдавать себя за сервер с целью перехвата пароля, отправляемого клиентом. Также это помогает предотвратить ««человек посередине» (man-in-the-middle)» атаки, при которых компьютер, находящийся между клиентом и сервером, выдаёт себя за сервер, считывает и пересылает все данные между ними.
Если системный администратор сервера не является доверенным лицом, клиенту необходимо шифровать данные; в этом случае незашифрованные данные никогда не попадают на сервер баз данных. Данные шифруются на стороне клиента перед отправкой на сервер, а результаты запросов к базе данных должны расшифровываться на стороне клиента перед использованием.