Ajouter des rôles de connexion dans PostgreSQL

Disponible avec une licence Standard ou Advanced.

PostgreSQL utilise des rôles pour se connecter à l’agrégat de bases de données et aux bases de données. Les utilisateurs individuels sont appelés des rôles de connexion. Pour tous les rôles d’utilisateur de connexion qui auront des objets dans la géodatabase, l’administrateur de base de données doit également créer une structure dans la base de données de stockage de la géodatabase. Pour que PostgreSQL puisse être utilisé avec ArcGIS, la structure doit porter le même nom que le rôle de connexion et appartenir à ce dernier.

L’administrateur de base de données peut utiliser l’outil Créer un utilisateur de base de données pour ajouter un rôle de connexion qui permet de créer des tables et des classes d’entités. L’outil crée un rôle d’utilisateur de connexion authentifiée par la base de données dans le cluster de bases de données PostgreSQL, ainsi qu’une structure correspondante pour l’utilisateur dans la base de données que vous spécifiez, et accorde au rôle public des privilèges usage sur la nouvelle structure.

L’administrateur de base de données peut également utiliser une application cliente PostgreSQL, telle que pgAdmin ou PL/pgSQL, pour créer des rôles d’utilisateur de connexion. Vous devez utiliser ces applications pour créer un rôle de connexion qui ne possède pas de structure et ne peut donc pas créer d’objets dans la géodatabase, ou pour créer un rôle de connexion apparié à une connexion SSPI (Security Support Provider Interface) ou LDAP (Lightweight Directory Access Protocol).

L’administrateur de base de données peut également créer des rôles de groupe auxquels des rôles de connexion peuvent être ajoutés, puis attribuer au groupe des autorisations qui s’appliqueront à tous les rôles d’utilisateur de connexion associés. Utilisez l’outil Créer un rôle ou un script pour créer des rôles de groupe, ou utilisez SQL.

Remarque :

Au sein du groupe, chaque rôle d’utilisateur de connexion qui aura des objets dans la géodatabase doit disposer de sa propre structure correspondante. Vous ne pouvez pas créer une structure pour le rôle de groupe.

Utiliser le géotraitement pour ajouter un utilisateur qui peut créer des objets de base de données

Exécutez l’outil Créer un utilisateur de base de données à partir d’ArcGIS Pro ou appelez la fonction ArcPy management.CreateDatabaseUser dans un script Python pour créer un rôle d’utilisateur de connexion qui permet de créer des tables, des classes d’entités et des vues.

Vous devez vous connecter à la base de données avec un rôle doté du statut de superutilisateur pour exécuter l’outil Créer un utilisateur de base de données ou la fonction ArcPy management.CreateDatabaseUser.

Utiliser l’outil Créer un utilisateur de base de données

Pour créer un rôle d’utilisateur de connexion dans PostgreSQL à l’aide de l’outil Créer un utilisateur de base de données, procédez comme suit :

  1. Démarrez ArcGIS Pro.
  2. Connectez-vous à la base de données ou à la géodatabase à l’aide d’un rôle doté de l’autorité de superutilisateur PostgreSQL.
  3. Ouvrez l’outil Créer un utilisateur de base de données.

    Il se trouve dans le jeu d’outils Administration de géodatabase de la boîte à outils Gestion des données.

  4. Indiquez la connexion à une base de données pour le paramètre Input Database Connection (Connexion à la géodatabase en entrée).
  5. Attribuez un nom au rôle d’utilisateur de connexion et à la structure que l’outil va créer.
  6. Fournissez un mot de passe pour l’utilisateur de base de données.
  7. Si vous disposez déjà d’un rôle de groupe auquel vous souhaitez ajouter cet utilisateur en tant que membre, indiquez ce rôle de groupe.
  8. Cliquez sur Run (Exécuter).

La base de données compte désormais un utilisateur qui peut créer des tables, des classes d’entités et des vues.

Le nouvel utilisateur peut se connecter à la base de données pour créer des jeux de données. Il peut ensuite accorder à d’autres utilisateurs des privilèges sur les jeux de données créés. Pour obtenir des instructions, reportez-vous à la rubrique Octroyer et supprimer des privilèges sur le jeu de données dans des bases de données et des géodatabases d’entreprise.

Exécuter un script Python

Pour générer un script de création de rôle d’utilisateur de connexion, procédez comme suit :

  1. Créez un fichier texte sur l’ordinateur d’un client ArcGIS, puis copiez-y un des blocs de code suivants.

    Modifiez le code pour utiliser les informations spécifiques de votre site.

    Les exemples supposent que vous disposez d’un fichier de connexion à une base de données existant qui vous permet de vous connecter en tant qu’utilisateur doté de l’autorité de superutilisateur dans l’agrégat de bases de données PostgreSQL. Si vous ne disposez pas d’un fichier de connexion, créez-en un avant d’exécuter le script.

    # Name: createdatabaseuser_exampleW.py
    # Description: Uses existing database connection file
    # on a Windows computer to create a database user in PostgreSQL.
    
    # Import arcpy module
    import arcpy
     
    # Provide a database connection file for the PostgreSQL administrator user.
    connection = "C:\\ArcGIS\connection_files\<Connection file>.sde"
    
    # Process: Create database user that can create data.
    arcpy.CreateDatabaseUser_management(connection, "DATABASE_USER", "dbuser", "t3mpor@rypL@ceholder1")
    # Name: createdatabaseuser_exampleL.py
    # Description: Uses existing database connection file
    # on a Linux computer to create a database user in PostgreSQL.
    
    # Import arcpy module
    import arcpy
     
    # Provide a database connection file for the PostgreSQL administrator user.
    connection = "<user>/connections/<Connection_file>.sde"
    
    # Process: Create database user that can create data.
    arcpy.CreateDatabaseUser_management(connection, "DATABASE_USER", "dbuser", "t3mpor@rypL@ceholder1")

  2. Enregistrez le fichier avec l’extension .py.
  3. Exécutez le script à partir d’un ordinateur sur lequel ArcGIS Pro (Standard ou Advanced) ou ArcGIS Server est installé.

    Pour plus d’informations sur l’exécution de Python à partir d’une machine ArcGIS Server, reportez-vous à la rubrique ArcGIS Server et ArcPy.

La base de données compte désormais un rôle d’utilisateur de connexion qui permet de créer des tables, des classes d’entités et des vues.

Le nouvel utilisateur peut se connecter à la base de données pour créer des jeux de données. Il peut ensuite accorder à d’autres utilisateurs des privilèges sur les jeux de données créés. Pour obtenir des instructions, reportez-vous à la rubrique Octroyer et supprimer des privilèges sur le jeu de données dans des bases de données et des géodatabases d’entreprise.

Créer des connexions avec SQL

Vous pouvez utiliser SQL pour créer des rôles. Si vous procédez ainsi pour une géodatabase dans PostgreSQL, assurez-vous toutefois que les rôles de groupe public ou les rôles spécifiques disposent des privilèges requis pour créer des tables temporaires. Ce paramétrage est requis pour tous les utilisateurs, même ceux qui ne vont pas créer d’autres objets de base de données.

Pour connaître les privilèges requis par type d’utilisateur, reportez-vous à la rubrique Privilèges pour les géodatabases dans PostgreSQL.

Créer des rôles

Les étapes suivantes expliquent comment utiliser psql pour créer des rôles de groupe dans le but de simplifier la gestion des privilèges et pour créer des rôles de connexion appartenant aux rôles de groupe :

  1. Connectez-vous à psql en tant qu’utilisateur autorisé à créer d’autres rôles dans l’agrégat de bases de données.

    Vous pouvez utiliser un identifiant de connexion de superutilisateur ou un identifiant de connexion qui détient le privilège createrole.

  2. Utilisez la commande create role pour créer des groupes de connexion.

    Dans cet exemple, les rôles de groupe sont créés pour accorder des privilèges aux créateurs de données, aux éditeurs de données et aux visualiseurs de données.

    CREATE ROLE owners 
    NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT;
    
    CREATE ROLE editors 
    NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT;
    
    CREATE ROLE viewers
    NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT;

  3. Accordez les privilèges requis à chacun des rôles de groupe en fonction des opérations que les membres des groupes doivent réaliser.

    Reportez-vous à la rubrique Privilèges pour les géodatabases dans PostgreSQL pour accorder des privilèges à des rôles dans une géodatabase ou à la rubrique Privilèges pour l’utilisation d’ArcGIS avec une base de données PostgreSQL si la base de données ne contient pas de géodatabase.

  4. Créez un rôle de connexion avec une structure correspondante pour qu’il possède des objets de base de données, puis placez ce rôle de connexion dans le rôle de groupe de propriétaires.

    CREATE ROLE geodataowner1 LOGIN 
    ENCRYPTED PASSWORD '' 
    NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT IN ROLE owners;
    
    CREATE SCHEMA geodataowner1
      AUTHORIZATION geodataowner1;

    Modifiez le nom du rôle de connexion et de la structure correspondante, puis réexécutez les instructions pour chaque connexion qui va créer des objets de base de données.

  5. Créez des rôles de connexion membres du groupe d’éditeurs.

    Dans cet exemple, un rôle de connexion (editor1) est créé avec un mot de passe chiffré. Le rôle n’a pas le statut de superutilisateur et ne peut pas créer de base de données ni de rôles dans l’agrégat de bases de données. Toutefois, il a été ajouté au rôle de groupe éditeurs et héritera des privilèges de ce rôle de groupe.

    CREATE ROLE editor1 LOGIN 
    ENCRYPTED PASSWORD '' 
    NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT IN ROLE editors;
    Modifiez le nom du rôle de connexion et réexécutez l’instruction pour créer des rôles de connexion supplémentaires qui pourront modifier les données de la géodatabase.

  6. Créez des rôles de connexion membres du groupe de visualiseurs.

    Dans cet exemple, un rôle de connexion (reader1) est créé avec un mot de passe chiffré. Le rôle n’a pas le statut de superutilisateur et ne peut pas créer de base de données ni de rôles dans l’agrégat de bases de données. Toutefois, il a été ajouté au rôle de groupe visualiseurs et héritera des privilèges de ce rôle de groupe.

    CREATE ROLE reader1 LOGIN 
    ENCRYPTED PASSWORD '' 
    NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT IN ROLE viewers;
    Modifiez le nom du rôle de connexion et réexécutez l’instruction pour créer des rôles de connexion supplémentaires qui pourront uniquement visualiser les données de la géodatabase.

  7. Accordez le privilège usage sur les structures que vous avez créées à l’étape 4 aux groupes de connexion de visualiseurs et d’éditeurs.

    Le privilège usage permet aux membres des rôles de groupe d’accéder aux données des structures. Sans ce privilège, les propriétaires de données ne peuvent pas accorder de privilèges sur des jeux de données individuels aux membres des rôles de groupe.

    GRANT USAGE ON SCHEMA geodataowner1 TO viewers;
    GRANT USAGE ON SCHEMA geodataowner1 TO editors;
  8. Si vous créez ces connexions pour une géodatabase, et que vous avez modifié les privilèges de la structure sde de sorte que le groupe public ne bénéficie pas du privilège usage, accordez le privilège usage sur la structure sde aux groupes de propriétaires, d’éditeurs et de visualiseurs.
    GRANT USAGE ON SCHEMA sde TO owners;
    GRANT USAGE ON SCHEMA sde TO editors;
    GRANT USAGE ON SCHEMA sde TO viewers;

La base de données compte désormais un ou plusieurs utilisateurs autorisés à créer des données, un ou plusieurs utilisateurs autorisés à modifier les données et un ou plusieurs utilisateurs autorisés à les visualiser.

Chaque utilisateur doit créer une connexion à la base de données.

Une fois que les propriétaires de données ont créé des jeux de données dans la base de données ou la géodatabase, ils peuvent utiliser les outils ArcGIS pour accorder le privilège select sur les jeux de données au groupe de visualiseurs ainsi que les privilèges select, insert, update et delete sur les jeux de données au groupe d’éditeurs. Pour obtenir des instructions, reportez-vous à la rubrique Octroyer et supprimer des privilèges sur le jeu de données dans des bases de données et des géodatabases d’entreprise.