Mongo shell adalah alat manajemen database yang disertakan dengan MongoDB. Anda dapat menggunakannya untuk membuat dan mengkueri akun database di ApsaraDB for MongoDB.
Prasyarat
-
Instans ApsaraDB for MongoDB telah dibuat. Untuk informasi selengkapnya tentang cara membuat berbagai jenis instans, lihat topik berikut:
-
Anda telah terhubung ke instans ApsaraDB for MongoDB menggunakan mongo shell. Untuk informasi selengkapnya tentang cara menghubungkan berbagai jenis instans, lihat topik berikut:
Peringatan
Akun database harus unik dalam satu database.
Create a database account
-
Akun database yang dibuat menggunakan mongo shell tidak ditampilkan pada halaman Accounts di konsol ApsaraDB for MongoDB.
-
Saat pertama kali membuat akun database menggunakan mongo shell, Anda harus mengautentikasi akun root bawaan instans di database admin.
-
Beralih ke database admin.
use adminCatatanAnda dapat menjalankan perintah ini tanpa modifikasi.
-
Autentikasi akun root.
Sintaksis:
db.auth("root","password")Deskripsi parameter:
passwordmenentukan password akun root.Contoh:
db.auth("root","123456Aa") -
(Opsional) Buat role database kustom.
Untuk membatasi akses ke koleksi tertentu, buat role database kustom guna kontrol akses detail halus.
-
Beralih database: Jalankan perintah
use database_nameuntuk beralih ke database target, di manadatabase_nameadalah nama database target. -
Cakupan role: Role hanya dapat digunakan di database tempat role tersebut dibuat. Jika role berlaku untuk beberapa database, Anda harus membuat role 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 role baru.
readRole
role_database_nameDatabase tempat role memiliki izin operasi.
testDB
collection_nameNama koleksi.
testCollection
actionsJenis operasi yang diizinkan, seperti
find,insert,update, danremove.find
rolesRole lain yang diwarisi oleh role ini. Array kosong menunjukkan tidak ada pewarisan, tetapi field
roleswajib ada.[]
CatatanUntuk informasi selengkapnya, lihat createRole.
Contoh:
Buat role 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 tampak seperti berikut:
{ 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 akun tersebut dibuat.
Jalankan perintah
use database_nameuntuk beralih ke database, di manadatabase_nameadalah nama database target.Sintaksis:
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 mengandung karakter khusus, seperti
:/?#[]@, Anda harus melakukan percent-encode terhadap karakter khusus tersebut. Untuk informasi tentang cara melakukan percent encoding, lihat Percent-Encoding.test
passwordPassword akun database.
123456Aa
role_nameRole yang diberikan kepada akun database.
Untuk informasi selengkapnya tentang nilai yang valid, lihat Roles of database accounts.
readAnyDatabase
role_database_nameNama database tempat role tersebut berada.
Sebagai contoh,
{role: "readAnyDatabase", db: "admin"}memberikan role 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 password menjadi 123456Aa, dan berikan role readAnyDatabase kepada akun test.
db.createUser({user: "test", pwd: "123456Aa", roles:[{role: "readAnyDatabase", db: "admin"}]})Tanggapan sukses tampak seperti berikut:
Successfully added user: { "user" : "test", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }Metode 2: Buat akun tanpa beralih database
Anda dapat menggunakan salah satu metode berikut untuk membuat akun database tanpa beralih database.
db.getMongo()
Sintaksis:
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 mengandung karakter khusus, seperti
:/?#[]@, Anda harus melakukan percent-encode terhadap karakter khusus tersebut. Untuk informasi tentang cara melakukan percent encoding, lihat Percent-Encoding.test
passwordPassword akun database.
123456Aa
role_nameRole yang diberikan kepada akun database.
Untuk informasi selengkapnya tentang nilai yang valid, lihat Roles of database accounts.
readAnyDatabase
role_database_nameNama database tempat role tersebut berada.
Sebagai contoh,
{role: "readAnyDatabase", db: "admin"}memberikan role 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 password menjadi 123456Aa, dan berikan role readAnyDatabase kepada akun test.
db.getMongo().getDB("admin").createUser({user: "test", pwd: "123456Aa", roles: [{role: "readAnyDatabase", db: "admin"}]})Tanggapan sukses tampak seperti berikut:
Successfully added user: { "user" : "test", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }db.getSiblingDB()
Sintaksis:
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 mengandung karakter khusus, seperti
:/?#[]@, Anda harus melakukan percent-encode terhadap karakter khusus tersebut. Untuk informasi tentang cara melakukan percent encoding, lihat Percent-Encoding.test
passwordPassword akun database.
123456Aa
role_nameRole yang diberikan kepada akun database.
Untuk informasi selengkapnya tentang nilai yang valid, lihat Roles of database accounts.
readAnyDatabase
role_database_nameNama database tempat role tersebut berada.
Sebagai contoh,
{role: "readAnyDatabase", db: "admin"}memberikan role 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 password menjadi 123456Aa, dan berikan role readAnyDatabase kepada akun test.
db.getSiblingDB("admin").createUser({user: "test", pwd: "123456Aa", roles: [{role: "readAnyDatabase", db: "admin"}]})Tanggapan sukses tampak seperti berikut:
Successfully added user: { "user" : "test", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }
Query database accounts
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 tampak seperti berikut:
{ "_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 tampak seperti berikut:
{ "_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.
Sintaksis:
db.getCollection("system.users").find({db: "database_name"})Deskripsi parameter:
database_namemenentukan nama database target.Contoh:
db.getCollection("system.users").find({db: "admin"})Tanggapan tampak seperti berikut:
{ "_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 mengkueri satu akun database harus dijalankan di database admin.
Sintaksis:
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 tampak seperti berikut:
{ "_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" } ] }
Roles of database accounts
|
Database |
Role |
Deskripsi |
|
All databases |
readOnly |
Memberikan izin read-only pada database. |
|
readWrite |
Memberikan izin baca dan tulis pada database. |
|
|
userAdmin |
Memberikan izin untuk membuat akun dan role di database. |
|
|
dbAdmin |
Memberikan izin untuk mengelola koleksi di database. |
|
|
dbOwner |
Mencakup semua izin readWrite, userAdmin, dan dbAdmin. |
|
|
enableSharding |
Memungkinkan database di instans kluster sharded untuk di-shard di beberapa shard. |
|
|
admin database |
readAnyDatabase |
Memberikan izin read-only pada semua database. |
|
readWriteAnyDatabase |
Memberikan izin baca dan tulis pada semua database. |
|
|
userAdminAnyDatabase |
Memberikan izin untuk membuat akun dan role di semua database. |
|
|
dbAdminAnyDatabase |
Memberikan izin untuk mengelola koleksi di semua database. |
|
|
clusterMonitor |
Memberikan izin untuk menjalankan perintah pengumpulan 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 clusterMonitor, hostManager, dan clusterManager. |
|
|
root |
Mencakup semua izin di database admin, seperti readAnyDatabase, readWriteAnyDatabase, userAdminAnyDatabase, dan dbAdminAnyDatabase. |
Untuk informasi selengkapnya tentang role, lihat Built-In Roles.