E.18. Выпуск 9.5.8
Дата выпуска: 2017-08-10
В этот выпуск вошли различные исправления, внесённые после версии 9.5.7. За информацией о нововведениях версии 9.5 обратитесь к Разделу E.26.
E.18.1. Миграция на версию 9.5.8
Если используется версия 9.5.X, выгрузка/восстановление базы не требуется.
Однако если вы используете сторонние серверы данных, на которых для проверки подлинности применяются пароли, прочитайте ниже первую запись в списке изменений.
Также, если вы обновляете сервер с более ранней версии, чем 9.5.7, см. Раздел E.19.
E.18.2. Изменения
- Дальнейшее ограничение видимости - pg_user_mappings.- umoptionsдля защиты паролей, сохранённых в свойствах сопоставлений пользователей (Ной Миш)- Исправление дефекта CVE-2017-7486 оказалось некорректным: в результате пользователь мог видеть свойства своего собственного сопоставления, даже когда он не имел права - USAGEдля соответствующего стороннего сервера. В таких свойствах мог содержаться пароль, который должен задавать владелец сервера, а не сам пользователь. Так как представление- information_schema.user_mapping_optionsне показывает свойства в таких случаях, и- pg_user_mappingsне должно. (CVE-2017-7547)- Само по себе это исправление корректирует поведение только в новых базах данных, создаваемых initdb. Если вы хотите применить это исправление к существующей базе данных, вам нужно будет проделать следующие действия: - Добавьте - allow_system_table_mods = trueв- postgresql.confи перезапустите сервер. (В версиях, поддерживающих- ALTER SYSTEM, вы можете воспользоваться этой командой для изменения конфигурации, но перезапустить сервер потребуется всё равно.)
- В каждой базе данных кластера выполните от имени суперпользователя следующие команды: - SET search_path = pg_catalog; CREATE OR REPLACE VIEW pg_user_mappings AS SELECT U.oid AS umid, S.oid AS srvid, S.srvname AS srvname, U.umuser AS umuser, CASE WHEN U.umuser = 0 THEN 'public' ELSE A.rolname END AS usename, CASE WHEN (U.umuser <> 0 AND A.rolname = current_user AND (pg_has_role(S.srvowner, 'USAGE') OR has_server_privilege(S.oid, 'USAGE'))) OR (U.umuser = 0 AND pg_has_role(S.srvowner, 'USAGE')) OR (SELECT rolsuper FROM pg_authid WHERE rolname = current_user) THEN U.umoptions ELSE NULL END AS umoptions FROM pg_user_mapping U LEFT JOIN pg_authid A ON (A.oid = U.umuser) JOIN pg_foreign_server S ON (U.umserver = S.oid);
- Не забудьте внести коррективы в базах данных - template0и- template1, в противном случае уязвимость сохранится в базах, которые будут создаваться впоследствии. Чтобы поправить- template0, вам потребуется временно разрешить подключения к ней. В PostgreSQL 9.5 и новее вы можете выполнить- ALTER DATABASE template0 WITH ALLOW_CONNECTIONS true; - , а внеся поправку в - template0, восстановить прежнее состояние командой- ALTER DATABASE template0 WITH ALLOW_CONNECTIONS false; - В более ранних версиях вместо этого используйте пару команд - UPDATE pg_database SET datallowconn = true WHERE datname = 'template0'; UPDATE pg_database SET datallowconn = false WHERE datname = 'template0'; 
- В заключение удалите параметр конфигурации - allow_system_table_modsи ещё раз перезапустите postmaster.
 
- Запрет пустых паролей для всех методов аутентификации по паролю (Хейкки Линнакангас) - Библиотека libpq игнорирует пустое указание пароля и не передаёт его на сервер. Поэтому, если пароль пользователя пустой, psql и другие клиенты на базе libpq не позволяют подключиться с таким паролем. Как следствие, администратор может решить, что установка пустого пароля равнозначна запрету входа по паролю. Однако с изменённым клиентом или клиентом не на базе libpq подключение оказывается возможным, в зависимости от настроенного метода аутентификации. В частности, самый распространённый метод, - md5, принимает пустые пароли. В результате этого изменения сервер не будет принимать пустые пароли во всех случаях. (CVE-2017-7546)
- Добавление в - lo_put()проверки права- UPDATEдля целевых больших объектов (Том Лейн, Микаэль Пакье)- Функция - lo_put(), несомненно, должна требовать наличия тех же прав, что и- lowrite(), но такая проверка отсутствовала, что позволяло пользователю менять данные в большом объекте. (CVE-2017-7548)
- Исправление в документации описания процесса обновления резервных серверов с использованием pg_upgrade (Брюс Момджян) - Ранее в документации говорилось, что нужно запустить/остановить ведущий сервер после запуска pg_upgrade, но до синхронизации резервных серверов. Однако эта последовательность небезопасна. 
- Исправление одновременной блокировки цепочки изменённых кортежей (Альваро Эррера) - Когда цепочка изменённых кортежей блокируется одновременно несколькими сеансами в неконфликтующем режиме с использованием старого снимка, и все операции завершаются успешно, существовала возможность, что некоторые из них, несмотря на это, нарушатся (и заключат, что актуальной версии кортежа нет) из-за условий гонки. В частности, вследствие этого проверка внешнего ключа могла не увидеть кортеж, который определённо существует, но изменяется параллельной операцией. 
- Устранение риска повреждения данных при замораживании кортежа, в котором XMAX равен идентификатору мультитранзакции с ровно одним ещё востребованным членом (Фёдор Сигаев) 
- Предупреждение целочисленного переполнения и краха при сортировке в памяти более чем одного миллиарда кортежей (Сергей Копосов) 
- В Windows необходимо повторять попытки создания процесса в случае ошибки при резервировании диапазона адресов разделяемой памяти в новом процессе (Том Лейн, Амит Капила) - Это должно устранить периодические сбои при запуске дочерних процессов, возможно, вызванные вмешательством антивирусных программ. 
- Устранение маловероятной возможности повреждения разделяемой хеш-таблицы предикатных блокировок в сборках для Windows (Томас Манро, Том Лейн) 
- Предотвращение вывода в журнал сообщения о штатном закрытии SSL-соединения (поведение должно быть таким же, как и при сбросе соединения) (Микаэль Пакье) 
- Запрещение передачи сеансовых билетов SSL клиентам (Том Лейн) - Это исправление устраняет сбои при переподключении клиентов с реализациями SSL, в которых эти билеты используются. 
- Исправление кода, устанавливающего tcp_keepalives_idle в Solaris (Том Лейн) 
- Исправление дефекта в сборщике статистики, приводящего к потере запросных сообщений, выдаваемых сразу после перезапуска главного процесса (Том Лейн) - Запросы статистики, выдаваемые в течение полсекунды после предыдущего отключения главного процесса, по сути терялись. 
- Размер приёмного буфера в сборщике статистики должен быть не меньше 100 Кбайт (Том Лейн) - Это снижает риск потери данных статистики на старых платформах, где размер приёмного буфера по умолчанию меньше. 
- Устранение возможности создания некорректного сегмента WAL при повышении резервного сервера сразу после того, как он обрабатывает запись - XLOG_SWITCH(Андрес Фройнд)
- Процесс walsender должен завершаться своевременно, когда клиент инициирует выключение (Том Лейн) 
- Исправление обработки сигналов SIGHUP и SIGUSR1 в процессах walsender (Петр Желинек, Андрес Фройнд) 
- Предотвращение панического состояния, которое могут вызвать процессы walsender во время контрольной точки при выключении (Андрес Фройнд, Микаэль Пакье) 
- Устранение неоправданной паузы при перезапуске процессов walreceiver, возникающей вследствие условий гонки в главном процессе (Том Лейн) 
- Устранение утечки маленьких подтранзакций, оказывающихся на диске при логическом декодировании (Андрес Фройнд) - В результате образовывались временные файлы, занимающие лишнее место на диске. 
- Оптимизация операций, необходимых для получения снимков при создании слотов логического декодирования (Андрес Фройнд, Петр Желинек) - Предыдущий алгоритм оказывался очень неэффективным на сервере со множеством открытых транзакций. 
- Устранение условий гонки, при которых создание слотов логического декодирования могло откладываться на неопределённое время (Андрес Фройнд, Петр Желинек) 
- Уменьшение издержек при обработке событий сброса системного кеша (Том Лейн) - Это особенно полезно для логического декодирования, когда сброс кеша происходит часто. 
- Исправление поведения в ситуациях, когда - INSERTили- UPDATEприсваивает более одного элемента столбцу с типом домена на базе массива (Том Лейн)
- Разрешение использования оконных функций во вложенных - SELECTв аргументах агрегатной функции (Том Лейн)
- Предупреждение конфликта имён с автоматически генерируемыми типами массивов при выполнении - ALTER ... RENAME(Вик Фиринг)- Ранее автоматически сгенерированный тип массива во избежание конфликта переименовывался при выполнении - CREATE; данное исправление распространяет это поведение и на операции переименования.
- Устранение потери указателя в - ALTER TABLEкогда для ограничения, принадлежащего таблице, добавлен комментарий (Дэвид Роули)- При повторном применении комментария к воссозданному ограничению мог произойти сбой со странным сообщением или даже с аварийным завершением. 
- Добавление для команды - ALTER USER ... SETвсех вариантов синтаксиса, что принимает- ALTER ROLE ... SET(Питер Эйзентраут)
- Обновление информации о зависимости при смене типа аргумента или возврата для функции ввода/вывода с - opaqueна целевой тип (Хейкки Линнакангас)- CREATE TYPEизменяет функции ввода/вывода, объявленные в давно устаревшем стиле, но информация о зависимости от этого типа не записывалась, в результате чего после команд- DROP TYPEмогли оставаться дефектные определения функций.
- Сокращение использования памяти при обработке командой - ANALYZEстолбцов- tsvector(Хейкки Линнакангас)
- Устранение ненужной потери точности и небрежного округления при умножении и делении значений - moneyна целые числа или числа с плавающей точкой (Том Лейн)
- Уточнение проверок пробельных символов в функциях, разбирающих идентификаторы, например - regprocedurein()(Том Лейн)- В зависимости от используемой локали эти функции могли неправильно воспринимать фрагменты многобайтных символов как пробелы. 
- Использование уместных символов - #defineиз Perl при сборке PL/Perl (Ашутош Шарма, Том Лейн)- Это предупреждает проблемы переносимости, обычно проявляющиеся в виде ошибок «проверки совместимости» в момент загрузки библиотеки при использовании последних версий Perl. 
- Обеспечение в libpq корректного сброса состояния аутентификации GSS/SASL и SSPI после неудачной попытки подключения (Микаэль Пакье) - Ранее этот сброс не выполнялся и при переходе с SSL-соединения на не SSL ошибка GSS/SASL при попытке SSL-подключения мешала затем установить обычное подключение, без SSL. С SSPI этого не происходило, но имела место утечка памяти. 
- В psql устранён сбой, возникающий, когда команда - COPY FROM STDINзавершалась вводом сигнала EOF с клавиатуры, а затем следовала ещё одна попытка выполнить- COPY FROM STDIN(Томас Манро)- Это некорректное поведение наблюдалось в системах, основанных на BSD, (включая macOS), но не в других. 
- Исправление программ pg_dump и pg_restore, чтобы команды - REFRESH MATERIALIZED VIEWвыдавались в конце (Том Лейн)- Это предотвращает ошибки при выгрузке/восстановлении данных, когда материализованное представление ссылается на таблицы, принадлежащие другому пользователю. 
- Улучшение вывода в pg_dump/pg_restore сообщений об ошибках, возникающих в zlib (Владимир Кунщиков, Альваро Эррера) 
- Исправление поведения pg_dump с ключом - --clean, чтобы событийные триггеры удалялись должным образом (Том Лейн)- Теперь также правильно назначаются владельцы событийных триггеров; ранее после запуска скрипта восстановления такие триггеры оказывались принадлежащими суперпользователю. 
- Исправление дефекта в pg_dump, когда для пустого класса операторов выдавался некорректный SQL (Даниэль Густафссон) 
- Исправление вывода pg_dump в stdout на платформе Windows (Кунтал Гхош) - Сжатые данные выгрузки в текстовом виде при выводе в stdout оказывались испорченными из-за того, что дескриптор файла не переводился в двоичный режим. 
- Исправление вывода - pg_get_ruledef()для правила- ON SELECT, связанного с представлением, в котором переименовывались столбцы (Том Лейн)- В некоторых особых случаях pg_dump использует - pg_get_ruledef()для выгрузки представлений, так что эта ошибка могла приводить к сбоям при выгрузке/загрузке.
- Исправление выгрузки внешних соединений с пустыми ограничениями, получающихся, например, в результате - NATURAL LEFT JOINбез общих столбцов (Том Лейн)
- Исправление выгрузки выражений с функциями в предложении - FROMв случаях, когда эти выражения не преобразуются в нечто, напоминающее вызов функции (Том Лейн)
- Исправление вывода pg_basebackup в stdout на платформе Windows (Харибабу Комми) - Архивируемые данные при выводе в stdout оказывались испорченными из-за того, что дескриптор файла не переводился в двоичный режим. 
- Исправление pg_rewind для корректной работы с файлами больше 2 ГБ (Кунтал Гхош, Микаэль Пакье) - Обычно такие файлы в каталогах данных PostgreSQL не образуются, но в некоторых случаях они могут появиться. 
- Исправление pg_upgrade, чтобы в конечной записи в WAL не оказалось wal_level = - minimum(Брюс Момджян)- Это могло препятствовать переподключению обновлённых резервных серверов. 
- Исправление в pg_xlogdump вычисления длины записи WAL (Андрес Фройнд) 
- В - postgres_fdwсоединения к удалённым серверам должны устанавливаться заново после команд- ALTER SERVERи- ALTER USER MAPPING(Кётаро Хоригути)- Благодаря этому изменения параметров, затрагивающие свойства соединения, вступят в силу своевременно. 
- В - postgres_fdwреализована отмена команд управления удалёнными транзакциями (Роберт Хаас, Рафия Сабих)- Это изменение позволяет быстрее прервать ожидание неотвечающего удалённого сервера в большем количестве случаев, чем раньше. 
- Увеличение - MAX_SYSCACHE_CALLBACKSдля выделения дополнительного места расширениям (Том Лейн)
- При сборке разделяемых библиотек с gcc всегда должен передаваться ключ - -fPIC, а не- -fpic(Том Лейн)- Это позволяет поддерживать библиотеки расширений большего размера на тех платформах, где эти ключи не равнозначны. 
- Экранирование фигурных скобок в наших сборочных скриптах для Microsoft MSVC во избежание предупреждений или ошибок с новыми версиями Perl (Эндрю Дунстан) 
- Для сборок MSVC реализована обработка ситуации, когда библиотека openssl находится не в подкаталоге - VC(Эндрю Дунстан)
- Для сборок MSVC добавлен нужный путь для заголовочных файлов libxml2 (Эндрю Дунстан) - Это устраняет прежнюю необходимость перемещения файлов в стандартной инсталляции libxml2 в Windows. 
- Сборки MSVC должны распознавать библиотеку Tcl с именем - tcl86.lib(Ной Миш)
- В сборках MSVC должны учитываться флаги в параметре - PROVE_FLAGS, заданном в командной строке- vcregress.pl(Эндрю Дунстан)