Des problèmes d'autorisations peuvent provoquer des erreurs lors du développement sur Hologres. Cette rubrique présente les solutions aux erreurs d'autorisation fréquentes rencontrées dans les instances Hologres.
Comment choisir le modèle d'autorisations Hologres adapté ?
Hologres propose trois modèles d'autorisations. Choisissez celui qui correspond à l'utilisation des schémas par votre équipe.
Modèle d'autorisation PostgreSQL standard : il s'agit du modèle natif de PostgreSQL. Privilégiez cette option si vous maîtrisez la gestion des autorisations PostgreSQL et avez besoin d'un contrôle granulaire au niveau des tables, par exemple pour accorder ou révoquer des droits table par table et utilisateur par utilisateur.
Modèle d'autorisations simplifié (SPM) : ce modèle fonctionne au niveau de la base de données. Tous les utilisateurs sont affectés à l'un des trois groupes (developer, writer ou viewer). Chaque groupe dispose d'autorisations d'accès spécifiques aux objets présents dans n'importe quel schéma de la base de données. Utilisez SPM si vous recourez rarement aux schémas pour isoler les ressources, ou si vous les employez uniquement comme dossiers pour organiser les tables.
Modèle d'autorisations au niveau du schéma (SLPM) : chaque schéma possède ses propres groupes d'utilisateurs developer, writer et viewer, offrant ainsi une isolation au niveau du schéma. Optez pour SLPM si votre équipe s'appuie fortement sur la séparation des autorisations par schéma.
Erreurs d'autorisation
role "RAM$xxx" does not exist
L'utilisateur RAM n'a pas été ajouté à l'instance Hologres. Accordez-lui des autorisations de développement, y compris le rôle Superuser si nécessaire. Consultez la rubrique Accorder des autorisations de développement sur une instance à un utilisateur RAM.
Une fois les autorisations accordées, relancez l'opération pour vérifier que l'erreur a disparu.
password authentication failed for user "xxx"
Cette erreur peut avoir deux causes, selon la méthode de connexion utilisée :
Connexion avec une AccessKey :
Vérifiez que l'utilisateur existe dans l'instance. Sinon, ajoutez-le. Consultez la rubrique Gestion des utilisateurs.
Assurez-vous que l'ID et le secret de l'AccessKey sont corrects et ne sont pas désactivés.
Connexion avec un compte personnalisé (compte BASIC) :
Vérifiez que le compte personnalisé existe dans l'instance. Sinon, ajoutez-le. Consultez la rubrique Gestion des utilisateurs.
Vérifiez que le mot de passe est correct.
permission denied for table xxxx
Le compte actuel ne dispose pas d'un accès en lecture à la table. Appliquez la correction adaptée à votre modèle d'autorisations :
-
Modèle d'autorisation PostgreSQL standard : accordez l'autorisation SELECT sur la table en remplaçant
p4_UIDpar l'identifiant de l'utilisateur RAM :GRANT SELECT ON TABLE tablename TO "p4_UID"; SPM : ajoutez l'utilisateur au groupe viewer ou à un groupe disposant d'autorisations supérieures. Consultez les rubriques Utiliser le modèle d'autorisations simplifié.
Après avoir appliqué la correction, réexécutez la requête pour confirmer que l'accès est rétabli.
FATAL: permission denied for database "xxx" detail: user does not have CONNECT privilege
Le compte utilisateur existe dans l'instance, mais ne dispose d'aucune autorisation de développement sur la base de données. Accordez les autorisations requises, y compris le rôle Superuser si nécessaire. Consultez la rubrique Accorder des autorisations de développement sur une instance à un utilisateur RAM.
L'exécution de call spm_enable() échoue en raison de conflits de rôles
SPM a été précédemment activé sur cette base de données, laissant des informations de rôles résiduelles. Exécutez plutôt la commande CALL spm_enable ('t');. L'indicateur 't' permet de réutiliser les rôles système existants au lieu de tenter d'en créer de nouveaux, évitant ainsi le conflit.
current database is NOT in simple privilege mode
SPM n'est pas activé pour la base de données. Pour l'activer :
-
Vérifiez l'état actuel :
SHOW hg_experimental_enable_spm; -
Activez SPM et migrez les objets existants vers la gestion SPM :
-- Enable SPM, retaining original roles and permissions CALL spm_enable ('t'); -- Transfer ownership of existing objects to the developer role CALL spm_migrate ();Le paramètre
't'conserve les rôles système d'origine et leurs autorisations au lieu de les supprimer lors de l'exécution despm_disable. Sans ce paramètre, un appel ultérieur àspm_enable()échoue avec une erreur de conflit de rôles. La commandespm_enable ('t')ignore ce conflit et réutilise les rôles système existants.
must be the owner of table xxxx
L'utilisateur actuel n'est pas le propriétaire de la table et ne peut ni créer de partitions enfants ni supprimer la table. Appliquez la correction adaptée à votre modèle d'autorisations :
-
Modèle d'autorisation PostgreSQL standard : transférez la propriété de la table à l'utilisateur en remplaçant
p4_UIDpar l'identifiant de l'utilisateur RAM :ALTER TABLE tablename OWNER TO "p4_UID"; SPM : ajoutez l'utilisateur au groupe developer ou à un groupe disposant d'autorisations supérieures. Consultez la rubrique Utiliser le modèle d'autorisations simplifié.
Erreur permission denied for table xxx lors de l'interrogation d'une vue inter-schémas
SLPM est activé. Or, SLPM ne prend pas en charge les vues qui référencent des tables situées dans différents schémas. Vérifiez si vous tentez de créer une vue inter-schémas avec SLPM.
permission denied for Schema xxx
L'utilisateur ne dispose pas des autorisations nécessaires sur le schéma. Appliquez la correction adaptée à votre modèle d'autorisations :
-
SPM ou SLPM : ajoutez l'utilisateur au groupe approprié :
Pour un accès en lecture (requêtes) : groupe viewer ou supérieur
Pour un accès en écriture (création de tables) : groupe developer ou supérieur
Pour SPM, consultez la rubrique . Pour SLPM, consultez la rubrique Autorisation SLPM.
-
Modèle d'autorisation PostgreSQL standard : accordez explicitement les autorisations sur le schéma en remplaçant l'espace réservé par le compte Alibaba Cloud ou l'adresse e-mail :
-- Grant USAGE to allow querying tables in the schema GRANT USAGE ON SCHEMA <schema_name> TO "Alibaba Cloud account/email"; -- Grant CREATE to allow creating tables in the schema GRANT CREATE ON SCHEMA <schema_name> TO "Alibaba Cloud account/email";Après avoir accordé les autorisations, réexécutez la requête d'origine pour confirmer l'accès.
ALTER TABLE xxx is not supported in Simple Privilege Mode
SPM est activé. Or, SPM n'autorise pas les opérations directes ALTER TABLE. Utilisez l'une des approches suivantes :
Option 1 : accordez les autorisations requises dans SPM. Consultez la rubrique Modèle d'autorisations simplifié.
Option 2 : faites passer la base de données du modèle SPM au modèle d'autorisation PostgreSQL standard. Consultez la rubrique Changer de modèle d'autorisations.