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, appelezspm_migrate()plusieurs fois jusqu'à ce queCOMPLETEDsoit renvoyé. Contactez le support Hologres pour demander une augmentation de la valeurmax_locks_per_transactionsi 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, appelezspm_cleanup()plusieurs fois jusqu'à ce queCOMPLETEDsoit renvoyé. Rejoignez le groupe de communication Hologres pour demander une augmentation de la valeur du paramètremax_locks_per_transactionsi 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. |