Tous les produits
Search
Centre de documentation

Hologres:Using the schema-level permission model

Dernière mise à jour :Aug 11, 2026

Le modèle d'autorisations au niveau du schéma (SLPM) centralise la gestion des droits dans Hologres. Au lieu d'accorder individuellement des privilèges au niveau de chaque table, SLPM organise les utilisateurs dans des groupes intégrés — admin, developer, writer et viewer — et applique automatiquement les autorisations au niveau du schéma. Il suffit d'ajouter l'utilisateur au groupe approprié ; aucune instruction GRANT ou ALTER DEFAULT PRIVILEGES n'est requise.

Cette rubrique explique comment activer SLPM, gérer l'appartenance aux groupes d'utilisateurs et effectuer les opérations de cycle de vie, telles que la désactivation et la réactivation du modèle.

Limites

SLPM impose une isolation stricte au niveau du schéma. Avant de l'activer, tenez compte des points suivants :

  • Les vues et règles inter-schémas ne sont pas prises en charge. Si une vue ou une règle fait référence à des tables situées dans plusieurs schémas, elle devient inaccessible et renvoie l'erreur ERROR: permission denied for table. Ne créez pas de vues ou de règles inter-schémas dans une base de données gérée par SLPM. Pour connaître l'exception disponible à partir de la version V1.3.36, consultez la section Créer des vues inter-schémas en mode SLPM (Bêta).

  • Les commandes DDL standard sont remplacées par leurs équivalents SLPM. Le tableau suivant répertorie les commandes concernées.

    Commande standard Raison du remplacement Équivalent SLPM
    alter table owner to xx Toutes les tables appartiennent automatiquement au groupe developer du schéma. Non requis.
    grant Les autorisations sont accordées en ajoutant les utilisateurs à des groupes. slpm_grant
    revoke Les autorisations sont révoquées en retirant les utilisateurs des groupes. slpm_revoke
    alter default privileges Les nouvelles tables héritent automatiquement des autorisations selon le groupe de l'utilisateur. Non requis.
    create / drop / alter / rename sur les groupes d'utilisateurs par défaut Les quatre groupes par défaut sont gérés par le système. Non applicable.
    rename schema Le renommage du schéma doit passer par SLPM pour maintenir la cohérence des liaisons de groupe. slpm_rename_schema
    drop database Les groupes d'utilisateurs doivent être nettoyés après la suppression d'une base de données. Exécutez drop database, puis appelez slpm_cleanup('<dbname>').
  • Les noms de compte personnalisés ne peuvent pas se terminer par admin, developer, writer, viewer ou all_users.

Activer SLPM

Prérequis

Avant de commencer, assurez-vous de disposer des éléments suivants :

  • Un accès superutilisateur à l'instance Hologres

  • Un outil de développement connecté à l'instance (par exemple, HoloWeb ou psql)

Activer SLPM pour une base de données

  1. Installez l'extension SLPM. Exécutez cette commande une fois par base de données.

    create extension slpm;
  2. Activez SLPM. Assurez-vous qu'aucune instruction SQL n'est en cours d'exécution sur la base de données lorsque vous exécutez cette commande.

    call slpm_enable ();
  3. (Facultatif) Migrer depuis le modèle d'autorisations PostgreSQL standard. Si la base de données contient déjà des tables, des vues ou des tables externes gérées selon le modèle PostgreSQL standard, migrez la propriété des objets existants vers SLPM à l'aide de la commande suivante.

    1. Connectez-vous à la console Hologres. Dans le volet de navigation de gauche, cliquez sur Go to HoloWeb.

    2. Cliquez sur Security Center. Sur la page DB Authorization, vérifiez le modèle d'autorisation actuel.

    La fonction slpm_migrate traite jusqu'à 64 utilisateurs par exécution (paramètre ajustable). Si la base de données compte plus d'utilisateurs, exécutez la fonction plusieurs fois jusqu'à ce que toutes les autorisations soient migrées. Pour plus de détails sur les paramètres, consultez slpm_migrate.
    -- Transfer ownership of existing objects to the developer group for SLPM management.
    call slpm_migrate ();

    Pour vérifier quel modèle d'autorisation est actif avant la migration :

Accorder des autorisations

Les autorisations SLPM sont accordées en ajoutant des utilisateurs à des groupes. Chaque groupe correspond à un schéma et à un niveau d'autorisation :

Groupe Format Autorisations
admin {dbname}.admin Administration de la base de données
developer {dbname}.{schemaname}.developer Lecture et écriture, DDL
writer {dbname}.{schemaname}.writer Lecture et écriture
viewer {dbname}.{schemaname}.viewer Lecture seule

Pour obtenir des détails complets sur les actions possibles pour chaque groupe, consultez Groupes d'utilisateurs.

Étape 1 : Créer l'utilisateur

Ignorez cette étape si l'utilisateur existe déjà dans l'instance.

-- Create a user.
call slpm_create_user('<account>');

-- Create a user and add them to a group in one step.
call slpm_create_user('<account>', '{dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer]');

Remplacez <account> par l'un des formats suivants :

Type de compte Format Exemple
ID de compte Alibaba Cloud ID numérique 197006222995xxx
Adresse e-mail Alibaba Cloud ALIYUN$xxx ou "xxx@aliyun.com" (entre guillemets doubles) "xxx@aliyun.com"
Utilisateur RAM RAM$mainaccount:subuser RAM$mycompany:alice
UID d'utilisateur RAM p4_UID p4_564306222995xxx
Pour utiliser un UID d'utilisateur RAM, ajoutez le préfixe p4_. Obtenez l'UID depuis la page Users de la console RAM. Pour en savoir plus sur les formats de compte, consultez Système de comptes.

Étape 2 : Ajouter l'utilisateur à un groupe

call slpm_grant('{dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer]', '<account>');

Si vous avez déjà ajouté l'utilisateur à un groupe lors de sa création, ignorez cette étape.

Exemples :

L'exemple suivant ajoute un compte Alibaba Cloud au groupe admin de mydb.

call slpm_grant('mydb.admin', '197006222995xxx');
call slpm_grant('mydb.admin', 'ALIYUN$xxx');

L'exemple suivant ajoute des utilisateurs au groupe developer du schéma public dans mydb.

call slpm_grant('mydb.public.developer', '197006222995xxx');
call slpm_grant('mydb.public.developer', 'RAM$mainaccount:subuser');

L'exemple suivant ajoute un utilisateur au groupe viewer du schéma lisa dans MYDB (nom de base de données sensible à la casse).

call slpm_grant('"MYDB.lisa.viewer"', '197006222995xxx');
call slpm_grant('mydb.lisa.viewer', '"xxx@aliyun.com"');

Retirer un utilisateur d'un groupe

Le retrait d'un utilisateur d'un groupe révoque toutes les autorisations associées à ce groupe.

call slpm_revoke('{dbname}.[admin|{schemaname}.developer|{schemaname}.writer|{schemaname}.viewer]', '<account>');

Exemples :

L'exemple suivant retire des utilisateurs du groupe admin de dbname.

call slpm_revoke('dbname.admin', 'p4_564306222995xxx');
call slpm_revoke('dbname.admin', '197006222995xxx');
call slpm_revoke('dbname.admin', '"xxx@aliyun.com"');

L'exemple suivant retire un utilisateur RAM du groupe developer du schéma lisa dans mydb.

call slpm_revoke('mydb.lisa.developer', 'RAM$mainaccount:subuser');
call slpm_revoke('mydb.public.developer', 'p4_564306222995xxx');

L'exemple suivant retire un utilisateur RAM du groupe viewer de SCHEMA1 dans MYDB (noms sensibles à la casse).

call slpm_revoke('"MYDB.SCHEMA1.viewer"', 'p4_564306222995xxx');

Supprimer un utilisateur

La suppression d'un utilisateur le retire de l'instance et révoque toutes les autorisations au niveau de l'instance. Cette action est irréversible.

DROP ROLE "<account>";

Désactiver SLPM

Étape 1 : Désactiver le modèle

Seul un superutilisateur peut désactiver SLPM.

call slpm_disable ();

Après la désactivation :

  • Les quatre groupes d'utilisateurs ({db}.admin, {db}.{schemaname}.developer, {db}.{schemaname}.writer, {db}.{schemaname}.viewer) conservent leurs autorisations sur les objets existants. Les autorisations ne s'étendent pas aux nouveaux objets.

  • PUBLIC reçoit les autorisations suivantes : USAGE et CREATE sur le schéma public ; CONNECT et TEMPORARY sur la base de données ; EXECUTE sur les fonctions et procédures ; USAGE sur les langages et types de données (y compris les domaines).

  • PUBLIC ne reçoit pas d'autorisations sur les tables, vues, vues matérialisées, colonnes de table, séquences, wrappers de données distantes, serveurs distants ou schémas non publics. Contactez un superutilisateur pour accorder ces autorisations individuellement.

Étape 2 : Nettoyer les groupes d'utilisateurs (facultatif)

Les groupes d'utilisateurs ne sont pas supprimés automatiquement lors de la désactivation de SLPM. Pour les supprimer, appelez slpm_cleanup.

Assurez-vous qu'aucune instruction SQL n'est en cours d'exécution sur la base de données avant d'appeler slpm_cleanup. La fonction slpm_cleanup transfère la propriété des objets par lots de 64 (paramètre ajustable). Exécutez-la plusieurs fois si nécessaire, mais évitez de dépasser cinq exécutions. Pour plus de détails, consultez slpm_cleanup.

Scénario 1 : Supprimer les groupes d'utilisateurs tout en conservant la base de données.

Exécutez la commande suivante dans la base de données cible en tant que superutilisateur.

call slpm_cleanup('<dbname>');

Scénario 2 : Supprimer les groupes d'utilisateurs après la suppression de la base de données.

Exécutez la commande suivante dans une autre base de données (telle que postgres) en tant que superutilisateur.

call slpm_cleanup('mydb');

Réactiver SLPM

  1. Effacez les autorisations existantes pour éviter les conflits.

    call slpm_cleanup ( '<dbname>' );
  2. Réactivez SLPM en mode récupération, puis transférez la propriété des objets.

    -- Enable SLPM in recovery mode.
    call slpm_enable ('t');
    
    -- Transfer ownership of existing objects to the developer group.
    call slpm_migrate ();
  3. Accordez des autorisations aux utilisateurs. Utilisez slpm_grant comme décrit dans Accorder des autorisations, ou utilisez la console Hologres. Pour plus de détails, consultez Accorder des autorisations à un utilisateur.

Créer des vues inter-schémas en mode SLPM (Bêta)

Les vues inter-schémas nécessitent Hologres V1.3.36 ou une version ultérieure. Si votre instance utilise une version antérieure, consultez Erreurs courantes lors de la préparation d'une mise à niveau d'instance ou contactez le support via le support en ligne.

Par défaut, SLPM n'autorise pas les vues qui font référence à des tables situées dans plusieurs schémas. La fonctionnalité de vue inter-schémas lève cette restriction pour des cas d'utilisation spécifiques.

Quand utiliser cette fonctionnalité

Un modèle courant d'entrepôt de données consiste à organiser les données en schémas stratifiés, par exemple ODS (Operation Data Store), DWD, DWS (Data Warehouse Service) et ADS, puis à créer des vues récapitulatives dans une couche externe qui joignent des tables provenant de plusieurs couches internes.

Prenons l'exemple suivant où une vue dans le schéma ads joint des tables de ods et de dwd :

Base de données Schéma Objet
erp_db ods Table : orders
erp_db dwd Table : customer
erp_db ads Vue : customer_total_order_price_view

La DDL de la vue :

CREATE VIEW ads.customer_total_order_price_view AS
SELECT
    c_name,
    sum(o_totalprice)
FROM
    ods.orders AS o
INNER JOIN dwd.customer AS c
ON o.o_custkey = c.c_custkey
GROUP BY
    1;

Conditions d'autorisation

Action Autorisations requises
Créer une vue inter-schémas dans le schéma ads developer sur ads, plus viewer ou supérieur sur toutes les tables utilisées dans la vue
Interroger une vue inter-schémas viewer ou supérieur sur le schéma où réside la vue
Modifier ou supprimer une vue inter-schémas Doit être le propriétaire de la vue

Dans l'exemple ci-dessus, pour créer ads.customer_total_order_price_view en tant que ads_dev_user :

  • Accordez à ads_dev_user l'autorisation developer sur ads.

  • Accordez à ads_dev_user l'autorisation viewer sur ods et dwd.

Pour permettre à ads_view_user d'interroger la vue, accordez à ads_view_user l'autorisation viewer sur ads.

Activer la fonctionnalité de vue inter-schémas

Exécutez la commande suivante en tant que superutilisateur.

call slpm_enable_multi_schema_view();

Transférer la propriété de la vue

Une fois la fonctionnalité activée, l'utilisateur qui crée une vue en devient le propriétaire. Seul le propriétaire peut la modifier ou la supprimer. Pour transférer la propriété, par exemple avant de retirer un utilisateur de la base de données, exécutez la commande suivante. Le nouveau propriétaire doit disposer de l'autorisation developer sur le schéma de la vue et de l'autorisation viewer ou supérieure sur tous les schémas source.

-- Syntax
call slpm_alter_view_owner('view_name', '<account>');

-- Example: transfer ownership of ads.customer_total_order_price_view to p4_xxxxx.
call slpm_alter_view_owner('ads.customer_total_order_price_view', 'p4_xxxxx');

Désactiver la fonctionnalité de vue inter-schémas

-- Disable cross-schema view support.
call slpm_disable_multi_schema_view();
-- Transfer all view ownership back to the developer group of each view's schema.
call slpm_migrate();

Après l'exécution de ces commandes, les vues existantes non inter-schémas restent interrogeables et SLPM se comporte normalement. Les vues inter-schémas ne peuvent plus être interrogées.

Étapes suivantes