全部產品
Search
文件中心

ApsaraDB for MongoDB:通過Mongo Shell管理資料庫帳號

更新時間:Jun 19, 2024

Mongo Shell是MongoDB內建的資料庫管理工具。ApsaraDB for MongoDB支援通過Mongo Shell管理資料庫帳號。本文介紹如何通過Mongo Shell建立和查詢資料庫帳號。

前提條件

  1. 已建立ApsaraDB for MongoDB執行個體。不同類型執行個體的建立方法如下:

  2. 已通過Mongo Shell成功串連ApsaraDB for MongoDB執行個體。不同類型執行個體的串連方法如下:

注意事項

同一資料庫的資料庫帳號不允許重複。

建立資料庫帳號

說明
  • 資料庫帳號建立後不支援在ApsaraDB for MongoDB控制台的帳號管理頁面查詢。

  • 首次通過Mongo Shell建立資料庫帳號時,需要在admin資料庫下對執行個體固有的root帳號進行認證。

  1. 切換到admin資料庫。

    use admin
    說明

    該命令可以直接複製執行,無需修改。

  2. 認證root帳號。

    文法:

    db.auth("root","password")

    參數說明:password為root帳號的密碼。

    樣本:

    db.auth("root","123456Aa")
  3. 建立資料庫帳號。

    • 方式一:切換到目標資料庫,建立資料庫帳號。

      在哪個資料庫建立的資料庫帳號,該資料庫帳號就屬於哪個資料庫。您可以通過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

相關文檔