Tous les produits
Search
Centre de documentation

Hologres:Expert permission model

Dernière mise à jour :Aug 11, 2026

Hologres est compatible avec PostgreSQL et utilise le même système d'autorisation, appelé modèle d'autorisation avancé. Vous pouvez accorder et révoquer les autorisations des utilisateurs en exécutant des instructions PostgreSQL standard.

Octroi d'autorisations

Après avoir connecté une instance Hologres à un outil de développement, exécutez des instructions SQL pour accorder des autorisations aux utilisateurs.

  1. Créez un utilisateur.

    Un compte doit d'abord être créé en tant qu'utilisateur Hologres avant de pouvoir accéder à Hologres et y développer.

    La syntaxe de création d'un utilisateur est la suivante :

    -- Create a user that has the privilege to log on to the Hologres instance. If you grant privileges to a RAM user, use the required format for RAM users.
    CREATE USER "Alibaba Cloud account ID/email address"; 
    -- Create a user and grant the superuser privilege.
    CREATE USER "Alibaba Cloud account ID/email address" SUPERUSER;

    Créez un utilisateur en vous basant sur les exemples suivants. Pour plus d'informations sur les formats des comptes Alibaba Cloud et des utilisateurs RAM, consultez Présentation des comptes.

    -- Create a user by using an Alibaba Cloud account ID.
    CREATE USER "11822780xxx";
    -- Grant the superuser privilege to a RAM user.
    CREATE USER "p4_1822780xxx" SUPERUSER; 

    Pour plus d'informations sur la création de rôles, consultez CREATE ROLE.

  2. Accordez des autorisations.

    Après avoir créé un utilisateur Hologres, accordez-lui des autorisations. Le modèle d'autorisation avancé vous permet de contrôler les autorisations au niveau de la base de données, de la table, de la vue et de la colonne.

    Remarque

    Le modèle d'autorisation PostgreSQL standard ne peut accorder des autorisations que sur des objets existants. Ces autorisations ne s'appliquent pas aux objets créés après l'octroi. Par exemple, si l'utilisateur A accorde à l'utilisateur B l'autorisation SELECT sur toutes les tables du public schema, puis crée une nouvelle table, l'utilisateur B n'aura pas l'autorisation SELECT sur cette nouvelle table. L'utilisateur A doit accorder explicitement l'autorisation sur la nouvelle table.

    Description

    Exemple de syntaxe

    Obligatoire

    Créer un utilisateur disposant de l'autorisation de connexion à une instance Hologres

    CREATE USER "Alibaba Cloud account/email address";

    Obligatoire

    Créer un utilisateur et accorder l'autorisation de superutilisateur

    CREATE USER "Alibaba Cloud account/email address" SUPERUSER ;

    Facultatif

    Accorder l'autorisation CREATE sur un schéma

    GRANT CREATE ON SCHEMA schema_name  TO "Alibaba Cloud account/email address";

    Facultatif

    Accorder l'autorisation USAGE sur un schéma

    GRANT USAGE ON SCHEMA schema_name  TO "Alibaba Cloud account/email address";

    Obligatoire

    Remarque

    Un utilisateur doit disposer de l'autorisation USAGE sur un schéma pour interroger ses tables.

    Accorder à tous les utilisateurs les autorisations SELECT, INSERT et UPDATE sur toutes les tables du public schema

    GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA public to PUBLIC;

    Facultatif

    Accorder à un utilisateur l'autorisation SELECT sur une table

    GRANT SELECT ON TABLE <tablename> TO "Alibaba Cloud account/email address";

    Facultatif

    Accorder à un utilisateur l'autorisation SELECT sur une table avec l'option GRANT

    GRANT SELECT ON TABLE <tablename> TO "Alibaba Cloud account/email address" WITH GRANT OPTION;

    Facultatif

    Accorder à un utilisateur l'autorisation SELECT sur toutes les tables du public schema

    GRANT SELECT ON ALL TABLES IN SCHEMA public TO "Alibaba Cloud account/email address";

    Facultatif

    Accorder à tous les utilisateurs l'autorisation SELECT sur les futures tables créées par le rôle actuel dans le schéma public.

    ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO PUBLIC;

    Facultatif

    Changer un utilisateur standard en superutilisateur

    ALTER USER "Alibaba Cloud account/email address" SUPERUSER;

    Facultatif

    Changer un superutilisateur en utilisateur standard

    ALTER USER "Alibaba Cloud account/email address" NOSUPERUSER;

    Facultatif

    Transférer la propriété d'une table à un autre utilisateur

    ALTER TABLE <tablename> OWNER TO "Alibaba Cloud account/email address";

    Facultatif

    Créer un rôle sans autorisation de connexion

    CREATE ROLE "Alibaba Cloud account/email address";

    Facultatif

    Accorder un rôle à un utilisateur

    GRANT <rolename> TO "Alibaba Cloud account/email address" ;

    Facultatif

    Accorder à un utilisateur l'autorisation SELECT sur des colonnes spécifiques d'une table

    GRANT SELECT (<column1>,<column2>,<column3>,...) ON TABLE <tablename> TO "Alibaba Cloud account/email address" ;

    Facultatif

    Accorder à un utilisateur l'autorisation SELECT sur une vue

    Remarque
    • Dans le modèle d'autorisation PostgreSQL standard, vous devez accorder l'autorisation SELECT sur une vue pour y accéder.

    • Dans le modèle d'autorisation simplifié (SPM) ou le modèle d'autorisation au niveau du schéma (SLPM), vous devez être membre du groupe d'utilisateurs viewer ou d'un groupe d'utilisateurs disposant d'autorisations supérieures pour accéder à une vue.

    -- Grant a user the SELECT privilege on a view by using the standard PostgreSQL authorization model. 
    GRANT SELECT ON <viewname> TO "Alibaba Cloud account/email address" ;

    Facultatif

    Pour accorder l'autorisation SELECT sur une table à un nouvel utilisateur, exécutez les instructions suivantes :

    CREATE USER "Alibaba Cloud account/email address";
    GRANT USAGE ON SCHEMA <schema_name>  TO "Alibaba Cloud account/email address";
    GRANT SELECT ON TABLE <tablename> TO "Alibaba Cloud account/email address";

    L'instruction CREATE ROLE crée un rôle sans autorisation de connexion, tel qu'un groupe d'utilisateurs ou un rôle virtuel représentant un type spécifique d'utilisateur. Pour plus d'informations sur l'octroi d'autorisations, consultez GRANT.

  3. Supprimez une table.

    Seul un superutilisateur ou le propriétaire de la table peut supprimer une table. Pour accorder aux utilisateurs l'autorisation de supprimer une table, utilisez l'une des méthodes suivantes :

    • Transférez la propriété de la table à un nouvel utilisateur.

      ALTER TABLE TABLENAME OWNER TO "Alibaba Cloud account/email address";
    • Accordez l'autorisation de superutilisateur à un nouvel utilisateur.

      ALTER USER "Alibaba Cloud account/email address" SUPERUSER;
    • Ajoutez plusieurs utilisateurs à un groupe d'utilisateurs et transférez la propriété de la table au groupe d'utilisateurs.

      CREATE USER "Alibaba Cloud account ID/email address";
      CREATE ROLE <rolename>;
      GRANT <rolename> TO "Alibaba Cloud account/email address";
      ALTER TABLE <tablename> OWNER TO <rolename>;

Autorisations par défaut pour les futures tables

Par défaut, le modèle d'autorisation PostgreSQL standard n'accorde pas d'autorisations sur les futures tables. Pour ce faire, vous devez utiliser l'instruction ALTER DEFAULT PRIVILEGES.

Remarque
  • Cette instruction n'affecte pas les objets logiques existants.

  • Cette instruction ne peut définir des autorisations par défaut que pour les tables, les schémas, les fonctions, les séquences ou les types.

  1. Accordez des autorisations.

    • Une fois les autorisations par défaut configurées, les tables créées par un utilisateur dans un schéma spécifique peuvent être interrogées par un utilisateur spécifié ou par tous les utilisateurs.

      • Après avoir exécuté cette instruction, tous les utilisateurs peuvent interroger les futures tables créées par l'utilisateur p4_id1 dans le public schema.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA public GRANT SELECT ON TABLES TO PUBLIC;
      • Après avoir exécuté cette instruction, l'utilisateur p4_id2 peut interroger les futures tables créées par l'utilisateur p4_id1 dans le public schema.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA public GRANT SELECT ON TABLES TO "p4_id2";
      • Après avoir exécuté cette instruction, tous les utilisateurs peuvent interroger les futures tables créées par l'utilisateur p4_id1 dans le test schema.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA test GRANT SELECT ON TABLES TO PUBLIC;
    • Pour révoquer les autorisations par défaut, exécutez les instructions SQL suivantes.

      • Révoquez de tous les utilisateurs l'autorisation SELECT par défaut sur les futures tables créées par l'utilisateur p4_id1 dans le public schema.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA public REVOKE SELECT ON TABLES FROM PUBLIC;
      • Révoquez de l'utilisateur p4_id2 l'autorisation SELECT par défaut sur les futures tables créées par l'utilisateur p4_id1 dans le public schema.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA public REVOKE SELECT ON TABLES FROM "p4_id2";
      • Révoquez de tous les utilisateurs l'autorisation SELECT par défaut sur les futures tables créées par l'utilisateur p4_id1 dans le test schema.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA test REVOKE SELECT ON TABLES FROM PUBLIC;
  2. Vérifiez que les autorisations par défaut sont définies.

    • Dans un client psql, exécutez la commande \ddp pour vérifier que l'instruction ALTER DEFAULT PRIVILEGES a abouti.

    • Exécutez l'instruction SQL suivante dans Hologres pour interroger directement le résultat.

      SELECT pg_catalog.pg_get_userbyid(d.defaclrole) AS "Owner",
        n.nspname AS "Schema",
        CASE d.defaclobjtype WHEN 'r' THEN 'table' WHEN 'S' THEN 'sequence' WHEN 'f' THEN 'function' WHEN 'T' THEN 'type' WHEN 'n' THEN 'schema' END AS "Type",
        pg_catalog.array_to_string(d.defaclacl, E'\n') AS "Access privileges"
      FROM pg_catalog.pg_default_acl d
           LEFT JOIN pg_catalog.pg_namespace n ON n.oid = d.defaclnamespace
      ORDER BY 1, 2, 3;

    Lorsqu'une nouvelle table est créée, Hologres fait correspondre l'utilisateur actuel et le schéma au catalogue système pg_catalog.pg_default_acl. Si une règle ALTER DEFAULT PRIVILEGES correspondante est trouvée, la règle est appliquée à la nouvelle table. L'utilisateur actuel est déterminé comme suit :

    • Si le rôle actuel est un utilisateur, l'utilisateur est utilisé pour la correspondance lors de la création de la table.

    • Si un utilisateur exécute l'instruction SET SESSION ROLE GROUP1; avant de créer une table, le rôle actuel devient GROUP1. Dans ce cas, GROUP1 est utilisé pour la correspondance.

    La règle de correspondance n'est déclenchée que lors de la création d'une table. Si vous exécutez l'instruction ALTER TABLE SET OWNER TO pour modifier le propriétaire de la table après sa création, la règle de correspondance n'est pas déclenchée.

Révocation d'autorisations

Pour révoquer les autorisations d'un utilisateur, exécutez l'instruction REVOKE. Pour plus d'informations sur la révocation des autorisations, consultez REVOKE.

Avant de révoquer les autorisations de schéma, vérifiez si le compte possède des tâches planifiées dans DataWorks. Si c'est le cas, réattribuez d'abord ces tâches à un compte actif et autorisé via le centre d'opérations DataWorks. Sinon, les tâches échoueront lors de leur prochaine exécution avec l'erreur permission denied for schema.

REVOKE SELECT ON TABLE tablename FROM "Alibaba Cloud account ID/email address" ; -- If you revoke privileges from a RAM user, use the required format for RAM users.

Autorisations du catalogue système

À partir de Hologres V3.0, tout utilisateur qui se connecte à une base de données peut afficher des informations sur tous les schémas et tables en interrogeant les catalogues système pg_class, pg_attribute et pg_namespace. Cela est particulièrement vrai lors de la connexion avec des outils BI ou de développement, qui récupèrent automatiquement les listes de schémas, de tables et de colonnes à partir de ces catalogues système. Pour restreindre la visibilité des métadonnées aux seuls utilisateurs autorisés, les versions Hologres V3.0.23 et ultérieures prennent en charge le contrôle d'accès au niveau des lignes (RLS) sur ces trois catalogues système. Vous pouvez activer le RLS en définissant le paramètre GUC suivant :

  • Ce paramètre GUC ne contrôle que les catalogues système pg_class, pg_attribute et pg_namespace.

  • Un superutilisateur doit exécuter cette instruction une fois pour chaque base de données.

  • Une fois ce paramètre défini, seul un superutilisateur, le propriétaire d'un objet ou un utilisateur disposant d'une autorisation sur un objet (table ou schéma) peut voir les métadonnées correspondantes. Les autres utilisateurs ne peuvent pas afficher les métadonnées.

-- Set by a superuser.
ALTER DATABASE <database_name> SET hg_experimental_enable_catalog_rls = on;
Remarque

Pour plus d'informations sur les catalogues système, consultez Catalogues système.

Affichage des autorisations

Exécutez les instructions SQL suivantes pour afficher les rôles et les autorisations des utilisateurs :

SELECT ROLNAME FROM pg_roles;
SELECT user_display_name(ROLNAME) FROM pg_roles;

Suppression d'un utilisateur

Exécutez des instructions SQL pour supprimer un utilisateur d'une instance connectée à un outil de développement. La procédure varie selon le type d'utilisateur.

  • Supprimer un utilisateur standard

    Pour supprimer un utilisateur standard qui n'a créé aucun objet tel que des tables, des vues ou des extensions, exécutez l'instruction suivante ou supprimez l'utilisateur dans la console HoloWeb.

    drop user "Alibaba Cloud account ID/email address";
  • Supprimer un administrateur tel qu'un superutilisateur

    Pour supprimer un administrateur (tel qu'un superutilisateur) qui possède des objets, vous devez d'abord transférer la propriété de ces objets. Toute tentative de suppression directe d'un tel utilisateur entraîne une erreur. Exécutez les instructions suivantes :

    -- Transfer objects owned by Account A to Account B.
    reassign owned by "Alibaba Cloud account ID of A" to "Alibaba Cloud account ID of B";     
    -- Drop Account A.
    drop user "Alibaba Cloud account ID of A";

Vous pouvez supprimer un utilisateur RAM d'une instance en utilisant l'une des méthodes suivantes :

DROP USER "Alibaba Cloud account ID/email address";
Important

Une fois qu'un utilisateur RAM est supprimé, il ne peut plus se connecter à l'instance ni accéder à ses objets. Procédez avec prudence.

PostgreSQL dispose d'un modèle d'autorisation strict. Pour les meilleures pratiques sur le choix d'une approche d'autorisation en fonction de vos besoins métier, consultez Autorisation basée sur le modèle d'autorisation PostgreSQL standard.