E.47. Выпуск 10.3
Дата выпуска: 2018-03-01
В этот выпуск вошли различные исправления, внесённые после версии 10.2. За информацией о нововведениях версии 10 обратитесь к Разделу E.50.
E.47.1. Миграция на версию 10.3
Если используется версия 10.X, выгрузка/восстановление базы не требуется.
Однако если в вашей СУБД не все пользователи взаимно доверяют друг другу либо если вы поддерживаете приложение или расширение, предназначенное для использования в произвольных ситуациях, настоятельно рекомендуется прочитать об изменениях в первой записи ниже и предпринять соответствующие действия для защиты вашей инсталляции или кода.
Также изменения, описанные во втором пункте списка ниже, могут приводить к сбоям функций, используемых в индексных выражениях или материализованных представлениях, во время автоматического анализа или при восстановлении выгруженных данных. Поэтому после обновления проверьте журнал сервера на предмет подобных проблем и исправьте затронутые функции.
Также, если вы обновляете сервер с более ранней версии, чем 10.2, см. Раздел E.48.
E.47.2. Изменения
Добавление в документацию информации о настройке серверов и приложений для защиты от атак с внедрением троянского кода через путь поиска (Ной Миш)
Когда используется значение
search_path
, включающее схемы, доступные для записи злонамеренному пользователю, он может перехватывать управление над выполнением запросов и затем запускать произвольный SQL-код с правами атакуемого пользователя. Хотя есть возможность составлять запросы, защищённые от подобного перехвата, это требует кропотливой работы, и при этом очень легко что-то упустить. Поэтому мы рекомендуем использовать конфигурации, в которых пути поиска не могут включать недоверенные схемы. Соответствующая информация добавлена в Подраздел 5.8.6 (для пользователей и администраторов баз данных), Раздел 31.1 (для разработчиков приложений), Подраздел 35.15.6 (для разработчиков расширений) и CREATE FUNCTION (для разработчиков функций с характеристикойSECURITY DEFINER
). (CVE-2018-1058)Предотвращение использования небезопасных значений
search_path
в pg_dump и других клиентских программах (Ной Миш, Том Лейн)pg_dump, pg_upgrade, vacuumdb и другие приложения, предоставляемые PostgreSQL, были уязвимы для перехвата выполнения, описанного в предыдущем пункте; так как эти приложения обычно запускаются суперпользователями, они представляли собой привлекательные средства для атаки. Чтобы защитить их вне зависимости от того, защищена ли вся инсталляция в целом, они были изменены так, чтобы для них параметр
search_path
содержал толькоpg_catalog
. Теперь это так же касается и рабочих процессов автоочистки.В случаях, когда этими программами неявно вызываются определённые пользователем функции — например, это могут быть пользовательские функции в выражениях индексов — более строгое значение
search_path
может приводить к ошибкам, которые потребуется исправить так, чтобы эти функции никак не зависели от пути поиска, с которым они выполняются. Это всегда рекомендовалось делать, но сейчас это необходимо для корректного поведения. (CVE-2018-1058)Предотвращение попыток логической репликации передавать изменения в непубликуемых отношениях (Питер Эйзентраут)
Публикация всех таблиц (с пометкой
FOR ALL TABLES
) могла некорректно передавать изменения в материализованных представлениях и таблицахinformation_schema
, которые не должны попадать в поток изменений.Исправление некорректного поведения перепроверок одновременных изменений со ссылками CTE, фигурирующими во внутренних планах (Том Лейн)
Если ссылка на CTE (содержимое предложения
WITH
) использовалась в InitPlan или SubPlan, и запросу требовалось провести перепроверку из-за попытки изменения или блокировки одновременно изменяемой строки, могли быть получены неверные результаты.Устранение сбоев планировщика при перекрывающихся предложениях соединения слиянием во внешнем соединении (Том Лейн)
Эти дефекты приводили в особых случаях к ошибкам планировщика «left and right pathkeys do not match in mergejoin» (нарушено соответствие левых и правых ключей пути в соединении слиянием) или «outer pathkeys do not match mergeclauses» (внешние ключи пути не соответствуют предложениям слияния).
Исправление ошибки в pg_upgrade, когда не удавалось сохранить
relfrozenxid
для материализованных представлений (Том Лейн, Андрес Фройнд)Данное упущение могло приводить к разрушению данных в материализованных представлениях после обновления. Это могло проявляться в ошибках «could not access status of transaction» (не удалось получить состояние транзакции) или «found xmin from before relfrozenxid» (найден xmin перед relfrozenxid). Эта проблема была более вероятна в редко обновляемых материализованных представлениях или в представлениях, обновляемых только командой
REFRESH MATERIALIZED VIEW CONCURRENTLY
.Если такое разрушение имело место, его можно исправить, обновив материализованное представление (без указания
CONCURRENTLY
).Исправление некорректного вывода pg_dump для некоторых граничных значений последовательностей (Алексей Баштанов)
Исправление неправильной обработки в pg_dump объектов
STATISTICS
(Том Лейн)Схема объекта расширенной статистики неправильно помечалась в оглавлении таблицы выгружаемых данных, что могло приводить к некорректным результатам при восстановлении отдельных схем. Также некорректно восстанавливалась информация о владельце. Кроме того, логика работы изменена так, чтобы объекты статистики выгружались/восстанавливались или нет как независимые объекты, без учёта того, производится ли выгрузка/восстановление таблицы, к которой они привязаны. Исходное определение не должно распространяться на планируемое будущее расширение статистики нескольких таблиц.
Исправление некорректной обработки имён функций PL/Python в стеках ошибки
CONTEXT
(Том Лейн)Ошибка, произошедшая во вложенном вызове функции PL/Python (то есть функции, вызванной через SPI-запрос из другой функции PL/Python), могла привести к тому, что в трассировке стека вместо ожидаемого результата имя внутренней функции фигурировало дважды. Также ошибка во вложенном блоке PL/Python
DO
могла привести к обращению по нулевому указателю на некоторых платформах.Максимальное значение
log_min_duration
дляcontrib/auto_explain
доведено доINT_MAX
, что составляет около 24 суток вместо 35 минут (Том Лейн)Для разнообразных переменных GUC добавлена пометка
PGDLLIMPORT
в целях облегчения переноса модулей расширений в Windows (Метин Дослу)