Tous les produits
Search
Centre de documentation

Hologres:Fonctions SPM

Dernière mise à jour :Sep 18, 2026

Le modèle d'autorisation simple (SPM) repose sur un ensemble de procédures stockées. Cette rubrique décrit la syntaxe, les paramètres, les autorisations requises et le comportement de chaque fonction.

Présentation des fonctions

Fonction Description
spm_enable Active SPM pour la base de données actuelle
spm_migrate Migre les objets existants (tables, vues, tables distantes) vers la propriété SPM
spm_create_user Crée un utilisateur disposant uniquement des droits de connexion
spm_grant Ajoute un utilisateur à un groupe d'utilisateurs
spm_revoke Supprime un utilisateur d'un groupe d'utilisateurs
spm_disable Désactive SPM pour la base de données actuelle
spm_cleanup Supprime les groupes d'utilisateurs réservés par SPM d'une base de données

spm_enable

Active SPM pour la base de données actuelle. En cas de succès, le système crée quatre groupes d'utilisateurs : {db}_admin, {db}_developer, {db}_writer et {db}_viewer.

Autorisations requises : Superutilisateur uniquement.

Syntaxe

CALL spm_enable();

Conséquences de l'activation

Modification Détails
Révocation de l'accès PUBLIC Toutes les autorisations sur la base de données et ses schémas sont supprimées pour PUBLIC. Les utilisateurs n'appartenant pas explicitement à un groupe ne peuvent pas se connecter.
Connectivité des groupes Les quatre groupes ({db}_admin, {db}_developer, {db}_writer, {db}_viewer) obtiennent l'autorisation CONNECT.
Propriété {db}_admin devient propriétaire de la base de données et de tous les schémas. Les objets créés par les membres de {db}_admin ou de {db}_developer appartiennent à {db}_developer.
Autorisations de schéma {db}_developer, {db}_writer et {db}_viewer reçoivent l'autorisation USAGE sur tous les schémas. {db}_developer reçoit également l'autorisation CREATE sur tous les schémas.
Autorisations d'objet {db}_writer reçoit les autorisations en lecture-écriture sur tous les objets. {db}_viewer reçoit les autorisations en lecture seule.

spm_migrate

Migre les objets de base de données existants vers la propriété SPM par lots. Appelez cette fonction après spm_enable pour placer les tables, vues et tables distantes préexistantes sous la gestion SPM.

Autorisations requises : Superutilisateur ou membre de {db}_admin.

Syntaxe

CALL spm_migrate( [ batch_size ] );

Paramètres

Paramètre Description Plage de valeurs
batch_size Nombre d'objets à migrer par appel. La valeur par défaut correspond à la valeur actuelle de max_locks_per_transaction lorsque ce paramètre est défini sur 0. [0, max_locks_per_transaction]. Les valeurs hors de cette plage sont invalides. Exécutez show max_locks_per_transaction; pour vérifier la limite actuelle.

Valeurs de retour

Valeur de retour Signification
DONE BUT NOT COMPLETED Certains objets restent à migrer. Appelez à nouveau spm_migrate().
COMPLETED Tous les objets sont migrés.
Si votre instance contient des milliers d'objets, appelez spm_migrate() plusieurs fois jusqu'à ce que COMPLETED soit renvoyé. Contactez le support Hologres pour demander une augmentation de la valeur max_locks_per_transaction si nécessaire. Pour plus de détails, consultez Obtenir plus d'assistance en ligne .

Exemples

-- Migrate up to max_locks_per_transaction objects per call
CALL spm_migrate();

-- Migrate 128 objects per call
CALL spm_migrate(128);

spm_create_user

Crée un utilisateur Hologres disposant uniquement des droits de connexion. Après la création, ajoutez l'utilisateur à un groupe avec spm_grant pour lui accorder des autorisations de développement.

Autorisations requises : Superutilisateur ou membre de {db}_admin.

Syntaxe

CALL spm_create_user( user_name [, role_name] );

Paramètres

Paramètre Description
user_name Compte à créer. Accepte un compte Alibaba Cloud (par exemple, 13432193xxxx ou example@aliyun.com) ou un compte utilisateur RAM (par exemple, RAM$mainaccount:subuser ou p4_202338382183xxx).
role_name (Facultatif) Groupe d'utilisateurs auquel ajouter immédiatement l'utilisateur. Valeurs valides : {db}_admin, {db}_developer, {db}_writer, {db}_viewer.

Exemples

-- Create a user with logon-only permissions
CALL spm_create_user('my_t***@aliyun.com');

-- Create a user and immediately add them to the developer group
CALL spm_create_user('RAM$my_test:mysubuser', 'mydb_developer');

-- Create a user using an Alibaba Cloud account ID
CALL spm_create_user('13532313103042xxx');

-- Create a user and immediately add them to the admin group
CALL spm_create_user('p4_23319103042xxx', 'mydb_admin');

spm_grant

Ajoute un utilisateur à un groupe d'utilisateurs, en lui accordant les autorisations associées à ce groupe.

Autorisations requises : Superutilisateur ou membre de {db}_admin. SPM doit être activé.

Syntaxe

CALL spm_grant( role_name, user_name );

Paramètres

Paramètre Description
role_name Groupe d'utilisateurs cible : {db}_admin, {db}_developer, {db}_writer ou {db}_viewer. Pour une description des autorisations de chaque groupe, consultez Modèle d'autorisation simple (SPM).
user_name Utilisateur à ajouter. Accepte un compte Alibaba Cloud ou un compte utilisateur RAM dans les mêmes formats que spm_create_user.

Exemples

-- Grant developer permissions on mydb to a RAM user
CALL spm_grant('mydb_developer', 'p4_202338382183xxx');

-- Grant admin permissions on mydb to a RAM user
CALL spm_grant('mydb_admin', 'RAM$my_test:xxx');

-- Error: connect to otherdb first, then run spm_grant
CALL spm_grant('otherdb_admin', '13532313103042xxx');
Pour ajouter un utilisateur à un groupe dans une autre base de données, connectez-vous d'abord à cette base de données, puis appelez spm_grant .

spm_revoke

Supprime un utilisateur d'un groupe d'utilisateurs.

Autorisations requises : Superutilisateur ou membre de {db}_admin. SPM doit être activé.

Syntaxe

CALL spm_revoke( role_name, user_name );

Paramètres

Paramètre Description
role_name Groupe d'utilisateurs duquel supprimer l'utilisateur : {db}_admin, {db}_developer, {db}_writer ou {db}_viewer.
user_name Utilisateur à supprimer. Accepte un compte Alibaba Cloud ou un compte utilisateur RAM.

Exemples

-- Remove a RAM user from the developer group of mydb
CALL spm_revoke('mydb_developer', 'p4_202338382183xxx');

-- Remove a RAM user from the admin group of mydb
CALL spm_revoke('mydb_admin', 'RAM$my_test:xxx');

-- Error: connect to otherdb first, then run spm_revoke
CALL spm_revoke('otherdb_admin', '13532313103042xxx');
Pour supprimer un utilisateur d'un groupe dans une autre base de données, connectez-vous d'abord à cette base de données, puis appelez spm_revoke .

spm_disable

Désactive SPM pour la base de données actuelle, revenant ainsi au modèle d'autorisation PostgreSQL standard.

Autorisations requises : Superutilisateur uniquement.

Syntaxe

CALL spm_disable();

Conséquences de la désactivation

Modification Détails
Groupes conservés {db}_admin, {db}_developer, {db}_writer et {db}_viewer existent toujours et peuvent être utilisés avec des instructions GRANT standard en mode expert.
Propriété des objets Tous les objets de la base de données restent la propriété de {db}_developer.
Restauration de l'accès PUBLIC Les autorisations CONNECT et TEMPORARY sur la base de données sont accordées à PUBLIC.
Restauration de l'accès au schéma public Les autorisations USAGE et CREATE sur le schéma public sont accordées à PUBLIC.
Restauration de l'accès aux fonctions et langages L'autorisation EXECUTE sur les fonctions et procédures du schéma public, USAGE sur les langages définis par l'utilisateur et USAGE sur les types définis par l'utilisateur sont tous accordés à PUBLIC.

Exemple

CALL spm_disable();

spm_cleanup

Supprime les groupes d'utilisateurs réservés par SPM ({db}_admin, {db}_developer, {db}_writer, {db}_viewer) d'une base de données.

Autorisations requises : Superutilisateur uniquement.

Syntaxe

CALL spm_cleanup( db_name [, batch_size ] );

Paramètres

Paramètre Description Plage de valeurs
db_name Base de données dont il faut supprimer les groupes d'utilisateurs. Encadrez les noms contenant des caractères spéciaux ou des lettres majuscules par des guillemets doubles (par exemple, "MYDB"). Aucune
batch_size Nombre d'objets dont la propriété est transférée par appel. La valeur par défaut correspond à la valeur actuelle de max_locks_per_transaction lorsque ce paramètre est défini sur 0. [0, max_locks_per_transaction]. Les valeurs hors de cette plage sont invalides.

Valeurs de retour

Valeur de retour Signification
DONE BUT NOT COMPLETED Le nettoyage est incomplet ; les groupes réservés ne sont pas encore supprimés. Appelez à nouveau spm_cleanup().
COMPLETED Le nettoyage est terminé ; tous les groupes réservés sont supprimés.
Si votre instance contient de nombreux objets à migrer, appelez spm_cleanup() plusieurs fois jusqu'à ce que COMPLETED soit renvoyé. Rejoignez le groupe de communication Hologres pour demander une augmentation de la valeur du paramètre max_locks_per_transaction si nécessaire. Pour plus de détails, consultez Obtenir plus d'assistance en ligne .

Exemples

-- Transfer ownership in batches of max_locks_per_transaction objects
CALL spm_cleanup('mydb');

-- Transfer ownership in batches of 128 objects
CALL spm_cleanup('mydb', 128);

Scénario 1 : Supprimer d'abord la base de données, puis effectuer le nettoyage

DROP DATABASE mydb;
CALL spm_cleanup('mydb');  -- Completes in one call, no retry needed

Scénario 2 : Effectuer le nettoyage alors que la base de données existe toujours

Connectez-vous d'abord à mydb, puis appelez spm_cleanup. Un appel depuis une autre base de données renvoie une erreur :

ERROR: Permission Denied. execute in database otherdb, or drop database before call spm_cleanup.

Autorisations d'appel de fonction

Fonction Description Superutilisateur db_admin db_developer / db_writer / db_viewer
spm_enable Active SPM Oui Non Non
spm_disable Désactive SPM Oui Non Non
spm_grant Ajoute un utilisateur à un groupe Oui Oui Non
spm_revoke Supprime un utilisateur d'un groupe Oui Oui Non
spm_migrate Migre les objets vers SPM Oui Oui Non
spm_cleanup Supprime les groupes d'utilisateurs réservés Oui Non Non
spm_create_user Crée un utilisateur avec uniquement les droits de connexion Oui Oui Non

Commandes restreintes

Après l'activation de SPM, les commandes d'autorisation PostgreSQL suivantes sont restreintes ou inutiles.

Commande Restriction
ALTER TABLE owner TO xx La propriété des objets est gérée automatiquement par SPM. Le propriétaire est toujours {db}_developer et ne peut pas être modifié manuellement.
GRANT Inutile après l'ajout d'un utilisateur avec spm_grant.
REVOKE Inutile après la suppression d'un utilisateur avec spm_revoke.
ALTER DEFAULT PRIVILEGES Inutile. SPM accorde des autorisations en fonction de l'appartenance au groupe, et non de l'heure de création de l'objet, de sorte que les futures tables sont couvertes automatiquement.
CREATE ROLE / DROP ROLE / ALTER ROLE / ALTER ROLE SET DEFAULT USER GROUP Les quatre groupes d'utilisateurs par défaut sont gérés par le système. Aucun utilisateur, y compris les superutilisateurs, ne peut les créer ni les modifier.
RENAME TO/FROM default user group Les noms de groupes réservés (*_admin, *_developer, *_writer, *_viewer) ne peuvent pas être renommés.