À propos des utilisateurs et des rôles PostgreSQL

Cette page décrit le fonctionnement de Cloud SQL avec les utilisateurs et les rôles PostgreSQL. Les rôles PostgreSQL vous permettent de contrôler le type d'accès et les capacités dont dispose un utilisateur qui accède à votre instance PostgreSQL.

Pour obtenir la documentation complète sur les rôles PostgreSQL, consultez la section consacrée aux rôles de base de données dans la documentation PostgreSQL. Pour en savoir plus sur la création et la gestion des utilisateurs Cloud SQL, consultez la section Créer et gérer des utilisateurs.

Différence entre utilisateurs et rôles

Les rôles PostgreSQL peuvent fonctionner comme un rôle unique ou un groupe de rôles. Un utilisateur correspond à un rôle doté d'une autorisation de connexion (le rôle possède l'attribut LOGIN). Comme tous les rôles créés par Cloud SQL possèdent l'attribut LOGIN, Cloud SQL utilise les termes rôle et utilisateur de manière interchangeable. Toutefois, si vous créez un rôle à l'aide du client psql, ce rôle n'est pas nécessairement doté de l'attribut LOGIN.

Tous les utilisateurs PostgreSQL doivent disposer d'un mot de passe. Vous ne pouvez pas vous connecter avec un utilisateur sans mot de passe.

Restrictions liées au super-utilisateur

Cloud SQL pour PostgreSQL est un service géré et il restreint l'accès à certaines tables et procédures système qui requièrent des privilèges avancés. Dans Cloud SQL, les clients ne peuvent pas créer d'utilisateurs disposant d'attributs de super-utilisateur ni accéder à ceux-ci.

Vous ne pouvez pas créer d'utilisateurs de base de données disposant de droits de super-utilisateur. Toutefois, vous pouvez créer des utilisateurs de base de données dotés du rôle cloudsqlsuperuser, qui dispose de certains de ces droits, y compris :

  • Créer des extensions nécessitant des droits de super-utilisateur
  • Créer des déclencheurs d'événements
  • Créer des utilisateurs de réplication
  • Créer des publications et des abonnements de réplication
  • Accès complet à la table du catalogue pg_largeobject

Utilisateurs PostgreSQL par défaut

Lorsque vous créez une instance Cloud SQL pour PostgreSQL, l'administrateur par défaut postgres est créé, mais pas le mot de passe. Vous devez définir un mot de passe pour cet utilisateur avant de pouvoir vous connecter. Vous pouvez le faire dans Google Cloud Console ou à l'aide de la commande gcloud suivante :

gcloud sql users set-password postgres \
--instance=INSTANCE_NAME \
--password=PASSWORD

L'utilisateur postgres fait partie du rôle cloudsqlsuperuser et possède les attributs (privilèges) suivants : CREATEROLE, CREATEDB et LOGIN. Il n'est pas doté des attributs SUPERUSER ou REPLICATION.

Un utilisateur par défaut cloudsqlimportexport est créé et doté de l'ensemble minimal de droits requis pour les opérations d'importation et d'exportation au format CSV. Vous pouvez créer vos propres utilisateurs pour effectuer ces opérations mais, en l'absence de compte créé par vos soins, l'utilisateur par défaut cloudsqlimportexport est employé. L'utilisateur cloudsqlimportexport est un utilisateur système, que les clients ne peuvent donc pas utiliser directement.

Utilisateurs IAM Cloud SQL pour l'authentification IAM pour les bases de données

IAM est intégré à Cloud SQL via une fonctionnalité appelée authentification IAM pour les bases de données. Lorsque vous créez des instances à l'aide de cette fonctionnalité, les utilisateurs IAM peuvent se connecter à l'instance à l'aide de leur nom d'utilisateur et de leur mot de passe IAM. L'authentification IAM pour les bases de données présente l'avantage de pouvoir utiliser les identifiants IAM existants d'un utilisateur lorsque vous lui accordez l'accès à une base de données. Lorsque l'utilisateur quitte l'organisation, son compte IAM est suspendu, et son accès est automatiquement supprimé. Pour en savoir plus sur l'authentification IAM pour les bases de données, consultez la page Authentification IAM pour les bases de données dans Cloud SQL.

Autres utilisateurs PostgreSQL

Vous pouvez créer d'autres utilisateurs ou rôles PostgreSQL. Tous les utilisateurs créés à l'aide de Cloud SQL bénéficient du rôle cloudsqlsuperuser et disposent des mêmes attributs que l'utilisateur postgres : CREATEROLE, CREATEDB et LOGIN. Vous pouvez modifier les attributs de n'importe quel utilisateur à l'aide de la commande ALTER ROLE.

Si vous créez un utilisateur à l'aide du client psql, vous pouvez l'associer à un rôle différent ou lui accorder des attributs différents.

Accéder à la vue pg_shadow et à la table pg_authid

Vous pouvez utiliser la vue pg_shadow pour utiliser les propriétés des rôles marqués comme rolcanlogin dans la table du catalogue pg_authid.

La vue pg_shadow contient les mots de passe hachés et d'autres propriétés des rôles (utilisateurs) autorisés à se connecter à un cluster. La table du catalogue pg_authid contient les mots de passe hachés et d'autres propriétés pour tous les rôles de base de données.

Dans Cloud SQL, les clients ne peuvent pas accéder à la vue pg_shadow ni à la table pg_authid en utilisant les droits par défaut. Toutefois, l'accès aux noms de rôle et aux mots de passe hachés est utile dans certaines situations, par exemple :

  • Pour configurer des proxys ou l'équilibrage de charge avec des utilisateurs et des mots de passe existants
  • Pour migrer des comptes utilisateur sans modifier les mots de passe
  • Pour mettre en œuvre des solutions personnalisées pour la gestion des règles relatives aux mots de passe

Définir les options de la vue pg_shadow et de la table pg_authid

Pour accéder à la vue pg_shadow, définissez l'option cloudsql.pg_shadow_select_role sur un nom de rôle PostgreSQL. Pour accéder à la table pg_authid, définissez l'option cloudsql.pg_authid_select_role sur un nom de rôle PostgreSQL.

Si cloudsql.pg_shadow_select_role existe, il possède un accès en lecture seule (SELECT) à la vue pg_shadow. Si cloudsql.pg_authid_select_role existe, il dispose d'un accès SELECT à la table pg_authid.

Si l'un des rôles n'existe pas, les paramètres n'ont aucun effet, mais aucune erreur ne se produit. Cependant, une erreur est consignée lorsqu'un utilisateur tente d'accéder à la vue ou à la table. L'erreur est consignée dans le journal de la base de données PostgreSQL, cloudsql.googleapis.com/postgres.log. Pour en savoir plus sur l'affichage de ce journal, consultez la section Afficher les journaux d'instance.

Assurez-vous que les rôles configurés existent et que la valeur de l'option cloudsql.pg_shadow_select_role ou de l'option cloudsql.pg_authid_select_role ne contient pas faute de frappe. Vous pouvez également utiliser la fonction pg_has_role pour vérifier qu'un utilisateur est membre de ces rôles. Des informations sur cette fonction sont disponibles sur la page Fonctions et opérateurs d'informations système.

Vous pouvez utiliser l'option cloudsql.pg_shadow_select_role ou l'option cloudsql.pg_authid_select_role avec l'appartenance de rôle PostgreSQL pour gérer l'accès pg_shadow ou pg_authid pour plusieurs. utilisateurs.

Les modifications apportées à l'une ou l'autre des options ne nécessitent pas de redémarrer de base de données.

Pour en savoir plus sur les options compatibles, consultez la section Configurer des options de base de données.

Choisir un format de stockage des mots de passe

Cloud SQL pour PostgreSQL stocke les mots de passe utilisateur sous forme hachée. Vous pouvez utiliser l'option password_encryption pour définir l'algorithme de chiffrement sur md5 ou scram-sha-256. L'algorithme md5 offre la compatibilité la plus étendue. scram-sha-256 est quant à lui plus sécurisé, mais peut être incompatible avec les clients anciens.

Lorsque vous activez l'accès pg_shadow pour exporter les propriétés d'un rôle à partir d'une instance Cloud SQL, pensez à utiliser l'algorithme le plus sécurisé compatible avec vos clients.

Dans la documentation PostgreSQL, consultez également les pages suivantes :

Étapes suivantes