Le shell mongo est un outil de gestion de base de données inclus avec MongoDB. Utilisez le shell mongo pour créer et interroger des comptes de base de données dans ApsaraDB for MongoDB.
Prérequis
-
Une instance ApsaraDB for MongoDB est créée. Pour plus d'informations sur la création de différents types d'instances, consultez les rubriques suivantes :
-
Vous êtes connecté à l'instance ApsaraDB for MongoDB via le shell mongo. Pour plus d'informations sur la connexion aux différents types d'instances, consultez les rubriques suivantes :
Précautions
Les noms des comptes de base de données doivent être uniques au sein d'une même base de données.
Créer un compte de base de données
Les comptes de base de données créés à l'aide du shell mongo n'apparaissent pas sur la page Accounts de la console ApsaraDB for MongoDB.
Lors de la première création d'un compte de base de données via le shell mongo, vous devez authentifier le compte root intégré de l'instance dans la base de données admin.
-
Basculez vers la base de données admin.
use adminRemarqueExécutez cette commande telle quelle.
-
Authentifiez le compte root.
Syntaxe :
db.auth("root","password")Description des paramètres :
passwordcorrespond au mot de passe du compte root.Exemple :
db.auth("root","123456Aa") -
(Facultatif) Créez un rôle de base de données personnalisé.
Pour restreindre l'accès à une collection spécifique, créez un rôle de base de données personnalisé afin d'assurer un contrôle d'accès granulaire.
Changement de base de données : exécutez la commande
use database_namepour basculer vers la base de données cible, oùdatabase_namereprésente le nom de la base de données cible.Portée du rôle : un rôle n'est utilisable que dans la base de données où il a été créé. Si un rôle s'applique à plusieurs bases de données, créez-le dans la base de données
admin.
Syntaxe :
db.createRole({role: "role_name", privileges: [{resource: {db: "role_database_name", collection: "collection_name" }, actions: [ "actions" ] }],roles: []})Description des paramètres :
Parameter
Description
Example
role_nameNom du nouveau rôle.
readRole
role_database_nameBase de données sur laquelle le rôle dispose des autorisations d'opération.
testDB
collection_nameNom de la collection.
testCollection
actionsTypes d'opérations autorisés, tels que
find,insert,updateetremove.find
rolesAutres rôles hérités par ce rôle. Un tableau vide indique qu'il n'y a aucun héritage, mais le champ
rolesest obligatoire.[]
RemarquePour plus d'informations, consultez createRole.
Exemple :
Créez un rôle nommé readRole dans la base de données testDB et accordez-lui l'autorisation find sur la collection testCollection.
db.createRole({role: "readRole",privileges: [{resource: {db: "testDB", collection: "testCollection" }, actions: [ "find" ]}],roles: []})La réponse en cas de succès se présente comme suit :
{ ok: 1, '$clusterTime': { clusterTime: Timestamp({ t: 1747119397, i: 1 }), signature: { hash: Binary(Buffer.from("fde8****", "hex"), 0), keyId: Long("7503****") } }, operationTime: Timestamp({ t: 1747119397, i: 1 }) } -
Créez un compte de base de données.
Méthode 1 : Basculer vers la base de données cible pour créer un compte
Un compte de base de données appartient à la base de données dans laquelle il est créé.
Exécutez la commande
use database_namepour basculer vers une base de données, oùdatabase_namereprésente le nom de la base de données cible.Syntaxe :
db.createUser({user: "user_name", pwd: "password", roles:[{role: "role_name", db: "role_database_name"}]})Description des paramètres :
Parameter
Description
Example
user_nameNom du compte de base de données.
Si le nom du compte contient des caractères spéciaux, tels que
:/?#[]@, vous devez encoder ces caractères en pourcentage. Pour savoir comment effectuer cet encodage, consultez Percent-Encoding.test
passwordMot de passe du compte de base de données.
123456Aa
role_nameRôle à attribuer au compte de base de données.
Pour plus d'informations sur les valeurs valides, consultez Rôles des comptes de base de données.
readAnyDatabase
role_database_nameNom de la base de données à laquelle le rôle appartient.
Par exemple,
{role: "readAnyDatabase", db: "admin"}attribue le rôle readAnyDatabase de la base de données admin au compte. Cela fournit des autorisations en lecture seule sur toutes les bases de données.admin
Exemple :
Créez un compte de base de données nommé test dans la base de données admin, définissez le mot de passe sur 123456Aa et attribuez le rôle readAnyDatabase au compte test.
db.createUser({user: "test", pwd: "123456Aa", roles:[{role: "readAnyDatabase", db: "admin"}]})La réponse en cas de succès se présente comme suit :
Successfully added user: { "user" : "test", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }Méthode 2 : Créer un compte sans changer de base de données
Utilisez l'une des méthodes suivantes pour créer un compte de base de données sans changer de base de données.
db.getMongo()
Syntaxe :
db.getMongo().getDB("database_name").createUser({user: "user_name", pwd: "password", roles: [{role: "role_name", db: "role_database_name"}]})Description des paramètres :
Parameter
Description
Example
database_nameNom de la base de données à laquelle le compte appartient.
admin
user_nameNom du compte de base de données.
Si le nom du compte contient des caractères spéciaux, tels que
:/?#[]@, vous devez encoder ces caractères en pourcentage. Pour savoir comment effectuer cet encodage, consultez Percent-Encoding.test
passwordMot de passe du compte de base de données.
123456Aa
role_nameRôle à attribuer au compte de base de données.
Pour plus d'informations sur les valeurs valides, consultez Rôles des comptes de base de données.
readAnyDatabase
role_database_nameNom de la base de données à laquelle le rôle appartient.
Par exemple,
{role: "readAnyDatabase", db: "admin"}attribue le rôle readAnyDatabase de la base de données admin au compte. Cela fournit des autorisations en lecture seule sur toutes les bases de données.admin
Exemple :
Créez un compte de base de données nommé test appartenant à la base de données admin, définissez le mot de passe sur 123456Aa et attribuez le rôle readAnyDatabase au compte test.
db.getMongo().getDB("admin").createUser({user: "test", pwd: "123456Aa", roles: [{role: "readAnyDatabase", db: "admin"}]})La réponse en cas de succès se présente comme suit :
Successfully added user: { "user" : "test", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }db.getSiblingDB()
Syntaxe :
db.getSiblingDB("database_name").createUser({user: "user_name", pwd: "password", roles: [{role: "role_name", db: "role_database_name"}]})Description des paramètres :
Parameter
Description
Example
database_nameNom de la base de données à laquelle le compte appartient.
admin
user_nameNom du compte de base de données.
Si le nom du compte contient des caractères spéciaux, tels que
:/?#[]@, vous devez encoder ces caractères en pourcentage. Pour savoir comment effectuer cet encodage, consultez Percent-Encoding.test
passwordMot de passe du compte de base de données.
123456Aa
role_nameRôle à attribuer au compte de base de données.
Pour plus d'informations sur les valeurs valides, consultez Rôles des comptes de base de données.
readAnyDatabase
role_database_nameNom de la base de données à laquelle le rôle appartient.
Par exemple,
{role: "readAnyDatabase", db: "admin"}attribue le rôle readAnyDatabase de la base de données admin au compte. Cela fournit des autorisations en lecture seule sur toutes les bases de données.admin
Exemple :
Créez un compte de base de données nommé test appartenant à la base de données admin, définissez le mot de passe sur 123456Aa et attribuez le rôle readAnyDatabase au compte test.
db.getSiblingDB("admin").createUser({user: "test", pwd: "123456Aa", roles: [{role: "readAnyDatabase", db: "admin"}]})La réponse en cas de succès se présente comme suit :
Successfully added user: { "user" : "test", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }
Interroger les comptes de base de données
Interroger tous les comptes de base de données d'une instance ApsaraDB for MongoDB
Exécutez la commande suivante dans la base de données admin :
db.getCollection("system.users").find()
Exécutez cette commande telle quelle.
La réponse se présente comme suit :
{ "_id" : "admin.root", "userId" : UUID("b079b4c8-0e34-4e0d-90f9-75741414****"), "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "WeN7mJumlZKG2dvzLRDL*****", "storedKey" : "wfRUnCq55ajFwnYxf9MQJ0k****", "serverKey" : "tP70xGJ9PRZs01VSJF1YDrHg****" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "5aIQ734c2Whg2pPwfg****/mpJulsd+33rE****", "storedKey" : "otMBwA2TTwoU****+dfwccnfPN14Dy5Oq6keYOl****", "serverKey" : "VCE****+aLkXGzCqRiaPfjnFG4WFiAOq0BKXxTo0****" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
{ "_id" : "admin.test", "userId" : UUID("769ea9a1-6224-470e-8162-19a62fa2****"), "user" : "test", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "8fyXsIUgs6aQmafhTDrS****", "storedKey" : "fJQFoKsl7ll****/4vFU4xQn****", "serverKey" : "Tf1zygJ****/3/P3UMM47rr8****" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "wcWRhs9VXEsmNWtd7ZD****+NbYXx8ugJ3p2****", "storedKey" : "A5GiH****/tf70hakRY3U3joho3GrtFWQ****/WX****", "serverKey" : "ryRAcj6zomYiHJqhA9ObvuYALc3ZZva8ImR7B89C****" } }, "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }
Interroger tous les comptes de base de données dans une base de données cible
Exécutez la commande use database_name pour changer de base de données, où database_name représente le nom de la base de données cible.
-
Méthode 1 : Exécutez la commande d'interrogation dans la base de données cible.
show usersRemarqueExécutez cette commande telle quelle.
La réponse se présente comme suit :
{ "_id" : "admin.root", "userId" : UUID("b079b4c8-0e34-4e0d-90f9-75741414****"), "user" : "root", "db" : "admin", "roles" : [ { "role" : "root", "db" : "admin" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] } { "_id" : "admin.test", "userId" : UUID("769ea9a1-6224-470e-8162-19a62fa2****"), "user" : "test", "db" : "admin", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] } -
Méthode 2 : Exécutez la commande d'interrogation dans la base de données admin.
Syntaxe :
db.getCollection("system.users").find({db: "database_name"})Description des paramètres :
database_namecorrespond au nom de la base de données cible.Exemple :
db.getCollection("system.users").find({db: "admin"})La réponse se présente comme suit :
{ "_id" : "admin.root", "userId" : UUID("b079b4c8-0e34-4e0d-90f9-75741414****"), "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "WeN7mJumlZKG2dvzLRDL*****", "storedKey" : "wfRUnCq55ajFwnYxf9MQJ0k****", "serverKey" : "tP70xGJ9PRZs01VSJF1YDrHg****" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "5aIQ734c2Whg2pPwfg****/mpJulsd+33rE****", "storedKey" : "otMBwA2TTwoU****+dfwccnfPN14Dy5Oq6keYOl****", "serverKey" : "VCE****+aLkXGzCqRiaPfjnFG4WFiAOq0BKXxTo0****" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] } { "_id" : "admin.test", "userId" : UUID("769ea9a1-6224-470e-8162-19a62fa2****"), "user" : "test", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "8fyXsIUgs6aQmafhTDrS****", "storedKey" : "fJQFoKsl7ll****/4vFU4xQn****", "serverKey" : "Tf1zygJ****/3/P3UMM47rr8****" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "wcWRhs9VXEsmNWtd7ZD****+NbYXx8ugJ3p2****", "storedKey" : "A5GiH****/tf70hakRY3U3joho3GrtFWQ****/WX****", "serverKey" : "ryRAcj6zomYiHJqhA9ObvuYALc3ZZva8ImR7B89C****" } }, "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }
Interroger un seul compte de base de données dans une base de données cible
Exécutez la commande d'interrogation d'un seul compte de base de données dans la base de données admin.
Syntaxe :
db.getCollection("system.users").find({user: "user_name", db: "database_name"})
Description des paramètres :
user_name: nom du compte de base de données.database_name: nom de la base de données à laquelle le compte appartient.
Exemple :
db.getCollection("system.users").find({user: "test", db: "admin"})
La réponse se présente comme suit :
{ "_id" : "admin.test", "userId" : UUID("769ea9a1-6224-470e-8162-19a62fa2****"), "user" : "test", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "8fyXsIUgs6aQmafhTDrS****", "storedKey" : "fJQFoKsl7llXdiU/4vFU4xQn****", "serverKey" : "Tf1zygJ****/3/P3UMM47rr8****" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "wcWRhs9VXEsmNWtd7ZD****+NbYXx8ugJ3p2****", "storedKey" : "A5GiH****/tf70hakRY3U3joho3GrtFWQ****/WX****", "serverKey" : "ryRAcj6zomYiHJqhA9ObvuYALc3ZZva8ImR7B89C****" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
Rôles des comptes de base de données
|
Database |
Role |
Description |
|
All databases |
readOnly |
Accorde des autorisations en lecture seule sur la base de données. |
|
readWrite |
Accorde des autorisations en lecture et en écriture sur la base de données. |
|
|
userAdmin |
Accorde des autorisations pour créer des comptes et des rôles dans la base de données. |
|
|
dbAdmin |
Accorde des autorisations pour gérer les collections dans la base de données. |
|
|
dbOwner |
Inclut toutes les autorisations de readWrite, userAdmin et dbAdmin. |
|
|
enableSharding |
Permet à une base de données dans une instance de cluster fragmenté d'être répartie sur plusieurs shards. |
|
|
admin database |
readAnyDatabase |
Accorde des autorisations en lecture seule sur toutes les bases de données. |
|
readWriteAnyDatabase |
Accorde des autorisations en lecture et en écriture sur toutes les bases de données. |
|
|
userAdminAnyDatabase |
Accorde des autorisations pour créer des comptes et des rôles dans toutes les bases de données. |
|
|
dbAdminAnyDatabase |
Accorde des autorisations pour gérer les collections dans toutes les bases de données. |
|
|
clusterMonitor |
Accorde des autorisations pour exécuter des commandes de collecte d'informations. |
|
|
hostManager |
Accorde des autorisations pour exécuter des commandes telles que setParameter, killop, resync et killCursors. |
|
|
clusterManager |
Accorde des autorisations pour exécuter des commandes de gestion des nœuds. |
|
|
clusterAdmin |
Inclut toutes les autorisations de clusterMonitor, hostManager et clusterManager. |
|
|
root |
Inclut toutes les autorisations de la base de données admin, telles que readAnyDatabase, readWriteAnyDatabase, userAdminAnyDatabase et dbAdminAnyDatabase. |
Pour plus d'informations sur les rôles, consultez Built-In Roles.