Mongo Shell是MongoDB內建的資料庫管理工具。ApsaraDB for MongoDB支援通過Mongo Shell管理資料庫帳號。本文介紹如何通過Mongo Shell建立和查詢資料庫帳號。
前提條件
已建立ApsaraDB for MongoDB執行個體。不同類型執行個體的建立方法如下:
已通過Mongo Shell成功串連ApsaraDB for MongoDB執行個體。不同類型執行個體的串連方法如下:
注意事項
同一資料庫的資料庫帳號不允許重複。
建立資料庫帳號
資料庫帳號建立後不支援在ApsaraDB for MongoDB控制台的帳號管理頁面查詢。
首次通過Mongo Shell建立資料庫帳號時,需要在admin資料庫下對執行個體固有的root帳號進行認證。
切換到admin資料庫。
use admin
說明該命令可以直接複製執行,無需修改。
認證root帳號。
文法:
db.auth("root","password")
參數說明:
password
為root帳號的密碼。樣本:
db.auth("root","123456Aa")
建立資料庫帳號。
方式一:切換到目標資料庫,建立資料庫帳號。
在哪個資料庫建立的資料庫帳號,該資料庫帳號就屬於哪個資料庫。您可以通過
use database_name
命令切換資料庫,其中database_name
為目標資料庫的名稱。文法:
db.createUser({user: "user_name", pwd: "password", roles:[{role: "role_name", db: "role_database_name"}]})
參數說明:
參數
描述
樣本值
user_name
資料庫帳號的名稱。
若帳號名稱中包含
:/?#[]@
特殊字元,需要對特殊字元進行百分比編碼。如何編碼,請參見百分比編碼。test
password
資料庫帳號的密碼。
123456Aa
role_name
授予資料庫帳號的角色。
角色取值,請參見資料庫帳號的角色說明。
readAnyDatabase
role_database_name
角色所屬的資料庫名稱。
例如,
{role: "readAnyDatabase", db: "admin"}
表示授予該帳號admin資料庫的readAnyDatabase角色,對所有資料庫具有隻讀許可權。admin
樣本:
在admin資料庫中,建立資料庫帳號test,密碼為123456Aa,並授予test帳號readAnyDatabase角色。
db.createUser({user: "test", pwd: "123456Aa", roles:[{role: "readAnyDatabase", db: "admin"}]})
建立成功的返回結果如下:
Successfully added user: { "user" : "test", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }
方式二:無需切換資料庫,建立資料庫帳號。
您可以使用以下任意一種命令建立資料庫帳號。
命令一:
文法:
db.getMongo().getDB("database_name").createUser({user: "user_name", pwd: "password", roles: [{role: "role_name", db: "role_database_name"}]})
參數說明:
參數
描述
樣本值
database_name
資料庫帳號所屬的資料庫名稱。
admin
user_name
資料庫帳號的名稱。
若帳號名稱中包含
:/?#[]@
特殊字元,需要對特殊字元進行百分比編碼。如何編碼,請參見百分比編碼。test
password
資料庫帳號的密碼。
123456Aa
role_name
授予資料庫帳號的角色。
角色取值,請參見資料庫帳號的角色說明。
readAnyDatabase
role_database_name
角色所屬的資料庫名稱。
例如,
{role: "readAnyDatabase", db: "admin"}
表示授予該帳號admin資料庫的readAnyDatabase角色,對所有資料庫具有隻讀許可權。admin
樣本:
建立屬於admin資料庫的資料庫帳號test,密碼為123456Aa,並授予test帳號readAnyDatabase角色。
db.getMongo().getDB("admin").createUser({user: "test", pwd: "123456Aa", roles: [{role: "readAnyDatabase", db: "admin"}]})
建立成功的返回結果如下:
Successfully added user: { "user" : "test", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }
命令二:
文法:
db.getSiblingDB("database_name").createUser({user: "user_name", pwd: "password", roles: [{role: "role_name", db: "role_database_name"}]})
參數說明:
參數
描述
樣本值
database_name
資料庫帳號所屬的資料庫名稱。
admin
user_name
資料庫帳號的名稱。
若帳號名稱中包含
:/?#[]@
特殊字元,需要對特殊字元進行百分比編碼。如何編碼,請參見百分比編碼。test
password
資料庫帳號的密碼。
123456Aa
role_name
授予資料庫帳號的角色。
角色取值,請參見資料庫帳號的角色說明。
readAnyDatabase
role_database_name
角色所屬的資料庫名稱。
例如,
{role: "readAnyDatabase", db: "admin"}
表示授予該帳號admin資料庫的readAnyDatabase角色,對所有資料庫具有隻讀許可權。admin
樣本:
建立屬於admin資料庫的資料庫帳號test,密碼為123456Aa,並授予test帳號readAnyDatabase角色。
db.getSiblingDB("admin").createUser({user: "test", pwd: "123456Aa", roles: [{role: "readAnyDatabase", db: "admin"}]})
建立成功的返回結果如下:
Successfully added user: { "user" : "test", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }
查詢資料庫帳號
查詢ApsaraDB for MongoDB執行個體的所有資料庫帳號
在admin資料庫執行如下命令:
db.getCollection("system.users").find()
該命令可以直接複製執行,無需修改。
返回結果如下:
{ "_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" } ] }
查詢目標資料庫的所有資料庫帳號
您可以通過use database_name
命令切換資料庫,其中database_name
為目標資料庫的名稱。
方式一:在目標資料庫執行查詢命令。
show users
說明該命令可以直接複製執行,無需修改。
返回結果如下:
{ "_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" ] }
方式二:在admin資料庫執行查詢命令。
文法:
db.getCollection("system.users").find({db: "database_name"})
參數說明:
database_name
為目標資料庫的名稱。樣本:
db.getCollection("system.users").find({db: "admin"})
返回結果如下:
{ "_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" } ] }
查詢目標資料庫的單個資料庫帳號
查詢單個資料庫帳號的命令需在admin資料庫執行。
文法:
db.getCollection("system.users").find({user: "user_name", db: "database_name"})
參數說明:
user_name
:資料庫帳號的名稱。database_name
:資料庫帳號所屬的資料庫名稱。
樣本:
db.getCollection("system.users").find({user: "test", 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" : "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" } ] }
資料庫帳號的角色說明
所屬資料庫 | 角色 | 角色說明 |
所有資料庫 | readOnly | 對所屬資料庫的唯讀許可權。 |
readWrite | 對所屬資料庫的讀寫權限。 | |
userAdmin | 在所屬資料庫下建立帳號和角色的許可權。 | |
dbAdmin | 在所屬資料庫下管理資料集合的許可權。 | |
dbOwner | 包含readWrite、userAdmin和dbAdmin的所有許可權。 | |
enableSharding | 允許分區叢集執行個體的資料庫在多個Shard節點上分布。 | |
admin資料庫 | readAnyDatabase | 對所有資料庫的唯讀許可權。 |
readWriteAnyDatabase | 對所有資料庫的讀寫權限。 | |
userAdminAnyDatabase | 在所有資料庫下建立帳號和角色的許可權。 | |
dbAdminAnyDatabase | 在所有資料庫下管理資料集合的許可權。 | |
clusterMonitor | 執行各種採集資訊指令的許可權。 | |
hostManager | 執行setParameter、killop、resync和killCursors等指令的許可權。 | |
clusterManager | 執行節點管理指令的許可權。 | |
clusterAdmin | 包含clusterMonitor、hostManager和clusterManager的所有許可權。 | |
root | 包含admin資料庫下的所有許可權,包括readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase和dbAdminAnyDatabase等。 |
角色說明的更多資訊,請參見Built-In Roles。