Tous les produits
Search
Centre de documentation

ApsaraDB for SelectDB:Gérer les permissions de base

Dernière mise à jour :Aug 11, 2026

ApsaraDB for SelectDB utilise un modèle de permissions compatible MySQL pour appliquer un contrôle d'accès granulaire au niveau des tables. Vous pouvez accorder des permissions directement aux utilisateurs ou via des rôles, et restreindre l'accès par adresse IP ou par domaine à l'aide de listes d'autorisation.

Concepts clés

Concept Paramètre Description
Identité utilisateur user_identity Identifie un utilisateur par la combinaison d'un nom d'utilisateur et d'une adresse hôte. Formats pris en charge : username@'userhost' (une adresse IP spécifique) et username@['domain'] (un nom de domaine que le DNS résout en une ou plusieurs adresses IP).
Permission privilege Droit d'exécuter une opération spécifique sur un nœud, un catalogue, une base de données ou une table.
Rôle role Groupe de permissions nommé. Attribuez un rôle à un utilisateur pour lui accorder simultanément toutes les permissions associées. Toute modification des permissions d'un rôle s'applique immédiatement à tous les utilisateurs auxquels ce rôle est attribué. Les rôles personnalisés sont pris en charge.
Propriété utilisateur user_property Ensemble d'attributs rattachés à un nom d'utilisateur plutôt qu'à une identité utilisateur spécifique. Par exemple, cmy@'192.%' et cmy@['domain'] partagent les mêmes propriétés utilisateur car ils appartiennent tous deux à l'utilisateur cmy. Ces propriétés incluent notamment les limites de connexion et les paramètres du cluster d'importation par défaut.
Les propriétés utilisateur sont associées au nom d'utilisateur , et non à une identité utilisateur spécifique. Plusieurs identités partageant le même nom d'utilisateur disposent d'un ensemble unique de propriétés utilisateur.

Rôles intégrés

Lors de l'initialisation d'une instance SelectDB, le système crée automatiquement deux rôles et leurs utilisateurs correspondants.

Rôle Utilisateur par défaut Permissions Cas d'usage
operator root@'%' NODE_PRIV + ADMIN_PRIV ; connexion possible depuis n'importe quel nœud Contrôle complet du cluster, y compris la gestion des nœuds
admin admin@'%' ADMIN_PRIV ; toutes les permissions sauf la modification des nœuds Administration courante sans accès au niveau des nœuds

Vous ne pouvez ni révoquer ni modifier les permissions des rôles ou utilisateurs créés automatiquement.

Si vous avez oublié le mot de passe de l'utilisateur admin et ne parvenez plus à vous connecter à l'instance, réinitialisez-le depuis la console SelectDB. Pour plus d'informations, consultez Réinitialiser le mot de passe d'un utilisateur admin pour une instance.

Types de permissions

Important

Après avoir créé un utilisateur, servez-vous d'un compte privilégié pour lui accorder les permissions d'accès aux clusters, bases de données et tables. Pour plus d'informations sur l'octroi des permissions d'accès aux clusters, consultez Accorder à un utilisateur les permissions d'accès aux clusters.

Le tableau suivant décrit les types de permissions disponibles ainsi que les niveaux auxquels chacune peut s'appliquer.

Permission Niveaux applicables Description
GRANT_PRIV Global, Catalogue, Base de données, Table Accorde ou révoque des permissions pour les utilisateurs et les rôles. Permet également de créer, supprimer et modifier des utilisateurs et des rôles.
SELECT_PRIV Global, Catalogue, Base de données, Table Accès en lecture seule aux bases de données et aux tables.
LOAD_PRIV Global, Catalogue, Base de données, Table Accès en écriture aux bases de données et aux tables, incluant les opérations LOAD, INSERT et DELETE.
ALTER_PRIV Global, Catalogue, Base de données, Table Modification des bases de données et des tables : renommage, création ou suppression de colonnes, et gestion des partitions.
CREATE_PRIV Global, Catalogue, Base de données, Table Création de bases de données, de tables et de vues.
DROP_PRIV Global, Catalogue, Base de données, Table Suppression de bases de données, de tables et de vues.
USAGE_PRIV Ressource Utilisation des ressources.

Niveaux de permissions

Les permissions s'appliquent aux objets de données selon quatre niveaux de portée.

Niveau Notation Portée
Global *.*.* Toutes les tables de toutes les bases de données dans tous les catalogues
Catalogue ctl.*.* Toutes les bases de données et tables du catalogue spécifié
Base de données ctl.db.* Toutes les tables de la base de données spécifiée
Table ctl.db.tbl La table spécifiée dans la base de données indiquée

Les permissions sur les ressources utilisent une portée distincte (RESOURCE resource_name) et ne correspondent pas aux niveaux de données.

Référence de la syntaxe SQL

Gestion des utilisateurs et des rôles

Opération Mot-clé Syntaxe
Créer un utilisateur CREATE USER CREATE USER [IF EXISTS] user_identity [IDENTIFIED BY 'password'] [DEFAULT ROLE 'role_name'] [password_policy]
Supprimer un utilisateur DROP USER DROP USER 'user_identity'
Accorder des permissions GRANT

GRANT privilege_list ON priv_level TO user_identity [ROLE role_name]

GRANT privilege_list ON RESOURCE resource_name TO user_identity [ROLE role_name]

Révoquer des permissions REVOKE

REVOKE privilege_list ON db_name[.tbl_name] FROM user_identity [ROLE role_name]

REVOKE privilege_list ON RESOURCE resource_name FROM user_identity [ROLE role_name]

Créer un rôle CREATE ROLE CREATE ROLE rol_name;
Supprimer un rôle DROP ROLE DROP ROLE rol_name;
Consulter les permissions d'un utilisateur SHOW GRANTS SHOW [ALL] GRANTS [FOR user_identity];
Lister tous les rôles SHOW ROLES SHOW ROLES
Interroger les propriétés utilisateur SHOW PROPERTY SHOW PROPERTY [FOR user] [LIKE key]
Définir les propriétés utilisateur SET PROPERTY SET PROPERTY [FOR 'user'] 'key' = 'value' [, 'key' = 'value']

Options de politique de mot de passe

Utilisez la clause [password_policy] dans CREATE USER pour configurer les contraintes d'authentification.

Politique Valeurs valides Valeur par défaut Description
PASSWORD_HISTORY n DEFAULT 0 (désactivé)

Nombre de mots de passe précédents qui ne peuvent pas être réutilisés. 0 signifie que tout mot de passe historique est autorisé.

PASSWORD_EXPIRE DEFAULT NEVER INTERVAL n DAY/HOUR/SECOND

NEVER

Durée de validité du mot de passe avant expiration.

FAILED_LOGIN_ATTEMPTS n DEFAULT Aucune limite

Nombre maximal de tentatives de connexion échouées consécutives avant le verrouillage du compte.

PASSWORD_LOCK_TIME n DAY/HOUR/SECOND UNBOUNDED

Durée pendant laquelle le compte reste verrouillé après avoir atteint la limite de tentatives échouées.

Permissions ADMIN_PRIV et GRANT_PRIV

ADMIN_PRIV et GRANT_PRIV permettent toutes deux d'accorder des permissions à d'autres utilisateurs, mais leur portée diffère.

  • ADMIN_PRIV : Ne peut être accordée ou révoquée qu'au niveau global. Au niveau global, GRANT_PRIV équivaut à ADMIN_PRIV ; utilisez-les avec prudence.

  • GRANT_PRIV : Peut être limitée au niveau global, catalogue, base de données ou table. Un utilisateur disposant de GRANT_PRIV à un niveau donné ne peut accorder des permissions que dans cette portée.

Le tableau ci-dessous indique la permission requise pour chaque opération d'administration.

Opération Permission requise
CREATE USER ADMIN_PRIV, ou GRANT_PRIV au niveau global ou base de données
DROP USER ADMIN_PRIV, ou GRANT_PRIV au niveau global
CREATE/DROP ROLE ADMIN_PRIV, ou GRANT_PRIV au niveau global
GRANT/REVOKE (portée globale) ADMIN_PRIV, ou GRANT_PRIV au niveau global
GRANT/REVOKE (portée catalogue) GRANT_PRIV au niveau catalogue
GRANT/REVOKE (portée base de données) GRANT_PRIV au niveau base de données
GRANT/REVOKE (portée table) GRANT_PRIV au niveau table
SET PASSWORD (tout utilisateur) ADMIN_PRIV, ou GRANT_PRIV au niveau global
SET PASSWORD (propre identité) Aucune permission spéciale requise
Les utilisateurs disposant de GRANT_PRIV à un niveau non global ne peuvent pas modifier le mot de passe d'un utilisateur existant. Ils peuvent uniquement définir un mot de passe lors de la création d'un nouvel utilisateur.

Pour consulter votre identité utilisateur authentifiée actuelle, exécutez :

SELECT current_user();

Pour connaître votre identité de connexion réelle, exécutez :

SELECT user();

Toutes les permissions s'appliquent à current_user, c'est-à-dire l'identité ayant passé l'authentification.

Par exemple, si vous créez un utilisateur dont l'identité est user1@'192.%' et que user1 se connecte depuis le bloc CIDR 192.168.0.0/16, alors current_user correspond à user1@'192.%' tandis que user vaut user1@'192.168.%'. Toutes les permissions s'appliquent à l'identité current_user.

Propriétés utilisateur

Les propriétés utilisateur contrôlent les limites de ressources et le comportement associés à un nom d'utilisateur donné. Définissez-les avec SET PROPERTY et consultez-les avec SHOW PROPERTY.

Propriété Description
cpu_resource_limit Ressources CPU maximales pour les requêtes. -1 signifie illimité. Voir aussi : la variable de session cpu_resource_limit.
default_load_cluster Cluster par défaut pour l'importation de données.
exec_mem_limit Mémoire maximale allouée aux requêtes. -1 signifie illimité. Voir aussi : la variable de session exec_mem_limit.
insert_timeout Délai d'expiration pour les opérations INSERT.
max_query_instances Nombre maximal d'instances de requête que l'utilisateur peut exécuter simultanément.
max_user_connections Nombre maximal de connexions simultanées.
query_timeout Délai d'expiration des requêtes.
resource_tags Tags de ressources.
sql_block_rules Règles de blocage SQL. Les requêtes correspondant à ces règles sont rejetées.

Lorsqu'un même paramètre existe à plusieurs niveaux, le système le résout selon l'ordre suivant :

session variable > user property > global variable > default value

Exemples

Accorder un accès en lecture seule à une seule table

Créez un utilisateur et accordez-lui un accès en lecture seule à test_db.test_table.

-- Create the user, allowing login from the 172.10.0.0/16 CIDR block
CREATE USER test_user@'172.10.%' IDENTIFIED BY '123456';

-- Grant read, modify, and import permissions on the table
GRANT SELECT_PRIV, ALTER_PRIV, LOAD_PRIV ON test_db.test_table TO 'test_user'@'172.10.%';

Révoquer les permissions d'un utilisateur

REVOKE SELECT_PRIV ON test_db.* FROM 'test_user'@'172.10.%';

Déléguer des permissions via un rôle

Créez un rôle, attribuez-lui des permissions, puis assignez-le à un utilisateur.

-- Create the role
CREATE ROLE test_role;

-- Grant import permissions on all tables in test_db to the role
GRANT LOAD_PRIV ON test_db.* TO ROLE 'test_role';

-- Assign the role to a user
GRANT "test_role" TO test_user@'172.10.%';

Consulter et mettre à jour les propriétés utilisateur

-- Query all properties of a user
SHOW PROPERTY FOR 'test_user';

-- Filter by property name
SHOW PROPERTY FOR 'test_user' LIKE '%max_user_connections%';

-- Set a property
SET PROPERTY FOR 'test_user' 'max_user_connections' = '1000';

Supprimer un utilisateur ou un rôle

DROP USER 'test_user'@'172.10.%';
DROP ROLE test_role;

Consulter les permissions d'un utilisateur

SHOW GRANTS FOR test_user@'%';

Bonnes pratiques

Associer les types d'utilisateurs aux permissions

Voici un modèle courant pour les clusters multi-locataires :

Type d'utilisateur Permissions recommandées Notes
Administrateur de cluster ADMIN_PRIV ou GRANT_PRIV (global) Contrôle total, y compris la gestion des nœuds via le rôle operator
Ingénieur R&D CREATE_PRIV, DROP_PRIV, ALTER_PRIV, LOAD_PRIV, SELECT_PRIV au niveau base de données Gestion du schéma et des données pour les bases attribuées
Utilisateur standard SELECT_PRIV au niveau base de données ou table Accès en lecture seule aux données attribuées

Recourez aux rôles pour simplifier la gestion des permissions lorsque plusieurs utilisateurs partagent le même ensemble de droits.

Déléguer les droits d'octroi sans accès administrateur complet

Si chaque base de données appartient à une équipe différente, créez un utilisateur par base avec GRANT_PRIV limité à cette base. Cet utilisateur pourra ainsi accorder des permissions sur sa propre base à d'autres personnes, sans pouvoir affecter les autres bases de données.

Simuler une liste de blocage grâce à la correspondance prioritaire

SelectDB prend uniquement en charge les listes d'autorisation. Pour bloquer l'accès depuis une plage IP spécifique au sein d'une plage plus large, créez une identité utilisateur plus précise avec un mot de passe différent.

Par exemple, test_user1@'192.%' autorise la connexion depuis 192.*. Pour bloquer la plage 192.168.0.0/16, créez test_user2@'192.168.%' avec un autre mot de passe. Étant donné que 192.168.% est plus spécifique, cette règle est prioritaire : les utilisateurs provenant de cette plage doivent utiliser le nouveau mot de passe et ne peuvent pas employer l'ancien.

Remarques d'utilisation

  • ADMIN_PRIV ne peut être accordée et révoquée qu'au niveau global.

  • Au niveau global, GRANT_PRIV équivaut à ADMIN_PRIV car elle permet d'accorder toutes les permissions. Appliquez-la avec prudence.

  • Toutes les permissions s'appliquent à current_user (l'identité authentifiée), et non à l'identité de connexion réelle (user).

FAQ

Que faire si un nom de domaine entre en conflit avec une adresse IP lors de la création d'un utilisateur ?

Supprimez l'utilisateur conflictuel avec DROP USER, puis recréez-le avec l'identité correcte.

En cas de conflit entre un domaine et une IP, créez d'abord l'utilisateur avec l'identité de domaine, puis accordez les permissions au niveau du domaine :

CREATE USER test_user@['domain'];
GRANT SELECT_PRIV ON *.* TO test_user@['domain'];

Si le DNS résout le domaine en IP1 et IP2, et que vous accordez ultérieurement une permission différente à test_user@'IP1', cette identité obtient son propre jeu de permissions. Ainsi, la modification de test_user@['domain'] n'affecte pas test_user@'IP1'.

Que faire si deux identités utilisateur avec des plages IP chevauchantes entrent en conflit ?

Créez l'identité la plus spécifique. Le modèle d'hôte le plus précis est toujours prioritaire.

CREATE USER test_user@'%' IDENTIFIED BY "12345";
CREATE USER test_user@'192.%' IDENTIFIED BY "abcde";

Une tentative de connexion depuis la plage 192.168.0.0/16 correspond à 192.% (priorité supérieure). L'utilisation du mot de passe 12345 depuis cette plage sera rejetée ; utilisez plutôt abcde.

Étapes suivantes