Le système de comptes et d'autorisations de PolarDB-X est compatible avec MySQL et prend en charge des instructions telles que GRANT, REVOKE, SHOW GRANTS, CREATE USER, DROP USER et SET PASSWORD.
Comptes
Account Permissions
Un compte est identifié par une combinaison d'un nom d'utilisateur et d'un nom d'hôte, au format username@'host'. Les comptes partageant le même nom d'utilisateur mais possédant des noms d'hôte différents sont distincts. Par exemple, lily@30.9.73.96 et lily@30.9.73.100 constituent deux comptes séparés, susceptibles d'avoir des mots de passe et des autorisations différents.
Lorsque vous créez une base de données dans la console PolarDB-X, le système génère automatiquement deux comptes système pour cette base : un compte administrateur et un compte en lecture seule. Il est impossible de supprimer ces comptes intégrés ou de modifier leurs autorisations.
Le nom du compte administrateur correspond exactement au nom de la base de données. Par exemple, si la base de données s'appelle
easydb, le compte administrateur porte également le nomeasydb.Le nom du compte en lecture seule correspond au nom de la base de données suivi du suffixe
_RO. Ainsi, pour une base nomméeeasydb, le compte en lecture seule sera nomméeasydb_RO.
À titre d'exemple, si vous disposez de deux bases de données, dreamdb et andordb, la base dreamdb possède un compte administrateur nommé dreamdb et un compte en lecture seule nommé dreamdb_RO. De son côté, la base andordb dispose d'un compte administrateur appelé andordb et d'un compte en lecture seule intitulé andordb_RO.
Les comptes créés à l'aide de l'instruction CREATE USER dans PolarDB-X existent uniquement au sein de PolarDB-X. Ils ne sont pas liés à ApsaraDB RDS et ne sont pas synchronisés avec les instances ApsaraDB RDS backend.
Règles relatives aux comptes
Un compte administrateur détient toutes les autorisations.
Seul un compte administrateur peut créer d'autres comptes et accorder des autorisations.
Un compte administrateur est associé à une base de données spécifique et ne possède aucune autorisation sur les autres bases. Lors de la connexion, ce compte ne peut accéder qu'à sa base associée. Il ne peut pas octroyer d'autorisations pour d'autres bases. Par exemple, le compte administrateur de
easydbne peut se connecter qu'à la baseeasydbet ne peut accorder des autorisations que sur cette baseeasydbou ses tables.Un compte en lecture seule dispose uniquement de l'autorisation SELECT.
Conventions de nommage
Les noms d'utilisateur sont sensibles à la casse.
Ils doivent contenir entre 4 et 20 caractères.
Ils doivent commencer par une lettre.
Ils peuvent inclure des lettres majuscules, des lettres minuscules et des chiffres.
Règles relatives aux mots de passe
Ils doivent contenir entre 6 et 20 caractères.
Ils peuvent inclure des lettres majuscules, des lettres minuscules, des chiffres et les caractères spéciaux suivants : @#$%^&+=.
Règles de correspondance des hôtes
L'hôte doit être une adresse IP. Vous pouvez utiliser les jokers
_et%. Le joker_correspond à un seul caractère, tandis que le joker%correspond à zéro ou plusieurs caractères. Un hôte contenant un joker doit être entouré de guillemets simples ('), par exemplelily@'30.9.%.%'oudavid@'%'.Si une tentative de connexion correspond à deux comptes, le compte dont le préfixe d'adresse IP correspondante est le plus long est prioritaire. Le préfixe correspond à la partie de l'adresse IP située avant tout joker. Par exemple, si le système contient deux comptes,
david@'30.9.12_.xxx'etdavid@'30.9.1%.234', une tentative de connexion par l'utilisateurdaviddepuis l'hôte30.9.127.xxxutilisera le comptedavid@'30.9.12_.xxx'.-
Lorsque le VPC est activé, l'adresse IP de l'hôte change.
ImportantPour éviter que les configurations de compte et d'autorisations ne deviennent invalides, définissez HOST sur '%' afin de correspondre à n'importe quelle adresse IP.
Autorisations
Niveaux d'autorisation
Niveau base de données (pris en charge)
Niveau table (pris en charge)
Niveau global (non encore pris en charge)
Niveau colonne (non encore pris en charge)
Niveau sous-programme (non encore pris en charge)
Autorisations prises en charge
PolarDB-X prend en charge huit autorisations de base au niveau des tables : CREATE, DROP, ALTER, INDEX, INSERT, DELETE, UPDATE et SELECT.
L'instruction TRUNCATE nécessite l'autorisation DROP sur la table.
L'instruction REPLACE requiert les autorisations INSERT et DELETE sur la table.
Les instructions CREATE INDEX et DROP INDEX exigent l'autorisation INDEX sur la table.
L'instruction CREATE SEQUENCE nécessite l'autorisation
CREATEau niveau de la base de données.L'instruction DROP SEQUENCE requiert l'autorisation
DROPau niveau de la base de données.L'instruction ALTER SEQUENCE exige l'autorisation
ALTERau niveau de la base de données.L'instruction INSERT ON DUPLICATE UPDATE nécessite à la fois les autorisations INSERT et UPDATE sur la table.
Règles relatives aux autorisations
Les autorisations sont liées à un compte (
username@'host'), et non simplement à un nom d'utilisateur.Lors de l'octroi d'une autorisation, le système vérifie l'existence de la table spécifiée. Si celle-ci n'existe pas, une erreur est renvoyée.
Les niveaux d'autorisation sont hiérarchiques, du plus élevé au plus faible : niveau global (non encore pris en charge), niveau base de données, niveau table et niveau colonne.
L'octroi d'une autorisation de niveau supérieur remplace toute autorisation de niveau inférieur. La révocation d'une autorisation de niveau supérieur entraîne également la révocation des autorisations de niveau inférieur qui lui sont associées.
L'autorisation USAGE n'est pas prise en charge.
Octroi d'autorisations sur plusieurs bases de données
Dans PolarDB-X 5.3.6 et versions ultérieures, vous pouvez accorder des autorisations sur plusieurs bases de données à un seul compte :
Sur la page Account Management de la console Alibaba Cloud PolarDB-X, créez un compte et accordez-lui des autorisations. Cette méthode est recommandée.
-
Vous pouvez également utiliser les instructions SQL
CREATE USERetGRANT.RemarqueSi vous utilisez des instructions SQL, tenez compte des points suivants :
Seul un compte administrateur peut créer des utilisateurs et accorder des autorisations.
Un administrateur ne peut accorder des autorisations que sur la base de données qu'il gère. Par exemple, si l'administrateur de la base A crée un compte
new_user@'%'et que vous souhaitez que ce compte accède aux bases A et B, l'administrateur de A doit accorder les autorisations pour A, tandis que l'administrateur de B doit accorder celles pour B.
Utilisation d'un compte multi-bases
Dans PolarDB-X 5.3.6 et versions ultérieures, vous pouvez accorder à un compte des autorisations sur plusieurs bases de données. Supposons qu'un compte tel que new_user@'%' dispose des autorisations SELECT et INSERT sur les bases A et B. Les limitations suivantes s'appliquent :
Pour interroger une table de la base B alors que vous êtes connecté à la base A, vous devez d'abord changer de base en exécutant
USE B; SELECT * FROM table_in_B;. Les requêtes inter-bases telles queSELECT * FROM B.table_in_B;ne sont pas prises en charge.Pour insérer des données dans une table de la base B alors que vous êtes connecté à la base A, vous devez exécuter
USE B; INSERT INTO table_in_B VALUES('value');. Les insertions inter-bases telles queINSERT INTO B.table_in_B VALUES('value');ne sont pas prises en charge.Le même principe s'applique aux autres instructions SQL.
Instructions
Créer un compte (CREATE USER)
-
Syntaxe
CREATE USER user_specification [, user_specification] ... user_specification: user [ auth_option ] auth_option: IDENTIFIED BY 'auth#string' -
Exemples
-
Créez un compte nommé
lilyavec le mot de passe123456. Ce compte ne peut se connecter que depuis l'hôte 30.9.73.96.CREATE USER lily@30.9.73.96 IDENTIFIED BY '123456'; -
Créez un compte nommé
davidpouvant se connecter depuis n'importe quel hôte. Ce compte ne possède pas de mot de passe.CREATE USER david@'%';
-
Supprimer un compte (DROP USER)
-
Syntaxe
DROP USER user [, user] ... -
Exemple
Supprimez le compte
lily@30.9.73.96:DROP USER lily@30.9.73.96;
Modifier le mot de passe d'un compte (SET PASSWORD)
-
Syntaxe
SET PASSWORD FOR user = password_option password_option: { PASSWORD('auth_string') } -
Exemple
Modifiez le mot de passe du compte
lily@30.9.73.96pour le définir sur123456.SET PASSWORD FOR lily@30.9.73.96 = PASSWORD('123456')
Accorder des autorisations à un compte (GRANT)
-
Syntaxe
GRANT priv_type[, priv_type] ... ON priv_level TO user_specification [, user_specification] ... [WITH GRANT OPTION] priv_level: { | db_name.* | db_name.tbl_name | tbl_name } user_specification: user [ auth_option ] auth_option: { IDENTIFIED BY 'auth#string' }RemarqueSi le compte mentionné dans une instruction
GRANTn'existe pas, l'instruction échoue, sauf si vous incluez une clauseIDENTIFIED BY. Si une clauseIDENTIFIED BYest fournie, le système crée le compte et accorde les autorisations spécifiées. -
Exemples
-
Pour la base de données
easydb, créez un compte nommédavidpouvant se connecter depuis n'importe quel hôte et disposant de toutes les autorisations sur la base.# Method 1: Create the account, then grant permissions. CREATE USER david@'%' IDENTIFIED BY 'your#password'; GRANT ALL PRIVILEGES ON easydb.* to david@'%'; # Method 2: Create the account and grant permissions in a single statement. GRANT ALL PRIVILEGES ON easydb.* to david@'%' IDENTIFIED BY 'your#password'; -
Pour la base de données
easydb, créez un compte nomméhansonpouvant se connecter depuis n'importe quel hôte et disposant de toutes les autorisations sur la tableeasydb.employees.GRANT ALL PRIVILEGES ON easydb.employees to hanson@'%' IDENTIFIED BY 'your#password'; -
Pour la base de données
easydb, créez un compte nomméhansonne pouvant se connecter que depuis l'hôte 192.168.3.10 et disposant des autorisations INSERT et SELECT sur la tableeasydb.emp.GRANT INSERT,SELECT ON easydb.emp to hanson@'192.168.3.10' IDENTIFIED BY 'your#password'; -
Pour la base de données
easydb, créez un compte en lecture seule nomméactropouvant se connecter depuis n'importe quel hôte.GRANT SELECT ON easydb.* to actro@'%' IDENTIFIED BY 'your#password';
-
Révoquer des autorisations (REVOKE)
-
Syntaxe
-
Révoque des autorisations spécifiques d'un compte au niveau d'autorisation spécifié par
priv_level.REVOKE priv_type [, priv_type] ... ON priv_level -
Révoque toutes les autorisations au niveau de la base de données et de la table d'un utilisateur.
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
-
-
Exemples
-
Révoquez les autorisations CREATE, DROP et INDEX sur la table
easydb.empdu comptehanson@'%'.REVOKE CREATE,DROP,INDEX ON easydb.emp FROM hanson@'%'; -
Révoquez toutes les autorisations du compte
lily@30.9.73.96.REVOKE ALL PRIVILEGES,GRANT OPTION FROM lily@30.9.73.96;RemarquePour assurer la compatibilité avec MySQL, vous devez inclure la clause
GRANT OPTION.
-
Afficher les autorisations (SHOW GRANTS)
-
Syntaxe
SHOW GRANTS[ FOR user@host]; -
Exemple
SHOW GRANTS FOR user1@host;
Dans PolarDB-X 5.3.6 et versions ultérieures, l'instruction SHOW GRANTS affiche uniquement les autorisations de l'utilisateur actuel. Pour consulter les informations sur tous les comptes et autorisations, utilisez la console Alibaba Cloud PolarDB-X.