Tous les produits
Search
Centre de documentation

Hologres:Delete a user

Dernière mise à jour :Aug 11, 2026

Supprimez un utilisateur d'une instance Hologres en résolvant les erreurs de dépendance, en transférant la propriété des objets et en supprimant le rôle.

Prérequis

  • Vous disposez des privilèges de superutilisateur ou d'un accès administratif équivalent sur l'instance Hologres.

  • Pour les utilisateurs RAM, utilisez le p4_id de l'utilisateur plutôt que son uid. Pour plus d'informations, consultez la rubrique ID utilisateur.

La suppression de l'utilisateur est-elle nécessaire ?

Avant de supprimer un utilisateur, vérifiez si cette action est réellement requise. Il est souvent possible de résoudre le problème en ajustant simplement les autorisations.

Autorisations incorrectes (suppression non requise)

Si votre objectif est uniquement de corriger les autorisations d'un utilisateur, il n'est pas nécessaire de le supprimer. Révoquez les autorisations actuelles et accordez les nouvelles autorisations souhaitées.

  • Pour gérer les autorisations selon le modèle d'autorisation PostgreSQL standard, consultez la rubrique Modèle d'autorisation PostgreSQL standard.

  • Pour gérer les autorisations via le modèle d'autorisation simplifié, consultez les rubriques Utiliser le modèle d'autorisation simplifié et Utiliser le modèle d'autorisation simplifié au niveau du schéma.

  • Pour promouvoir un utilisateur standard en superutilisateur :

    -- If the user is a RAM user, change uid to p4_id.
    alter user "<uid>" superuser;
  • Pour rétrograder un superutilisateur en utilisateur standard :

    Remarque

    Lorsqu'un superutilisateur devient un utilisateur standard, il perd toutes ses autorisations. Vous devez lui accorder à nouveau les autorisations nécessaires.

    -- If the user is a RAM user, change uid to p4_id.
    alter user "<uid>" nosuperuser;

Dans ces instructions, uid désigne l'ID utilisateur. Pour plus d'informations, consultez la rubrique ID utilisateur.

Raisons métier (suppression requise)

Si la suppression de l'utilisateur est impérative pour des raisons métier, telles que le départ d'un employé ou la présence d'un compte inutilisé, suivez les procédures ci-dessous pour transférer la propriété des objets et supprimer l'utilisateur.

Erreurs courantes lors de la suppression d'un utilisateur

Lorsque vous tentez de supprimer un utilisateur qui possède des objets de base de données ou auquel des autorisations ont été accordées, Hologres renvoie l'une des erreurs suivantes :

  • L'utilisateur possède des objets :

    ERROR:  role "<uid>" cannot be dropped because some objects depend on it
    DETAIL:  owner of table xxx
    owner of schema yyy
  • Des objets d'une base de données dépendent de l'utilisateur :

    ERROR:  role "<uid>" cannot be dropped because some objects depend on it
    DETAIL:  1 object in database xxx
  • L'utilisateur dispose d'autorisations sur des objets :

    ERROR: role "<uid>" cannot be dropped because some objects depend on it
    Detail: privileges for table xxx
    privileges for table yyy

Ces erreurs surviennent car l'utilisateur possède encore des objets dépendants ou des autorisations actives. Résolvez toutes les dépendances avant de supprimer l'utilisateur.

Supprimer un utilisateur tout en conservant les objets

Pour supprimer un utilisateur tout en préservant les objets dont il est propriétaire (tables, vues, fonctions et autres), transférez d'abord la propriété à un autre utilisateur.

  1. Transférez la propriété de tous les objets à un autre utilisateur.

    REASSIGN OWNED BY "<uid>" TO "<Another_uid>" ;
  2. Supprimez l'utilisateur.

    DROP USER "<uid>";

Dans ces instructions, uid désigne l'ID utilisateur. Pour plus d'informations, consultez la rubrique ID utilisateur.

Si l'instruction REASSIGN OWNED BY ne résout pas toutes les dépendances, utilisez les requêtes suivantes pour identifier et transférer des objets spécifiques.

Afficher et résoudre les dépendances utilisateur

Exécutez les requêtes suivantes pour identifier les objets détenus par un utilisateur et les autorisations qui en dépendent. Résolvez toutes les dépendances avant de supprimer l'utilisateur.

Afficher tous les objets dépendants

Exécutez l'instruction suivante pour lister tous les objets dépendants d'un utilisateur. La requête renvoie le type de dépendance pour chaque objet : « Permission dependency » (dépendance d'autorisation) ou « Owner dependency » (dépendance de propriétaire).

select 'select * from ' || s.classid::regclass || ' where oid = ' || s.objid || '; (Execute in the '
 || d.datname || ' DB)' as "Query for dependent objects", case when deptype = 'a' then 'Permission dependency'
when deptype = 'o' then 'Owner dependency' else deptype::text end as "Dependency type"from pg_shdepend s
join pg_database d on (s.dbid = d.oid) join pg_roles r on (r.oid = s.refobjid) where
datname = current_database() and refclassid = 1260 and r.rolname = '<username>';

Vérifier et transférer la propriété des tables, vues et tables distantes

Afficher les propriétaires de toutes les tables, vues et tables distantes :

SELECT
    n.nspname AS "Schema",
    c.relname AS "Name",
    CASE c.relkind
    WHEN 'r' THEN
        'table'
    WHEN 'v' THEN
        'view'
    WHEN 'm' THEN
        'materialized view'
    WHEN 'i' THEN
        'index'
    WHEN 'S' THEN
        'sequence'
    WHEN 's' THEN
        'special'
    WHEN 't' THEN
        'TOAST table'
    WHEN 'f' THEN
        'foreign table'
    WHEN 'p' THEN
        'partitioned table'
    WHEN 'I' THEN
        'partitioned index'
    END AS "Type",
    pg_catalog.pg_get_userbyid(c.relowner) AS "Owner",
    pg_catalog.obj_description(c.oid,'pg_class') AS "Description"
FROM
    pg_catalog.pg_class c
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE
    c.relkind IN ('r', 'p', 't', 'v', 'm', 'S', 's', 'f', '')
    AND pg_catalog.pg_table_is_visible(c.oid);

Afficher les tables, vues et tables distantes appartenant à un utilisateur spécifique :

SELECT
    n.nspname AS "Schema",
    c.relname AS "Name",
    CASE c.relkind
    WHEN 'r' THEN
        'table'
    WHEN 'v' THEN
        'view'
    WHEN 'm' THEN
        'materialized view'
    WHEN 'i' THEN
        'index'
    WHEN 'S' THEN
        'sequence'
    WHEN 's' THEN
        'special'
    WHEN 't' THEN
        'TOAST table'
    WHEN 'f' THEN
        'foreign table'
    WHEN 'p' THEN
        'partitioned table'
    WHEN 'I' THEN
        'partitioned index'
    END AS "Type",
    pg_catalog.pg_get_userbyid(c.relowner) AS "Owner",
    pg_catalog.obj_description(c.oid, 'pg_class') AS "Description"
FROM
    pg_catalog.pg_class c
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE
    c.relkind IN ('r', 'p', 't', 'v', 'm', 'S', 's', 'f', '')
    AND pg_catalog.pg_table_is_visible(c.oid)
    AND pg_catalog.pg_get_userbyid(c.relowner) ='<user_name>';

Transférer la propriété à un nouveau propriétaire :

-- Change the owner of a table.
ALTER TABLE schema_name.table_name OWNER TO new_owner;

-- Change the owner of a foreign table.
ALTER FOREIGN TABLE schema_name.foreign_table_name OWNER TO new_owner;

-- Change the owner of a view.
ALTER VIEW schema_name.view_name OWNER TO new_owner;

Vérifier et transférer la propriété des schémas

Afficher les propriétaires de tous les schémas :

SELECT
    n.nspname AS "Name",
    pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner",
    pg_catalog.array_to_string(n.nspacl, E'\n') AS "Access privileges",
    pg_catalog.obj_description(n.oid, 'pg_namespace') AS "Description"
FROM
    pg_catalog.pg_namespace n
ORDER BY
    1;

Afficher les schémas appartenant à un utilisateur spécifique :

SELECT
    n.nspname AS "Name",
    pg_catalog.pg_get_userbyid(n.nspowner) AS "Owner",
    pg_catalog.array_to_string(n.nspacl, E'\n') AS "Access privileges",
    pg_catalog.obj_description(n.oid, 'pg_namespace') AS "Description"
FROM
    pg_catalog.pg_namespace n
WHERE pg_catalog.pg_get_userbyid(n.nspowner) ='<user_name>';

Transférer la propriété à un nouveau propriétaire :

-- Change the owner of a schema.
ALTER SCHEMA schema_name OWNER TO new_owner;

Vérifier et transférer la propriété des serveurs

Afficher les propriétaires de tous les serveurs :

SELECT
    s.srvname AS "Name",
    pg_catalog.pg_get_userbyid(s.srvowner) AS "Owner",
    f.fdwname AS "Foreign-data wrapper",
    pg_catalog.array_to_string(s.srvacl, E'\n') AS "Access privileges",
    s.srvtype AS "Type",
    s.srvversion AS "Version",
    CASE WHEN srvoptions IS NULL THEN
        ''
    ELSE
        '(' || pg_catalog.array_to_string(ARRAY (
                SELECT
                    pg_catalog.quote_ident(option_name) || ' ' || pg_catalog.quote_literal(option_value)
                FROM pg_catalog.pg_options_to_table(srvoptions)), ', ') || ')'
    END AS "FDW options",
    d.description AS "Description"
FROM
    pg_catalog.pg_foreign_server s
    JOIN pg_catalog.pg_foreign_data_wrapper f ON f.oid = s.srvfdw
    LEFT JOIN pg_catalog.pg_description d ON d.classoid = s.tableoid
        AND d.objoid = s.oid
        AND d.objsubid = 0;

Afficher les serveurs appartenant à un utilisateur spécifique :

SELECT
    s.srvname AS "Name",
    pg_catalog.pg_get_userbyid(s.srvowner) AS "Owner",
    f.fdwname AS "Foreign-data wrapper",
    pg_catalog.array_to_string(s.srvacl, E'\n') AS "Access privileges",
    s.srvtype AS "Type",
    s.srvversion AS "Version",
    CASE WHEN srvoptions IS NULL THEN
        ''
    ELSE
        '(' || pg_catalog.array_to_string(ARRAY (
                SELECT
                    pg_catalog.quote_ident(option_name) || ' ' || pg_catalog.quote_literal(option_value)
                FROM pg_catalog.pg_options_to_table(srvoptions)), ', ') || ')'
    END AS "FDW options",
    d.description AS "Description"
FROM
    pg_catalog.pg_foreign_server s
    JOIN pg_catalog.pg_foreign_data_wrapper f ON f.oid = s.srvfdw
    LEFT JOIN pg_catalog.pg_description d ON d.classoid = s.tableoid
        AND d.objoid = s.oid
        AND d.objsubid = 0
WHERE pg_catalog.pg_get_userbyid(s.srvowner) = '<user_name>';

Transférer la propriété à un nouveau propriétaire :

-- Change the owner of a server.
ALTER SERVER server_name OWNER TO new_owner;

Vérifier et supprimer les mappages utilisateur

Afficher les propriétaires de tous les mappages utilisateur :

SELECT
    um.srvname AS "Server",
    um.usename AS "User name",
    CASE WHEN umoptions IS NULL THEN
        ''
    ELSE
        '(' || pg_catalog.array_to_string(ARRAY (
                SELECT
                    pg_catalog.quote_ident(option_name) || ' ' || pg_catalog.quote_literal(option_value)
                FROM pg_catalog.pg_options_to_table(umoptions)), ', ') || ')'
    END AS "FDW options"
FROM
    pg_catalog.pg_user_mappings um;

Afficher les mappages utilisateur appartenant à un utilisateur spécifique :

SELECT
    um.srvname AS "Server",
    um.usename AS "User name",
    CASE WHEN umoptions IS NULL THEN
        ''
    ELSE
        '(' || pg_catalog.array_to_string(ARRAY (
                SELECT
                    pg_catalog.quote_ident(option_name) || ' ' || pg_catalog.quote_literal(option_value)
                FROM pg_catalog.pg_options_to_table(umoptions)), ', ') || ')'
    END AS "FDW options"
FROM
    pg_catalog.pg_user_mappings um
WHERE um.usename = '<user_name>';

Supprimer le mappage utilisateur :

-- Delete the user mapping.
DROP USER MAPPING FOR user_name SERVER server_name;