Mongo shell adalah alat manajemen database yang disertakan dengan MongoDB. Topik ini menjelaskan cara menggunakan mongo shell untuk membuat dan menanyakan akun database di ApsaraDB for MongoDB.
Prasyarat
Anda telah membuat instans ApsaraDB for MongoDB. Untuk informasi lebih lanjut tentang cara membuat berbagai jenis instans, lihat topik-topik berikut:
Anda telah terhubung ke instans ApsaraDB for MongoDB menggunakan mongo shell. Untuk informasi lebih lanjut tentang cara terhubung ke berbagai jenis instans, lihat topik-topik berikut:
Peringatan
Akun database harus unik dalam satu database.
Buat akun database
Akun database yang dibuat menggunakan mongo shell tidak dapat ditanyakan pada halaman Account Management di Konsol ApsaraDB for MongoDB.
Saat Anda membuat akun database menggunakan mongo shell untuk pertama kalinya, Anda harus mengotentikasi akun root bawaan dari instans di database admin.
Pindah ke database admin.
use adminCatatanAnda dapat menjalankan perintah ini tanpa modifikasi.
Otentikasi akun root.
Syntax:
db.auth("root","password")Deskripsi parameter:
passwordmenentukan kata sandi akun root.Contoh:
db.auth("root","123456Aa")(Opsional) Buat peran database kustom.
Untuk membatasi akses ke koleksi tertentu, Anda dapat membuat peran database kustom guna menerapkan kontrol akses detail halus.
Beralih database: Jalankan perintah
use database_nameuntuk beralih ke database target, di manadatabase_nameadalah nama database target.Ruang lingkup peran: Peran hanya dapat digunakan di database tempat ia dibuat. Jika peran berlaku untuk beberapa database, Anda harus membuat peran tersebut di database
admin.
Sintaksis:
db.createRole({role: "role_name", privileges: [{resource: {db: "role_database_name", collection: "collection_name" }, actions: [ "actions" ] }],roles: []})Deskripsi parameter:
Parameter
Deskripsi
Contoh
role_nameNama peran baru.
readRole
role_database_nameNama database tempat peran tersebut berada.
Parameter ini menentukan bahwa peran memiliki izin operasi pada database yang ditentukan.
testDB
collection_nameNama koleksi.
testCollection
actionsJenis operasi yang diizinkan, seperti
find,insert,update, danremove.find
rolesPeran lain yang diwarisi oleh peran ini. Array kosong menunjukkan bahwa peran ini tidak mewarisi peran lain, tetapi bidang
rolesharus disertakan.[]
CatatanUntuk informasi lebih lanjut, lihat createRole.
Contoh:
Buat peran bernama readRole di database testDB dan berikan izin find pada koleksi testCollection.
db.createRole({role: "readRole",privileges: [{resource: {db: "testDB", collection: "testCollection" }, actions: [ "find" ]}],roles: []})Tanggapan sukses dikembalikan seperti yang ditunjukkan di bawah ini:
{ 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 }) }Buat Akun Database.
Metode 1: Beralih ke database target untuk membuat akun
Akun database termasuk dalam database tempat ia dibuat.
Jalankan perintah
use database_nameuntuk beralih ke database, di manadatabase_nameadalah nama database target.Syntax:
db.createUser({user: "user_name", pwd: "password", roles:[{role: "role_name", db: "role_database_name"}]})Deskripsi parameter:
Parameter
Deskripsi
Contoh
user_nameNama akun database.
Jika nama akun berisi karakter khusus, seperti
:/?#[]@, Anda harus melakukan percent-encoding pada karakter khusus tersebut. Untuk informasi tentang cara melakukan percent encoding, lihat Percent-Encoding.test
passwordKata sandi akun database.
123456Aa
role_namePeran yang diberikan kepada akun database.
Untuk informasi lebih lanjut tentang nilai-nilai valid, lihat Peran akun database.
readAnyDatabase
role_database_nameNama database tempat peran tersebut berada.
Sebagai contoh,
{role: "readAnyDatabase", db: "admin"}memberikan peran readAnyDatabase dari database admin kepada akun. Ini memberikan izin read-only pada semua database.admin
Contoh:
Buat akun database bernama test di database admin, atur kata sandi menjadi 123456Aa, dan berikan peran readAnyDatabase kepada akun test.
db.createUser({user: "test", pwd: "123456Aa", roles:[{role: "readAnyDatabase", db: "admin"}]})Tanggapan sukses dikembalikan seperti yang ditunjukkan di bawah ini:
Successfully added user: { "user" : "test", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }Metode 2: Buat akun tanpa beralih database
Anda dapat menggunakan salah satu perintah berikut untuk membuat akun database.
db.getMongo()
Syntax:
db.getMongo().getDB("database_name").createUser({user: "user_name", pwd: "password", roles: [{role: "role_name", db: "role_database_name"}]})Deskripsi parameter:
Parameter
Deskripsi
Contoh
database_nameNama database tempat akun tersebut berada.
admin
user_nameNama akun database.
Jika nama akun berisi karakter khusus, seperti
:/?#[]@, Anda harus melakukan percent-encoding pada karakter khusus tersebut. Untuk informasi tentang cara melakukan percent encoding, lihat Percent-Encoding.test
passwordKata sandi akun database.
123456Aa
role_namePeran yang diberikan kepada akun database.
Untuk informasi lebih lanjut tentang nilai-nilai valid, lihat Peran akun database.
readAnyDatabase
role_database_nameNama database tempat peran tersebut berada.
Sebagai contoh,
{role: "readAnyDatabase", db: "admin"}memberikan peran readAnyDatabase dari database admin kepada akun. Ini memberikan izin read-only pada semua database.admin
Contoh:
Buat akun database bernama test yang termasuk dalam database admin, atur kata sandi menjadi 123456Aa, dan berikan peran readAnyDatabase kepada akun test.
db.getMongo().getDB("admin").createUser({user: "test", pwd: "123456Aa", roles: [{role: "readAnyDatabase", db: "admin"}]})Tanggapan sukses dikembalikan seperti yang ditunjukkan di bawah ini:
Successfully added user: { "user" : "test", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }db.getSiblingDB()
Syntax:
db.getSiblingDB("database_name").createUser({user: "user_name", pwd: "password", roles: [{role: "role_name", db: "role_database_name"}]})Deskripsi parameter:
Parameter
Deskripsi
Contoh
database_nameNama database tempat akun tersebut berada.
admin
user_nameNama akun database.
Jika nama akun berisi karakter khusus, seperti
:/?#[]@, Anda harus melakukan percent-encoding pada karakter khusus tersebut. Untuk informasi tentang cara melakukan percent encoding, lihat Percent-Encoding.test
passwordKata sandi akun database.
123456Aa
role_namePeran yang diberikan kepada akun database.
Untuk informasi lebih lanjut mengenai nilai yang valid, lihat Peran akun database.
readAnyDatabase
role_database_nameNama database tempat peran tersebut berada.
Sebagai contoh,
{role: "readAnyDatabase", db: "admin"}memberikan peran readAnyDatabase dari database admin kepada akun. Ini memberikan izin read-only pada semua database.admin
Contoh:
Buat akun database bernama test yang termasuk dalam database admin, atur kata sandi menjadi 123456Aa, dan berikan peran readAnyDatabase kepada akun test.
db.getSiblingDB("admin").createUser({user: "test", pwd: "123456Aa", roles: [{role: "readAnyDatabase", db: "admin"}]})Tanggapan sukses dikembalikan seperti yang ditunjukkan di bawah ini:
Successfully added user: { "user" : "test", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }
Menanyakan akun database
Kueri semua akun database dari instans ApsaraDB for MongoDB
Jalankan perintah berikut di database admin:
db.getCollection("system.users").find()Anda dapat menjalankan perintah ini tanpa modifikasi.
Tanggapan ditunjukkan di bawah ini:
{ "_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" } ] }Kueri semua akun database di database target
Anda dapat menjalankan perintah use database_name untuk beralih database, di mana database_name adalah nama database target.
Metode 1: Jalankan perintah kueri di database target.
show usersCatatanAnda dapat menjalankan perintah ini tanpa modifikasi.
Tanggapan ditunjukkan di bawah ini:
{ "_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" ] }Metode 2: Jalankan perintah kueri di database admin.
Syntax:
db.getCollection("system.users").find({db: "database_name"})Deskripsi parameter:
database_namemenentukan nama database target.Contoh:
db.getCollection("system.users").find({db: "admin"})Tanggapan ditunjukkan di bawah ini:
{ "_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" } ] }
Kueri satu akun database di database target
Perintah untuk menanyakan satu akun database harus dijalankan di database admin.
Syntax:
db.getCollection("system.users").find({user: "user_name", db: "database_name"})Deskripsi parameter:
user_name: menentukan nama akun database.database_name: menentukan nama database tempat akun tersebut berada.
Contoh:
db.getCollection("system.users").find({user: "test", db: "admin"})Tanggapan ditunjukkan di bawah ini:
{ "_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" } ] }Peran akun database
Database | Peran | Deskripsi |
Semua database | readOnly | Memberikan izin read-only pada database. |
readWrite | Memberikan izin baca dan tulis pada database. | |
userAdmin | Memberikan izin untuk membuat akun dan peran di database. | |
dbAdmin | Memberikan izin untuk mengelola koleksi di database. | |
dbOwner | Mencakup semua izin dari readWrite, userAdmin, dan dbAdmin. | |
enableSharding | Memungkinkan sebuah database di instans kluster sharded didistribusikan di beberapa shard. | |
Database admin | readAnyDatabase | Memberikan izin read-only pada semua database. |
readWriteAnyDatabase | Memberikan izin baca dan tulis pada semua database. | |
userAdminAnyDatabase | Memberikan izin untuk membuat akun dan peran di semua database. | |
dbAdminAnyDatabase | Memberikan izin untuk mengelola koleksi di semua database. | |
clusterMonitor | Memberikan izin untuk menjalankan berbagai perintah untuk mengumpulkan informasi. | |
hostManager | Memberikan izin untuk menjalankan perintah seperti setParameter, killop, resync, dan killCursors. | |
clusterManager | Memberikan izin untuk menjalankan perintah manajemen node. | |
clusterAdmin | Mencakup semua izin dari clusterMonitor, hostManager, dan clusterManager. | |
root | Mencakup semua izin di database admin, seperti readAnyDatabase, readWriteAnyDatabase, userAdminAnyDatabase, dan dbAdminAnyDatabase. |
Untuk informasi lebih lanjut tentang peran, lihat Built-In Roles.