LOXODATA

PostgreSQL 15.4, 14.9, 13.12, 12.16, 11.21 et 16 bêta 3

2023-08-17   1542 mots, 8 minutes de lecture

Publication des mises à jour de PostgreSQL 15.4, 14.9, 13.12, 12.16, 11.21 et de PostgreSQL 16 bêta 3

Le PostgreSQL Global Development Group a annoncé la publication d’une mise à jour pour toutes les versions supportées de PostgreSQL, incluant les versions 15.4, 14.9, 13.12, 12.16 et 11.21 ainsi que la bêta 3 de PostgreSQL 16. Cette publication inclut le correctif de deux failles de sécurité et de plus de 40 bugs reportés ces derniers mois.

Si vous utilisez des index BRIN pour vérifier les valeurs NULL, vous aurez besoin de réindexer ces derniers après la mise à jour. Sur PostgreSQL 12 et supérieur, vous pouvez utiliser REINDEX CONCURRENTLY pour ne pas bloquer les écritures sur les index concernés et leur table, par exemple :

REINDEX INDEX CONCURRENTLY your_index_name;

Pour plus de détails, se référer à la note de version.

Notice de dépréciation de PostgreSQL 11

PostgreSQL 11 ne recevra plus de correctifs à partir du 9 novembre 2023. Si vous utilisez cette version sur un environnement de production, nous vous recommandons de mettre à jour vers une version plus récente et supportée de PostgreSQL. Merci de consulter notre politique de gestion de version pour plus de détails.

Failles de sécurité

CVE-2023-39417: Les @substitutions@ entre guillements dans les scripts d’extension permettent l’injection SQL.

Versions supportées vulnérables : 11 - 15. L’équipe de sécurité ne teste pas les versions non supportées, mais ce problème est assez ancien.

Un script d’extension est vulnérable s’il utilise @extowner@, @extschema@ ou @extschema:…@ à l’intérieur d’une construction de guillemets (guillemets dollars, '', ou ""). Aucune extension incluse n’est vulnérable. Les utilisations vulnérables apparaissent dans un exemple de documentation et dans des extensions non incluses. Par conséquent, la condition préalable à l’attaque est qu’un administrateur ait installé des fichiers d’une extension vulnérable, fiable et non incluse. Sous réserve de cette condition préalable, cela permet à un attaquant ayant les privilèges CREATE au niveau de la base de données d’exécuter du code arbitraire en tant que super-utilisateur de démarrage. PostgreSQL bloquera cette attaque dans le serveur principal, il n’est donc pas nécessaire de modifier les extensions individuelles.

Le projet PostgreSQL remercie Micah Gate, Valerie Woolard, Tim Carey-Smith, et Christoph Berg pour avoir rapporté ce problème.

CVE-2023-39418: MERGE ne vérifie pas les règles de sécurité de lignes sur UPDATE ou SELECT.

Versions supportées vulnérables : 15.

PostgreSQL 15 a introduit la commande MERGE qui échoue à la vérification des règles de sécurité sur de nouvelles lignes pour un UPDATE ou SELECT. Si des règles sur UPDATE ou SELECT interdisent des lignes que des règles sur INSERT autorisent, alors un utilisateur peut stocker ces lignes. Les autres conséquences dépendent de l’application. Ceci n’affecte que les bases de données pour lesquelles une règle de sécurité de niveau ligne a été créée avec l’instruction CREATE POLICY.

Le projet PostgreSQL remercie Dean Rasheed pour avoir rapporté ce problème.

Note sur la bêta 3 de PostgreSQL 16

Cette publication marque la disponibilité de la bêta 3 de PostgreSQL 16 et rapproche la communauté d’une possible mise à disposition globale vers la fin du troisième trimestre.

Dans l’esprit de la communauté open source PostgreSQL, nous vous encourageons fortement à tester les nouvelles fonctionnalités de PostgreSQL dans vos systèmes de bases de données. Ceci afin de nous aider à éliminer les bogues et autres problèmes qui pourraient encore exister. Bien que nous ne vous conseillions pas de faire fonctionner PostgreSQL 16 bêta 3 dans vos environnements de production, nous vous encourageons à trouver des moyens de faire fonctionner votre charge applicative typique avec cette publication bêta.

Vos tests et vos commentaires aideront la communauté à s’assurer que PostgreSQL 16 respecte nos standards de stabilité et de fiabilité, pour continuer à proposer la base de données open source la plus avancée au monde. Regardez plus en détails le processus de bêta test pour savoir comment vous pouvez y contribuer :

https://www.postgresql.org/developer/beta/

Vous trouverez plus d’informations sur toutes les fonctionnalités de PostgreSQL 16 et les changements dans la note de version :

https://www.postgresql.org/docs/16/release-16.html

Correction de bogues et améliorations

Cette mise à jour corrige plus de 40 bogues reportés ces derniers mois. Les problèmes listés ci-dessous affecte PostgreSQL 15. Certains de ces problèmes peuvent aussi affecter d’autres versions de PostgreSQL.

  • Correction de la gestion des valeurs NULL dans les index BRIN. Ce correctif ne s’applique pas sur des index BRIN déjà existant – vous devrez procéder à un REINDEX pour corriger tous les index utilisés pour rechercher valeurs NULL ;
  • Ne pas laisser une base de données corrompue lorsqu’un DROP DATABASE est interrompu ;
  • Plusieurs corrections d’index partitionnés ;
  • Correction de ALTER EXTENSION ... SET SCHEMA pour déclencher une erreur si l’extension contient des objets en dehors du schéma de cette dernière ;
  • Correction de la gestion de dépendance des méthodes d’accès des tables ;
  • Ne pas utiliser d’index uniques partiels pour la vérification d’unicité dans le planificateur ;
  • Gestion correcte des sous-requêtes dans les expressions de règles RLS et vues de sécurité à l’instanciation des actions de règles ;
  • Correction des conditions de concurrence dans la détection de conflit pour le mode d’isolation de transaction SERIALIZABLE ;
  • Correction d’erreurs intermittentes lors de la mise à jour d’un champ d’une colonne composite qui nécessite un TOASTing hors ligne ;
  • Correction de plusieurs fuites mémoire survenues pendant la durée de vie d’une requête ;
  • Autoriser les fractions de secondes en paramètre de la méthode jsonpath datetime() ;
  • Augmentation de la limite des tokens dans pg_hba.conf et pg_ident.conf à 10240 octets ;
  • Une erreur de mémoire insuffisante provenant du compilateur JIT provoquera désormais une erreur FATAL PostgreSQL au lieu d’une exception C++ ;
  • Autoriser VACUUM à continuer après avoir détecté certains types de corruption d’index B-tree. Bien que cette correction permette à VACUUM de continuer, il reste nécessaire de corriger l’index corrompu avec REINDEX ;
  • Éviter le double rejeu des transactions préparées lors de la récupération après un crash ;
  • S’assurer qu’un checkpoint appelle fsync sur une table nouvellement créée mais vide ;
  • Rendre silencieux les erreurs “missing contrecord” pour éviter de journaliser des messages inexacts de pg_waldump et walsender ;
  • Correction de la fonction fuzzystrmatch Soundex difference() pour gérer correctement les entrées vides ;
  • Plusieurs corrections pour intarray, y compris l’interdiction des paramètres d’entrée de type tableaux de dépasser la limite de type dans un index GiST ;
  • Correction de pg_dump pour gérer correctement les corps de fonctions en SQL standard (BEGIN ATOMIC) qui requièrent des dépendances au moment du parsing sur des index uniques.

Pour la liste complète de changements disponibles, se référer à la note de version/

Correctifs sur la bêta 3 de PostgreSQL 16

  • Ajout de la commande \drg à psql pour afficher des informations sur les permissions de rôles ;
  • Ajout de l’identifiant de timeline aux noms de fichiers générés avec pg_waldump --save-fullpage ;
  • Correction d’un crash après la survenue d’un deadlock dans un worker parallèle de VACUUM.

Consulter la note de version pour une liste complète de nouvelles fonctionnalités ou changements :

https://www.postgresql.org/docs/16/release-16.html

Mise à jour

Toutes les mises à jour PostgreSQL sont cumulatives. Comme toutes les publications de versions mineures, les utilisateurs ne sont pas obligés de sauvegarder et restaurer leur bases de données ou d’utiliser pg_upgrade pour appliquer cette mise à jour ; il vous suffit de stopper PostgreSQL et mettre à jour les binaires.

Si vous utilisez des index BRIN pour vérifier les valeurs NULL, vous aurez besoin de réindexer ces derniers après la mise à jour. Sur PostgreSQL 12 et supérieur, vous pouvez utiliser REINDEX CONCURRENTLY pour ne pas bloquer les écritures sur les index concernés et leur tables, par exemple :

REINDEX INDEX CONCURRENTLY your_index_name;

Les utilisateurs qui ont omis une ou plusieurs mises à jour mineures devront effectuer des étapes supplémentaires ; se référer aux notes de versions précédentes pour plus de détails.

Pour plus de détails, se référer à la note de version.

Mise à jour vers la bêta 3 de PostgreSQL 16

Pour mettre à jour votre version de PostgreSQL depuis une précédente version de PostgreSQL (bêta ou non) vers la version bêta 3 de PostgreSQL 16, vous pouvez utiliser la même stratégie que pour mettre à jour vers toute version majeure de PostgreSQL (par exemple avec la commande pg_upgrade ou pg_dump/pg_restore). Pour plus d’information, consultez la section mise à jour de la documentation officielle.

Tests pour le débogage et la compatibilité

La stabilité de chaque publication de PostgreSQL dépend de vous, la communauté. En testant la version à venir avec votre charge et vos outils de tests, vous pourrez nous aider à trouver les bogues et régressions avant la publication de PostgreSQL 16.

Étant donné qu’il s’agit d’une version bêta, des changements mineurs dans le comportement de la base de données, des détails et des APIs sont toujours possibles. Vos retours et tests aideront à déterminer les ajustements finaux des nouvelles fonctionnalités.

La qualité des tests aide à déterminer le moment de la publication finale.

Une liste des problèmes ouverts est publiquement disponible dans le wiki de PostgreSQL. Vous pouvez rapporter des bogues en utilisant le formulaire présent sur le site web de PostgreSQL : https://www.postgresql.org/account/submitbug/.

Liens