Le modèle d'autorisation simplifié (SPM) remplace les attributions manuelles au niveau des objets par quatre groupes d'utilisateurs prédéfinis pour chaque base de données. Assignez un utilisateur à un groupe et SPM gère automatiquement toutes les autorisations sous-jacentes. Cette approche réduit la charge de configuration et élimine la dérive des autorisations lors de l'ajout d'objets.
Groupes d'utilisateurs
Chaque base de données d'une instance Hologres dispose de quatre groupes d'utilisateurs. Choisissez le groupe correspondant au niveau d'accès requis :
| Groupe d'utilisateurs | Destinataires | Niveau d'accès |
|---|---|---|
admin |
Administrateurs de bases de données | Contrôle total sur la base de données, y compris la gestion des autres utilisateurs et objets |
developer |
Ingénieurs en charge de la création et de la maintenance des pipelines de données | Accès en lecture et écriture à toutes les tables et tous les schémas ; possibilité de créer et de supprimer des objets |
writer |
Utilisateurs devant insérer ou mettre à jour des données | Accès en lecture et écriture aux tables, sans possibilité de créer ou de supprimer des objets |
viewer |
Analystes et consommateurs en lecture seule | Accès en lecture seule à toutes les tables et tous les schémas |
Après l'activation de SPM, le groupe developer dispose automatiquement des autorisations par défaut sur toutes les tables et tous les objets assimilables à des tables dans tous les schémas de la base de données.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un accès Superuser à l'instance Hologres (requis pour toutes les commandes de configuration SPM)
L'accès à un client SQL connecté à l'instance Hologres cible
Activer SPM et accorder des autorisations
Voici la procédure pour activer SPM et accorder l'accès aux utilisateurs :
Activez l'extension SPM.
Activez SPM pour la base de données cible.
(Si vous migrez depuis le modèle d'autorisation PostgreSQL standard) Migrez les objets existants.
Créez un utilisateur.
Ajoutez l'utilisateur à un groupe d'utilisateurs.
Étape 1 : Activer l'extension SPM
Avant d'activer SPM, exécutez la commande suivante pour activer l'appel de fonction :
CREATE EXTENSION spm;
Étape 2 : Activer SPM pour la base de données cible
Connectez-vous à la base de données cible et exécutez la commande suivante :
CALL spm_enable();
SPM est désactivé par défaut. Pour plus de détails sur cette fonction, consultez la section spm_enable.
Étape 3 : Migrer les objets existants (le cas échéant)
Ignorez cette étape si la base de données vient d'être créée et ne contient aucun objet.
Si la base de données utilise actuellement le modèle d'autorisation PostgreSQL standard et contient des tables, des vues ou des tables étrangères, migrez ces objets vers SPM avant de poursuivre. Sans migration, les autorisations de table existantes seront perdues, ce qui peut interrompre les charges de travail en cours.
Assurez-vous qu'aucune instruction SQL n'est en cours d'exécution dans la base de données avant de continuer. L'exécution de cette commande pendant que d'autres instructions sont actives peut entraîner l'échec de l'opération.
CALL spm_migrate();
Cette commande modifie le propriétaire de tous les objets existants pour le groupe developer. Étant donné que la migration exécute ALTER ... OWNER TO sur chaque objet, elle est limitée par le paramètre max_locks_per_transaction de PostgreSQL par exécution. Exécutez spm_migrate() plusieurs fois jusqu'à ce que tous les objets soient migrés. Pour plus de détails, consultez la section spm_migrate.
Étape 4 : Créer un utilisateur
Ignorez cette étape si l'utilisateur existe déjà dans l'instance.
Comptes Alibaba Cloud et utilisateurs RAM
Utilisez spm_create_user pour créer un utilisateur. Vous pouvez également ajouter l'utilisateur à un groupe d'utilisateurs lors du même appel :
-- Create a user only
CALL spm_create_user('<account-id-or-email-or-ram-user>');
-- Create a user and add to a group in one step
CALL spm_create_user('<account-id-or-email-or-ram-user>', '<dbname>_[admin|developer|writer|viewer]');
Remplacez <dbname> par le nom de la base de données cible.
Exemple : ajoutez l'utilisateur RAM xxx.onaliyun.com au groupe developer de testdb :
CALL spm_create_user('xxx.onaliyun.com', 'testdb_developer');
Utilisateurs personnalisés
CREATE USER "BASIC$<user_name>" WITH PASSWORD '<password>';
Pour les utilisateurs RAM, ajoutez le préfixep4_à l'UID du compte lors de l'appel despm_create_user. Par exemple :p4_564306222995xxx.
Les noms d'utilisateur personnalisés ne peuvent pas se terminer paradmin,developer,writer,viewerouall_users.
Étape 5 : Ajouter l'utilisateur à un groupe d'utilisateurs
Si vous avez ajouté l'utilisateur à un groupe lors de sa création, ignorez cette étape.
Exécutez spm_grant pour ajouter un utilisateur à un groupe d'utilisateurs. L'utilisateur pourra alors se connecter à la base de données à l'aide d'un outil de développement et opérer dans le périmètre autorisé par le groupe.
CALL spm_grant('<dbname>_[admin|developer|writer|viewer]', '<account-id-or-email-or-ram-user>');
Pour plus de détails sur cette fonction, consultez la section spm_grant. Pour obtenir des informations sur les groupes d'utilisateurs, reportez-vous à la section Groupes d'utilisateurs.
Exemples
Tous les exemples ci-dessous utilisent mydb comme nom de base de données. Remplacez-le par le nom réel de votre base de données.
-- Add a RAM user to the admin group
CALL spm_grant('mydb_admin', 'p4_564306222995xxx');
-- Add an Alibaba Cloud account to the admin group
CALL spm_grant('mydb_admin', '197006222995xxx');
-- Add an Alibaba Cloud account (email format) to the admin group
CALL spm_grant('mydb_admin', 'ALIYUN$xxx');
-- Add a RAM user to the developer group
CALL spm_grant('mydb_developer', 'p4_564306222995xxx');
-- Add an Alibaba Cloud account to the developer group
CALL spm_grant('mydb_developer', '197006222995xxx');
-- Add a RAM sub-user to the developer group
CALL spm_grant('mydb_developer', 'RAM$mainaccount:subuser');
-- Add a RAM user to the viewer group of a case-sensitive database name "MYDB"
CALL spm_grant('"MYDB_viewer"', 'p4_564306222995xxx');
-- Add an Alibaba Cloud account to the viewer group of a case-sensitive database name "MYDB"
CALL spm_grant('"MYDB_viewer"', '197006222995xxx');
-- Add an account (email format) to the viewer group
CALL spm_grant('mydb_viewer', '"xxx@aliyun.com"');
Révoquer des autorisations
Pour retirer un utilisateur d'un groupe d'utilisateurs, exécutez spm_revoke. Cette action révoque l'accès de l'utilisateur au sein de ce groupe, mais ne supprime pas l'utilisateur de l'instance.
CALL spm_revoke('<dbname>_[admin|developer|writer|viewer]', '<account-id-or-email-or-ram-user>');
Pour plus de détails, consultez la section spm_revoke.
Exemples
-- Remove a RAM user from the admin group
CALL spm_revoke('dbname_admin', 'p4_564306222995xxx');
-- Remove an Alibaba Cloud account from the admin group
CALL spm_revoke('dbname_admin', '197006222995xxx');
-- Remove an account (email format) from the admin group
CALL spm_revoke('dbname_admin', 'xxx@aliyun.com');
-- Remove a RAM sub-user from the developer group
CALL spm_revoke('mydb_developer', 'RAM$mainaccount:subuser');
-- Remove a RAM user from the developer group
CALL spm_revoke('mydb_developer', 'p4_564306222995xxx');
-- Remove a RAM user from the viewer group of a case-sensitive database name "MYDB"
CALL spm_revoke('"MYDB_viewer"', 'p4_564306222995xxx');
Supprimer un utilisateur
La suppression d'un utilisateur le retire entièrement de l'instance et révoque toutes ses autorisations. Cette action est irréversible : procédez avec prudence.
DROP ROLE "<account-id-or-email-or-ram-user>";
Désactiver SPM
Seul un Superuser peut désactiver SPM.
Étape 1 : Désactiver SPM
Exécutez la commande suivante dans la base de données cible :
CALL spm_disable();
Après la désactivation, les quatre groupes d'utilisateurs (admin, developer, writer, viewer) ne sont pas supprimés automatiquement. Pour savoir ce qu'il advient des autorisations après la désactivation, consultez la section Fonctions SPM.
Étape 2 : Nettoyer les groupes d'utilisateurs (facultatif)
Après avoir désactivé SPM, vous pouvez nettoyer les groupes d'utilisateurs à l'aide de spm_cleanup si nécessaire. Il est tout à fait acceptable de conserver les groupes d'utilisateurs ; laissez-les en place si vous envisagez de réactiver SPM ultérieurement.
Assurez-vous qu'aucune instruction SQL n'est en cours d'exécution dans la base de données avant d'exécuter spm_cleanup. L'exécution de cette commande pendant que d'autres instructions sont actives peut entraîner l'échec de l'opération.
Scénario 1 : Supprimer les groupes d'utilisateurs tout en conservant la base de données
Exécutez la commande suivante en tant que Superuser dans la base de données cible :
CALL spm_cleanup('<dbname>');
Étant donné que le nettoyage exécute ALTER ... OWNER TO sur les tables métier, il est limité par le paramètre max_locks_per_transaction par exécution. Exécutez spm_cleanup plusieurs fois jusqu'à ce que tous les objets soient migrés et que les quatre groupes d'utilisateurs soient supprimés. Pour plus de détails, consultez la section spm_cleanup.
Scénario 2 : La base de données a déjà été supprimée, mais les groupes d'utilisateurs subsistent
Si la base de données d'origine a été supprimée avant le nettoyage de ses groupes d'utilisateurs, exécutez la commande suivante depuis une autre base de données (par exemple, postgres) en tant que Superuser :
CALL spm_cleanup('mydb');
Autorisations après la désactivation de SPM
Après la désactivation de SPM, les autorisations suivantes s'appliquent :
Autorisations du rôle public
| Autorisation | Portée |
|---|---|
| USAGE, CREATE | Schéma public |
| CONNECT, TEMPORARY | Base de données |
| EXECUTE | Fonctions et procédures |
| USAGE | Langage, types de données (y compris les domaines) |
| Aucune autorisation | Tables, vues, vues matérialisées, colonnes de table, séquences, wrappers de données distantes, serveurs distants, schémas autres que public |
Autorisations des groupes d'utilisateurs
Les quatre groupes (admin, developer, writer, viewer) conservent leurs autorisations sur les objets existants. Ces autorisations ne s'étendent pas aux nouveaux objets de base de données créés après la désactivation de SPM.
Réactiver SPM
Si vous avez précédemment désactivé SPM et êtes revenu au modèle d'autorisation PostgreSQL standard, exécutez les commandes suivantes pour le réactiver :
Assurez-vous qu'aucune instruction SQL n'est en cours d'exécution dans la base de données avant de continuer.
CALL spm_enable('t'); -- Re-enable SPM for the current database
CALL spm_migrate(); -- Transfer ownership of existing objects to the developer group
Exécutez spm_migrate() plusieurs fois si nécessaire, jusqu'à ce que tous les objets soient migrés. La migration est limitée par le paramètre max_locks_per_transaction par exécution.