E.20. Выпуск 10.3

Дата выпуска: 2018-03-01

В этот выпуск вошли различные исправления, внесённые после версии 10.2. За информацией о нововведениях версии 10 обратитесь к Разделу E.23.

E.20.1. Миграция на версию 10.3

Если используется версия 10.X, выгрузка/восстановление базы не требуется.

Однако если в вашей СУБД не все пользователи взаимно доверяют друг другу либо если вы поддерживаете приложение или расширение, предназначенное для использования в произвольных ситуациях, настоятельно рекомендуется прочитать об изменениях в первой записи ниже и предпринять соответствующие действия для защиты вашей инсталляции или кода.

Также изменения, описанные во втором пункте списка ниже, могут приводить к сбоям функций, используемых в индексных выражениях или материализованных представлениях, во время автоматического анализа или при восстановлении выгруженных данных. Поэтому после обновления проверьте журнал сервера на предмет подобных проблем и исправьте затронутые функции.

Также, если вы обновляете сервер с более ранней версии, чем 10.2, см. Раздел E.21.

E.20.2. Изменения

  • Добавление в документацию информации о настройке серверов и приложений для защиты от атак с внедрением троянского кода через путь поиска (Ной Миш)

    Когда используется значение search_path, включающее схемы, доступные для записи злонамеренному пользователю, он может перехватывать управление над выполнением запросов и затем запускать произвольный SQL-код с правами атакуемого пользователя. Хотя есть возможность составлять запросы, защищённые от подобного перехвата, это требует кропотливой работы, и при этом очень легко что-то упустить. Поэтому мы рекомендуем использовать конфигурации, в которых пути поиска не могут включать недоверенные схемы. Соответствующая информация добавлена в Подраздел 5.8.6 (для пользователей и администраторов баз данных), Раздел 33.1 (для разработчиков приложений), Подраздел 37.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 (Метин Дослу)