Hologres propose huit fonctions stockées pour gérer le modèle d'autorisation au niveau du schéma (SLPM). Utilisez ces fonctions pour activer, configurer et nettoyer le contrôle d'accès basé sur le SLPM dans vos bases de données.
Présentation des fonctions
| Fonction | Objectif | Autorisation requise |
|---|---|---|
slpm_enable |
Active le SLPM pour une base de données | Superutilisateur |
slpm_migrate |
Migre les objets existants vers le SLPM | — |
slpm_create_user |
Crée un utilisateur dans le SLPM | Superutilisateur ou membre de {db}.admin |
slpm_grant |
Ajoute un utilisateur à un groupe d'utilisateurs | Superutilisateur ou membre de {db}.admin |
slpm_revoke |
Supprime un utilisateur d'un groupe d'utilisateurs | Superutilisateur ou membre de {db}.admin |
slpm_disable |
Désactive le SLPM pour une base de données | Superutilisateur |
slpm_cleanup |
Supprime les groupes d'utilisateurs conservés après la désactivation | Superutilisateur |
slpm_rename_schema |
Renomme un schéma et ses groupes d'utilisateurs associés | Superutilisateur ou membre de {db}.admin |
Flux de travail types
Configuration initiale
Exécutez
slpm_enablepour activer le SLPM. Le système crée automatiquement quatre groupes d'utilisateurs.Exécutez
slpm_migratepour placer les objets existants (tables, vues, tables distantes) sous la propriété du SLPM.Exécutez
slpm_create_userouslpm_grantpour assigner les utilisateurs aux groupes.
Gestion courante des utilisateurs
Utilisez
slpm_grantpour ajouter un utilisateur à un groupe.Utilisez
slpm_revokepour retirer un utilisateur d'un groupe.
Décommissionnement de la base de données
Exécutez
slpm_disablepour désactiver le SLPM. Les groupes d'utilisateurs sont conservés.Exécutez
slpm_cleanuppour supprimer les groupes d'utilisateurs conservés.
slpm_enable
Active le SLPM pour la base de données actuelle. Après l'activation, le système crée automatiquement les groupes d'utilisateurs suivants : {db}.admin, {db}.{schema}.developer, {db}.{schema}.writer et {db}.{schema}.viewer.
Prérequis
| Exigence | Détails |
|---|---|
| Autorisation | Doit être superutilisateur de l'instance Hologres |
Syntaxe
CALL slpm_enable ();
Modifications des autorisations après activation
| Sujet | Avant l'activation | Après l'activation |
|---|---|---|
| Groupe PUBLIC | Dispose d'autorisations sur la base de données et tous les schémas | Toutes les autorisations sont révoquées — les utilisateurs non autorisés ne peuvent pas se connecter |
{db}.admin |
— | Devient propriétaire de la base de données et de tous les schémas ; peut se connecter à la base de données |
{db}.{schema}.developer, writer, viewer |
— | Obtient l'autorisation USAGE sur le schéma ; peut se connecter à la base de données |
{db}.{schema}.developer |
— | Obtient l'autorisation CREATE sur le schéma |
| Objets créés dans un schéma | — | {db}.{schema}.developer = propriétaire ; writer = lecture/écriture ; viewer = lecture seule |
| Objets sans schéma (serveurs distants, wrappers de données distantes, langages) | — | {db}.admin = propriétaire ; developer, writer, viewer obtiennent l'autorisation USAGE |
slpm_migrate
Migre les objets existants — tables, vues et tables distantes — vers le SLPM. Si votre base de données contient de nombreux objets, appelez cette fonction plusieurs fois jusqu'à ce que tous les objets soient migrés.
Syntaxe
CALL slpm_migrate ( [ batch_size ] );
Paramètres
| Paramètre | Description | Plage de valeurs |
|---|---|---|
batch_size |
Nombre maximal d'objets à migrer par appel. Définissez la valeur sur 0 pour utiliser la valeur du paramètre max_locks_per_transaction. |
[1, 64]. Les valeurs en dehors de cette plage sont invalides. |
Pour les bases de données contenant des milliers ou des dizaines de milliers d'objets, contactez le support technique afin d'augmenter la valeur de max_locks_per_transaction avant la migration.
Messages de retour
| Message | Signification |
|---|---|
DONE BUT NOT COMPLETED |
Certains objets restent à traiter. Exécutez à nouveau slpm_migrate. |
COMPLETED |
Tous les objets sont migrés. |
Exemples
-- Migrate objects using the limit set by max_locks_per_transaction
CALL slpm_migrate ();
-- Migrate up to 64 objects per call
CALL slpm_migrate (64);
slpm_create_user
Crée un utilisateur dans le SLPM. Après la création, l'utilisateur ne dispose que de l'autorisation de connexion. Pour permettre l'analyse des données, ajoutez l'utilisateur à un groupe en utilisant slpm_grant ou en spécifiant directement role_name lors de cet appel.
Prérequis
| Exigence | Détails |
|---|---|
| Autorisation | Superutilisateur ou membre du groupe {db}.admin |
Syntaxe
CALL slpm_create_user ( user_name [, role_name] );
Paramètres
| Paramètre | Description |
|---|---|
user_name |
Utilisateur à créer. Formats acceptés : ID de compte Alibaba Cloud (par ex. 13432193xxxx), nom d'affichage du compte (par ex. x*@aliyun.com), UID d'utilisateur RAM avec le préfixe p4_ (par ex. p4_202338382183xxx), ou nom d'affichage de l'utilisateur RAM (par ex. RAM$mainaccount:subuser). |
role_name |
(Facultatif) Groupe auquel ajouter l'utilisateur : {db}.admin, {db}.{schema}.developer, {db}.{schema}.writer ou {db}.{schema}.viewer. Pour les autorisations des groupes, consultez Groupes d'utilisateurs et autorisations dans le SLPM. |
Exemples
-- Create a user by Alibaba Cloud account display name (no group assigned)
CALL slpm_create_user ('my_t***@aliyun.com');
-- Create a RAM user and add them to the mydb.public.developer group
CALL slpm_create_user ('RAM$my_test:mysubuser', 'mydb.public.developer');
-- Create a user by Alibaba Cloud account ID
CALL slpm_create_user ('13532313103042xxx');
-- Create a RAM user by UID and add them to the mydb.admin group
CALL slpm_create_user ('p4_23319103042xxx', 'mydb.admin');
slpm_grant
Ajoute un utilisateur à un groupe d'utilisateurs dans la base de données actuelle.
Prérequis
| Exigence | Détails |
|---|---|
| Autorisation | Superutilisateur ou membre du groupe {db}.admin |
| Statut du SLPM | Doit être activé |
| Portée | Peut uniquement ajouter des utilisateurs aux groupes de la base de données actuelle |
Syntaxe
CALL slpm_grant ( role_name, user_name );
Paramètres
| Paramètre | Description |
|---|---|
role_name |
Groupe cible : {db}.admin, {db}.{schema}.developer, {db}.{schema}.writer ou {db}.{schema}.viewer. Doit appartenir à la base de données actuelle. Pour les autorisations des groupes, consultez Groupes d'utilisateurs et autorisations dans le SLPM. |
user_name |
Utilisateur à ajouter. Formats acceptés : ID de compte Alibaba Cloud (par ex. 13432193xxxx), nom d'affichage du compte (par ex. x*@aliyun.com), UID d'utilisateur RAM avec le préfixe p4_ (par ex. p4_202338382183xxx), ou nom d'affichage de l'utilisateur RAM (par ex. RAM$mainaccount:subuser). |
Exemples
-- Add a RAM user to the mydb.public.developer group
CALL slpm_grant ('mydb.public.developer', 'p4_202338382183xxx');
-- Add a RAM user to the mydb.admin group
CALL slpm_grant ('mydb.admin', 'RAM$my_test:xxx');
-- This fails: cross-database grants are not supported.
-- Connect to otherdb first, then call slpm_grant.
CALL slpm_grant ('otherdb.admin', '13532313103042xxx');
slpm_revoke
Supprime un utilisateur d'un groupe d'utilisateurs dans la base de données actuelle.
Prérequis
| Exigence | Détails |
|---|---|
| Autorisation | Superutilisateur ou membre du groupe {db}.admin |
| Statut du SLPM | Doit être activé |
| Portée | Peut uniquement supprimer des utilisateurs des groupes de la base de données actuelle |
Syntaxe
CALL slpm_revoke ( role_name, user_name );
Paramètres
| Paramètre | Description |
|---|---|
role_name |
Groupe dont il faut supprimer l'utilisateur : {db}.admin, {db}.{schema}.developer, {db}.{schema}.writer ou {db}.{schema}.viewer. Doit appartenir à la base de données actuelle. |
user_name |
Utilisateur à supprimer. Formats acceptés : ID de compte Alibaba Cloud (par ex. 13432193xxxx), nom d'affichage du compte (par ex. x*@aliyun.com), UID d'utilisateur RAM avec le préfixe p4_ (par ex. p4_202338382183xxx), ou nom d'affichage de l'utilisateur RAM (par ex. RAM$mainaccount:subuser). |
Exemples
-- Remove a RAM user from the mydb.public.developer group
CALL slpm_revoke ('mydb.public.developer', 'p4_202338382183xxx');
-- Remove a RAM user from the mydb.admin group
CALL slpm_revoke ('mydb.admin', 'RAM$my_test:xxx');
-- This fails: cross-database revocations are not supported.
-- Connect to otherdb first, then call slpm_revoke.
CALL slpm_revoke ('otherdb.admin', '13532313103042xxx');
slpm_disable
Désactive le SLPM pour la base de données actuelle. Les quatre groupes d'utilisateurs sont conservés après la désactivation — utilisez slpm_cleanup pour les supprimer.
Prérequis
| Exigence | Détails |
|---|---|
| Autorisation | Doit être superutilisateur |
Syntaxe
CALL slpm_disable ();
Modifications des autorisations après désactivation
| Sujet | Autorisations accordées |
|---|---|
{db}.admin, {db}.{schema}.developer, {db}.{schema}.writer, {db}.{schema}.viewer |
Conservées. Les membres de {db}.{schema}.developer restent propriétaires des objets de la base de données. |
| Groupe PUBLIC | CONNECT et TEMPORARY sur la base de données ; USAGE et CREATE sur le schéma public ; EXECUTE sur les fonctions et procédures du schéma public ; USAGE sur les langages et types définis par l'utilisateur |
Exemple
CALL slpm_disable ();
slpm_cleanup
Supprime les groupes d'utilisateurs {db}.admin, {db}.{schema}.developer, {db}.{schema}.writer et {db}.{schema}.viewer qui sont conservés après l'exécution de slpm_disable. Si votre base de données contient de nombreux objets, appelez cette fonction plusieurs fois jusqu'à ce que tous les groupes soient supprimés.
Prérequis
| Exigence | Détails |
|---|---|
| Autorisation | Doit être superutilisateur |
| Portée | Pour une base de données existante : doit être connecté à la base de données cible. Pour une base de données supprimée : se connecter depuis n'importe quelle base de données. |
Syntaxe
CALL slpm_cleanup ( db_name [, batch_size ] );
Paramètres
| Paramètre | Description | Valeur par défaut | Plage de valeurs |
|---|---|---|---|
db_name |
Base de données dont les groupes d'utilisateurs doivent être supprimés. Encadrez le nom de guillemets doubles s'il contient des caractères spéciaux ou des lettres majuscules, par ex. "MYDB". |
— | — |
batch_size |
Nombre maximal d'objets à traiter par appel. Définissez la valeur sur 0 pour utiliser la valeur du paramètre max_locks_per_transaction. |
64 |
[0, 64]. Les valeurs en dehors de cette plage sont invalides. |
Messages de retour
| Message | Signification |
|---|---|
DONE BUT NOT COMPLETED |
Certains objets restent à traiter ; les groupes d'utilisateurs ne sont pas encore supprimés. Exécutez à nouveau slpm_cleanup. |
COMPLETED |
Tous les objets sont traités et les groupes d'utilisateurs sont supprimés. |
Exemples
-- Delete user groups for mydb, processing up to max_locks_per_transaction objects per call
CALL slpm_cleanup ('mydb');
-- Delete user groups for mydb, processing up to 64 objects per call
CALL slpm_cleanup ('mydb', 64);
Cas 1 : Supprimer la base de données d'abord, puis nettoyer ses groupes d'utilisateurs
DROP DATABASE mydb;
-- After dropping the database, clean up its user groups from any database.
CALL slpm_cleanup ('mydb');
Cas 2 : Nettoyer les groupes d'utilisateurs pour une base de données existante
Connectez-vous à otherdb avant d'appeler slpm_cleanup. L'appel depuis une autre base de données renvoie l'erreur suivante :
ERROR: Permission Denied. execute in database otherdb, or drop database before call slpm_cleanup.
slpm_rename_schema
Renomme un schéma et renomme automatiquement ses quatre groupes d'utilisateurs associés ({db}.{schema}.developer, {db}.{schema}.writer, {db}.{schema}.viewer et l'entrée du schéma dans {db}.admin). Utilisez toujours cette fonction plutôt qu'un simple ALTER SCHEMA RENAME — ce dernier ne met pas à jour les noms des groupes d'utilisateurs.
Prérequis
| Exigence | Détails |
|---|---|
| Autorisation | Superutilisateur ou membre du groupe {db}.admin |
Syntaxe
CALL slpm_rename_schema ( old_name, new_name );
Paramètres
| Paramètre | Description |
|---|---|
old_name |
Nom actuel du schéma. Encadrez le nom de guillemets doubles s'il contient des caractères spéciaux ou des lettres majuscules, par ex. "MYSCHEMA". |
new_name |
Nouveau nom du schéma. Les mêmes règles de mise entre guillemets s'appliquent. |
Exemple
CALL slpm_rename_schema ('oldschema', 'newschema');
Étapes suivantes
Groupes d'utilisateurs et autorisations dans le SLPM — comprendre les capacités de chaque groupe
Obtenir une assistance en ligne pour Hologres — contacter le support technique pour les migrations à grande échelle