你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

通过 Azure Cosmos DB for MongoDB vCore 上的辅助用户提供的读取和读写权限

重要

Azure Cosmos DB for MongoDB vCore 中的原生辅助用户功能目前为预览版。 此预览版在没有服务级别协议的情况下提供,不建议用于生产工作负荷。 某些功能可能不受支持或者受限。

Azure Cosmos DB for MongoDB vCore 现在支持具有专用读写角色的辅助用户。 此功能使辅助用户能够访问和修改数据,这样便可更轻松地委派职责,同时增强数据安全性。 如果允许精细访问控制,团队可以自信地向各种利益干系人(如开发人员和分析师)扩展数据访问,而不会损害系统完整性。

先决条件

配置辅助用户

在群集上启用辅助本机用户管理,以便处理所有本机用户管理操作,例如创建和删除用户。 可以使用 ARM 模板或通过 Azure CLI 启用或禁用此功能。

az resource patch --ids "/subscriptions/{SubscriptionId}/resourceGroups/{ResourceGroup}/providers/Microsoft.DocumentDB/mongoClusters/{ClusterName}" --api-version 2024-10-01-preview --properties "{\"previewFeatures\": [\"EnableReadOnlyUser\"]}"

禁用辅助用户

如果需要删除群集上的所有辅助用户,请使用 删除作

若要禁用群集上的辅助用户管理作,请从previewFeatures 群集属性中删除 EnableReadOnlyUser 值。 禁用辅助用户管理后,群集上的所有辅助用户作(例如创建用户)都会被禁用,但在群集上创建的所有辅助用户仍可用于数据库访问。

支持的命令和示例

在群集预配期间,在 Azure Cosmos DB for MonogDB vCore 群集上创建了一个具有所有权限的管理用户。 此管理用户可以对群集执行所有作,并且无法删除。

此外,Azure Cosmos DB for MongoDB vCore 支持具有只读或读写权限的辅助用户的基于角色的访问控制(RBAC)。 此功能允许管理员分配角色,这些角色授予辅助用户对基本读取作的访问权限,同时保护主要数据完整性。

在群集级别为该群集上的所有数据库创建和授予用户权限。 readWriteAnyDatabaseclusterAdmin 角色共同授予对群集的完整读写权限,包括数据库管理和数据库作的权限。 readAnyDatabase 角色用于授予对群集的只读权限。

注意

仅支持具有数据库管理和数据库操作权限的完整读写用户。 不能单独分配 readWriteAnyDatabaseclusterAdmin 角色。

可以使用任何 MongoDB 驱动程序或工具(如 mongosh)来执行这些作。

通过 Mongosh 进行身份验证和执行操作

使用在群集预配期间创建的内置管理帐户进行身份验证。 只有此内置管理帐户在群集上具有用户管理权限(userAdmin)。

mongosh "mongodb+srv://<UserName>:<Password>@<ClusterName>?tls=true&authMechanism=SCRAM-SHA-256&retrywrites=false&maxIdleTimeMS=120000"

小窍门

可以在 Azure 门户中的“连接字符串”页上获取群集的本地连接字符串。

创建用户

在运行命令的群集上创建新用户。 如果用户存在,则 createUser 命令将返回重复的用户错误。

数据管理员用户

use admin
db.runCommand(
    {
        createUser:"yourUserName",
        pwd : "yourPassword",
        roles : [
            { role:"clusterAdmin",db:"admin" },
            { role:"readWriteAnyDatabase", db:"admin" }
        ]
    }
)

只读权限用户

use admin
db.runCommand(
    {
        createUser:"yourUserName",
        pwd : "yourPassword",
        roles : [
            { role:"readAnyDatabase",db:"admin" }
        ]
    }
)

更新用户

在命令运行所在的数据库中更新用户信息。 updateUser 命令仅支持更新密码。

use admin
db.runCommand(
    {
        updateUser:"<username>",
        pwd : "<new cleartext password>"
    }
)

删除用户

从群集中删除用户。

use admin
db.runCommand(
    {
        dropUser:"<username>"
    }
)

列出用户

返回有关在群集上创建的本地用户的信息。 它还支持将单个用户传入 usersInfo。 在这种情况下,它会返回有关用户、其角色等的信息。

use admin
db.runCommand(
    {
        usersInfo:1
    }
)

限制

  • 每个群集最多可以创建 10 个用户/角色。
  • Updateuser 命令现在仅支持密码更新,并且无法修改其他对象字段。
  • 预览版不支持该 Roleinfo 命令。 或者,也可以使用 usersInfo
  • 不支持向特定数据库或集合分配角色。
  • 在群集上启用辅助用户预览版时,群集还原操作可能不起作用。
    • 若要执行群集还原,请从previewFeatures 属性中删除 EnableReadOnlyUser 值。 完成还原后,可以重新启用预览版。 从群集删除预览不会影响在群集上创建的辅助用户,只会影响执行用户管理操作的能力。

后续步骤