全部產品
Search
文件中心

ApsaraDB for MongoDB:執行個體建立時指定的root帳號擁有什麼許可權?

更新時間:Mar 28, 2025

本文介紹ApsaraDB for MongoDBroot帳號的許可權。

當您建立ApsaraDB for MongoDB執行個體後,系統會自動在admin資料庫中建立一個root帳號。根據執行個體版本的不同,root帳號的權限原則也有所不同,不同版本的root許可權帳號策略如下:

  • 4.2版本及以下執行個體:擁有MongoDB內建的root角色許可權。

  • 4.4版本及以上執行個體:擁有alibabaCloudAdmin角色許可權。

    重要

    由於部分情境下寫入資料到admin系統庫會導致嚴重的效能抖動,因此alibabaCloudAdmin角色不具備admin庫的寫入許可權,同時也無法建立擁有admin系統庫可寫入權限的帳號。

您可以使用rolesInfo命令查看具體的角色許可權。root角色許可權和rolesInfo命令的更多介紹,請分別參見rootrolesInfo

重要

為了您的資料安全,不建議使用root帳號管理資料庫,請根據業務需求建立擁有相關許可權的資料庫帳號。具體操作,請參見ApsaraDB for MongoDB上如何建立帳號

您可以執行如下命令查看root帳號的許可權:

db.getSiblingDB("admin").runCommand({usersInfo: "root"});
說明

usersInfo參數的更多資訊,請參見usersInfo

alibabaCloudAdmin許可權

常見問題

為什麼無法建立含clusterAdmin、clusterManager、hostManager等高許可權user或role?

alibabaCloudAdmin許可權有限,因此在建立自訂user或role時,不能高於root帳號現有許可權範圍。

為什麼無法在admin庫下建立含readWrite、dbAdmin、dbOwner許可權的user或role?

alibabaCloudAdmin對於admin庫僅有隻讀許可權,無法進行寫入,您可以在其他庫下建立包含這些內建許可權的user或role。

如何建立一個對所有自訂集合都有讀寫等許可權的user?

您可以在admin庫下建立包含readWriteAnyDatabase、dbAdminAnyDatabase、userAdminAnyDatabase的帳號。命令如下:

db.getSiblingDB("admin").createUser({user:"myName",pwd:"myPassword",roles:["readWriteAnyDatabase"]})

clusterManager包含了很多分區叢集營運相關命令的許可權,不能建立的話如何使用?

alibabaCloudAdmin許可權的root帳號本身內建一些分區叢集營運相關命令的許可權,您可以使用root帳號來進行這些操作。

如果您想建立一個自訂帳號來執行營運命令,可以使用以下方式來建立user。此處以建立支援splitVector命令的user為例:

db.runCommand({createRole:'myRole',privileges:[{"resource":{"db":"","collection":""},"actions":['splitVector']}],roles:['readAnyDatabase']})

db.getSiblingDB("admin").createUser({user:"myUser",pwd:"myPassword",roles:["myRole"]})

為什麼我自訂建立的新帳號在admin庫下使用change stream時報錯無許可權使用aggregate?

您首先需要確保建立的自訂帳號擁有其他資料庫的讀許可權(即readAnyDatabase許可權),然後需要單獨為自訂帳號在admin庫下添加read許可權。

假設自訂帳號為myUser,授權命令樣本如下:

db.adminCommand({ grantRolesToUser: "myUser", roles: [{ role: "read", db: "admin"}]})

這是因為是ApsaraDB for MongoDB內建的xxxAnyDatabase的許可權和官方行為存在差異,除了不包含config和local庫外,還不包含admin庫,因此,您需要單獨添加admin庫的讀許可權。

使用flink-sql-connector-mongodb-cdc時,為什麼按照樣本建立role返回結果顯示沒有許可權?

listDatabases動作是針對整個叢集的,需要放在Cluster Resource中執行,您可以先改用如下命令來建立自訂role。

db.createRole(
    {
        role: "flinkrole",
        privileges: [
        {
            resource: { db: "", collection: "" },
            actions: [
                "splitVector",
                "listCollections",
                "collStats",
                "find",
                "changeStream" ]
        },
        {
            resource: { "cluster": true }, 
            actions: [ "listDatabases" ]
        }
        ],
        roles: [
            { role: 'read', db: 'config' }
        ]
    }
);

如果role和user都建立成功後,在使用cdc的過程中仍然出錯,請提交工單聯絡支援人員協助處理。