本文介紹ApsaraDB for MongoDBroot帳號的許可權。
當您建立ApsaraDB for MongoDB執行個體後,系統會自動在admin資料庫中建立一個root帳號。根據執行個體版本的不同,root帳號的權限原則也有所不同,不同版本的root許可權帳號策略如下:
4.2版本及以下執行個體:擁有MongoDB內建的root角色許可權。
4.4版本及以上執行個體:擁有alibabaCloudAdmin角色許可權。
重要由於部分情境下寫入資料到admin系統庫會導致嚴重的效能抖動,因此alibabaCloudAdmin角色不具備admin庫的寫入許可權,同時也無法建立擁有admin系統庫可寫入權限的帳號。
您可以使用rolesInfo
命令查看具體的角色許可權。root角色許可權和rolesInfo
命令的更多介紹,請分別參見root和rolesInfo。
為了您的資料安全,不建議使用root帳號管理資料庫,請根據業務需求建立擁有相關許可權的資料庫帳號。具體操作,請參見ApsaraDB for MongoDB上如何建立帳號。
您可以執行如下命令可以查看root帳號的許可權:
db.getSiblingDB("admin").runCommand({usersInfo: "root"});
usersInfo
參數的更多資訊,請參見usersInfo。
alibabaCloudAdmin許可權
擁有的內建role許可權(例如讀寫集合、帳號管理、查看統計等):readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase、clusterMonitor、backup、enableSharding、restore。
說明alibabaCloudAdmin只有admin庫的讀許可權。
支援分區叢集的相關命令:flushRouterConfig、cleanupOrphaned、runCommandOnShard、splitVector、clearJumboFlag、moveChunk、splitChunk。
常見問題
Q:為什麼無法建立含clusterAdmin、clusterManager、hostManager等高許可權user或role?
A:alibabaCloudAdmin許可權有限,因此在建立自訂user或role時,不能高於root帳號現有許可權範圍。
Q:為什麼無法在admin庫下建立含readWrite、dbAdmin、dbOwner許可權的user或role?
A:alibabaCloudAdmin對於admin庫僅有隻讀許可權,無法進行寫入,您可以在其他庫下建立包含這些內建許可權的user或role。
Q:如何建立一個對所有自訂集合都有讀寫等許可權的user?
A:您可以在admin庫下建立包含readWriteAnyDatabase、dbAdminAnyDatabase、userAdminAnyDatabase的帳號。命令如下:
db.getSiblingDB("admin").createUser({user:"myName",pwd:"myPassword",roles:["readWriteAnyDatabase"]})
Q:clusterManager包含了很多分區叢集營運相關命令的許可權,不能建立的話如何使用?
A: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"]})
Q:使用flink-sql-connector-mongodb-cdc時,為什麼按照樣本建立role返回結果顯示沒許可權?
A:listDatabases動作是針對整個叢集的,需要放在Cluster Resource中執行,您可以先改用如下命令來建立自訂role。
db.createRole( { role: "flinkrole", privileges: [ { resource: { db: "", collection: "" }, actions: [ "splitVector", "listDatabases", "listCollections", "collStats", "find", "changeStream" ] }, { resource: { "cluster": true }, actions: [ "listDatabases" ] } ], roles: [ { role: 'read', db: 'config' } ] } );
如果role和user都建立成功後,在使用cdc的過程中仍然出錯,請提交工單聯絡支援人員協助處理。