mongo kabuğu, MongoDB ile birlikte sunulan bir veritabanı yönetim aracıdır. ApsaraDB for MongoDB'de veritabanı hesapları oluşturmak ve sorgulamak için mongo kabuğunu kullanabilirsiniz.
Ön koşullar
-
Bir ApsaraDB for MongoDB örneği oluşturulmuş olmalıdır. Farklı türde örneklerin nasıl oluşturulacağı hakkında daha fazla bilgi için aşağıdaki konulara bakın:
-
mongo kabuğunu kullanarak ApsaraDB for MongoDB örneğine bağlanmış olmalısınız. Farklı türde örneklere nasıl bağlanılacağı hakkında daha fazla bilgi için aşağıdaki konulara bakın:
Dikkat edilmesi gerekenler
Veritabanı hesapları, bir veritabanı içinde benzersiz olmalıdır.
Veritabanı hesabı oluşturun
mongo kabuğu kullanılarak oluşturulan veritabanı hesapları, ApsaraDB for MongoDB konsolundaki Accounts sayfasında görüntülenmez.
mongo kabuğunu kullanarak ilk kez bir veritabanı hesabı oluşturduğunuzda, admin veritabanındaki yerleşik root hesabının kimliğini doğrulamanız gerekir.
-
admin veritabanına geçin.
use adminNotBu komutu değiştirmeden çalıştırabilirsiniz.
-
root hesabının kimliğini doğrulayın.
Sözdizimi:
db.auth("root","password")Parametre açıklaması:
passwordroot hesabının şifresini belirtir.Örnek:
db.auth("root","123456Aa") -
(İsteğe bağlı) Özel bir veritabanı rolü oluşturun.
Belirli bir koleksiyona erişimi kısıtlamak için ayrıntılı erişim kontrolü sağlayan özel bir veritabanı rolü oluşturun.
Veritabanı değiştirme: Hedef veritabanına geçmek için
use database_namekomutunu çalıştırın; buradadatabase_namehedef veritabanının adıdır.Rol kapsamı: Bir rol yalnızca oluşturulduğu veritabanında kullanılabilir. Bir rol birden fazla veritabanı için geçerliyse, rolü
adminveritabanında oluşturmanız gerekir.
Sözdizimi:
db.createRole({role: "role_name", privileges: [{resource: {db: "role_database_name", collection: "collection_name" }, actions: [ "actions" ] }],roles: []})Parametre açıklaması:
Parameter
Description
Examplerole_name
Yeni rolün adı.
readRolerole_database_name
Rolün işlem izinlerine sahip olduğu veritabanı.
testDBcollection_name
Koleksiyonun adı.
testCollectionactions
İzin verilen işlem türleri; örneğinfind,insert,updateveremove.
findroles
Bu rolün devraldığı diğer roller. Boş bir dizi, devralma olmadığını gösterir ancakrolesalanı gereklidir.
[]NotDaha fazla bilgi için bkz. createRole.
Örnek:
testDB veritabanında readRole adında bir rol oluşturun ve bu role testCollection koleksiyonu üzerinde find izni verin.
db.createRole({role: "readRole",privileges: [{resource: {db: "testDB", collection: "testCollection" }, actions: [ "find" ]}],roles: []})Başarılı bir yanıt aşağıdaki gibi görünür:
{ 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 }) } -
Bir veritabanı hesabı oluşturun.
Yöntem 1: Hesap oluşturmak için hedef veritabanına geçin
Bir veritabanı hesabı, oluşturulduğu veritabanına aittir.
Bir veritabanına geçmek için
use database_namekomutunu çalıştırın; buradadatabase_namehedef veritabanının adıdır.Sözdizimi:
db.createUser({user: "user_name", pwd: "password", roles:[{role: "role_name", db: "role_database_name"}]})Parametre açıklaması:
Parameter
Description
Example
user_nameVeritabanı hesabının adı.
Hesap adı :/?#[]@ gibi özel karakterler içeriyorsa, bu karakterleri yüzde kodlamasıyla (percent-encoding) kodlamanız gerekir. Yüzde kodlamasının nasıl yapılacağı hakkında bilgi için bkz. Percent-Encoding.
test
passwordVeritabanı hesabının şifresi.
123456Aa
role_nameVeritabanı hesabına atanacak rol.
Geçerli değerler hakkında daha fazla bilgi için bkz. Veritabanı hesaplarının rolleri.
readAnyDatabase
role_database_nameRolün ait olduğu veritabanının adı.
Örneğin,
{role: "readAnyDatabase", db: "admin"}ifadesi hesaba admin veritabanının readAnyDatabase rolünü atar. Bu, tüm veritabanlarında salt okunur izinler sağlar.admin
Örnek:
admin veritabanında test adında bir veritabanı hesabı oluşturun, şifreyi 123456Aa olarak ayarlayın ve test hesabına readAnyDatabase rolünü atayın.
db.createUser({user: "test", pwd: "123456Aa", roles:[{role: "readAnyDatabase", db: "admin"}]})Başarılı bir yanıt aşağıdaki gibi görünür:
Successfully added user: { "user" : "test", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }Yöntem 2: Veritabanı değiştirmeden hesap oluşturun
Veritabanı değiştirmeden bir veritabanı hesabı oluşturmak için aşağıdaki yöntemlerden birini kullanabilirsiniz.
db.getMongo()
Sözdizimi:
db.getMongo().getDB("database_name").createUser({user: "user_name", pwd: "password", roles: [{role: "role_name", db: "role_database_name"}]})Parametre açıklaması:
Parameter
Description
Exampledatabase_name
Hesabın ait olduğu veritabanının adı.
adminuser_nameVeritabanı hesabının adı.
Hesap adı
:/?#[]@gibi özel karakterler içeriyorsa, bu karakterleri yüzde kodlamasıyla (percent-encoding) kodlamanız gerekir. Yüzde kodlamasının nasıl yapılacağı hakkında bilgi için bkz. Percent-Encoding.
testpassword
Veritabanı hesabının şifresi.
123456Aarole_nameVeritabanı hesabına atanacak rol.
Geçerli değerler hakkında daha fazla bilgi için bkz. Veritabanı hesaplarının rolleri.
readAnyDatabaserole_database_nameRolün ait olduğu veritabanının adı.
Örneğin,
{role: "readAnyDatabase", db: "admin"}ifadesi hesaba admin veritabanının readAnyDatabase rolünü atar. Bu, tüm veritabanlarında salt okunur izinler sağlar.
adminÖrnek:
admin veritabanına ait olan test adında bir veritabanı hesabı oluşturun, şifreyi 123456Aa olarak ayarlayın ve test hesabına readAnyDatabase rolünü atayın.
db.getMongo().getDB("admin").createUser({user: "test", pwd: "123456Aa", roles: [{role: "readAnyDatabase", db: "admin"}]})Başarılı bir yanıt aşağıdaki gibi görünür:
Successfully added user: { "user" : "test", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }db.getSiblingDB()
Sözdizimi:
db.getSiblingDB("database_name").createUser({user: "user_name", pwd: "password", roles: [{role: "role_name", db: "role_database_name"}]})Parametre açıklaması:
Parameter
Description
Exampledatabase_name
Hesabın ait olduğu veritabanının adı.
adminuser_nameVeritabanı hesabının adı.
Hesap adı
:/?#[]@gibi özel karakterler içeriyorsa, bu karakterleri yüzde kodlamasıyla (percent-encoding) kodlamanız gerekir. Yüzde kodlamasının nasıl yapılacağı hakkında bilgi için bkz. Percent-Encoding.
testpassword
Veritabanı hesabının şifresi.
123456Aarole_nameVeritabanı hesabına atanacak rol.
Geçerli değerler hakkında daha fazla bilgi için bkz. Veritabanı hesaplarının rolleri.
readAnyDatabaserole_database_nameRolün ait olduğu veritabanının adı.
Örneğin,
{role: "readAnyDatabase", db: "admin"}ifadesi hesaba admin veritabanının readAnyDatabase rolünü atar. Bu, tüm veritabanlarında salt okunur izinler sağlar.
adminÖrnek:
admin veritabanına ait olan test adında bir veritabanı hesabı oluşturun, şifreyi 123456Aa olarak ayarlayın ve test hesabına readAnyDatabase rolünü atayın.
db.getSiblingDB("admin").createUser({user: "test", pwd: "123456Aa", roles: [{role: "readAnyDatabase", db: "admin"}]})Başarılı bir yanıt aşağıdaki gibi görünür:
Successfully added user: { "user" : "test", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }
Veritabanı hesaplarını sorgulayın
Bir ApsaraDB for MongoDB örneğindeki tüm veritabanı hesaplarını sorgulayın
admin veritabanında aşağıdaki komutu çalıştırın:
db.getCollection("system.users").find()
Bu komutu değiştirmeden çalıştırabilirsiniz.
Yanıt aşağıdaki gibi görünür:
{ "_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" } ] }
Hedef veritabanındaki tüm veritabanı hesaplarını sorgulayın
Veritabanı değiştirmek için use database_name komutunu çalıştırabilirsiniz; burada database_name hedef veritabanının adıdır.
-
Yöntem 1: Sorgu komutunu hedef veritabanında çalıştırın.
show usersNotBu komutu değiştirmeden çalıştırabilirsiniz.
Yanıt aşağıdaki gibi görünür:
{ "_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" ] } -
Yöntem 2: Sorgu komutunu admin veritabanında çalıştırın.
Sözdizimi:
db.getCollection("system.users").find({db: "database_name"})Parametre açıklaması:
database_namehedef veritabanının adını belirtir.Örnek:
db.getCollection("system.users").find({db: "admin"})Yanıt aşağıdaki gibi görünür:
{ "_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" } ] }
Hedef veritabanındaki tek bir veritabanı hesabını sorgulayın
Tek bir veritabanı hesabını sorgulama komutu admin veritabanında çalıştırılmalıdır.
Sözdizimi:
db.getCollection("system.users").find({user: "user_name", db: "database_name"})
Parametre açıklaması:
user_name: Veritabanı hesabının adını belirtir.database_name: Hesabın ait olduğu veritabanının adını belirtir.
Örnek:
db.getCollection("system.users").find({user: "test", db: "admin"})
Yanıt aşağıdaki gibi görünür:
{ "_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" } ] }
Veritabanı hesaplarının rolleri
|
Database |
Role |
Description |
|
Tüm veritabanları |
readOnly |
Veritabanında salt okunur izinler verir. |
|
readWrite |
Veritabanında okuma ve yazma izinleri verir. |
|
|
userAdmin |
Veritabanında hesaplar ve roller oluşturma izinleri verir. |
|
|
dbAdmin |
Veritabanındaki koleksiyonları yönetme izinleri verir. |
|
|
dbOwner |
readWrite, userAdmin ve dbAdmin'in tüm izinlerini içerir. |
|
|
enableSharding |
Parçalanmış küme örneğindeki bir veritabanının birden fazla parça arasında parçalanmasına olanak tanır. |
|
|
admin veritabanı |
readAnyDatabase |
Tüm veritabanlarında salt okunur izinler verir. |
|
readWriteAnyDatabase |
Tüm veritabanlarında okuma ve yazma izinleri verir. |
|
|
userAdminAnyDatabase |
Tüm veritabanlarında hesaplar ve roller oluşturma izinleri verir. |
|
|
dbAdminAnyDatabase |
Tüm veritabanlarında koleksiyonları yönetme izinleri verir. |
|
|
clusterMonitor |
Bilgi toplama komutlarını çalıştırma izinleri verir. |
|
|
hostManager |
setParameter, killop, resync ve killCursors gibi komutları çalıştırma izinleri verir. |
|
|
clusterManager |
Düğüm yönetimi komutlarını çalıştırma izinleri verir. |
|
|
clusterAdmin |
clusterMonitor, hostManager ve clusterManager'in tüm izinlerini içerir. |
|
|
root |
readAnyDatabase, readWriteAnyDatabase, userAdminAnyDatabase ve dbAdminAnyDatabase gibi admin veritabanındaki tüm izinleri içerir. |
Roller hakkında daha fazla bilgi için bkz. Built-In Roles.