你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Cosmos DB for MongoDB 为数据平面作提供内置的基于角色的访问控制系统。 使用基于角色的访问控制通过精细的基于角色的权限授权数据请求。 本指南介绍如何启用基于角色的访问控制、创建角色和用户,以及使用支持的驱动程序进行身份验证。
先决条件
- Azure 订阅服务
- 用于 MongoDB 的 Azure Cosmos DB 帐户(版本 3.6 或更高版本)
- 最新版本的 Azure CLI
启用基于角色的访问控制
在 Azure Cosmos DB for MongoDB 帐户上启用基于角色的访问控制。
登录到 Azure CLI。
az login在数据库帐户上启用基于角色的访问控制功能。
az cosmosdb create \ --resource-group "<resource-group-name>" \ --name "<account-name>" \ --kind "MongoDB" \ --capabilities "EnableMongoRoleBasedAccessControl"小窍门
还可以从 Azure 门户中的“功能”选项卡启用基于角色的访问控制。
创建一个数据库,供用户在 Azure 门户中连接到该数据库。
创建角色和用户
定义自定义角色和用户以控制对数据库帐户的访问。
创建角色定义。
az cosmosdb mongodb role definition create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --body {\"Id\":\"test.My_Read_Only_Role101\",\"RoleName\":\"My_Read_Only_Role101\",\"Type\":\"CustomRole\",\"DatabaseName\":\"test\",\"Privileges\":[{\"Resource\":{\"Db\":\"test\",\"Collection\":\"test\"},\"Actions\":[\"insert\",\"find\"]}],\"Roles\":[]}小窍门
或者,使用 JSON 文件:
az cosmosdb mongodb role definition create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --body @role.json{ "Id": "test.My_Read_Only_Role101", "RoleName": "My_Read_Only_Role101", "Type": "CustomRole", "DatabaseName": "test", "Privileges": [{ "Resource": { "Db": "test", "Collection": "test" }, "Actions": ["insert", "find"] }], "Roles": [] }使用角色分配创建用户定义。
az cosmosdb mongodb user definition create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --body {\"Id\":\"test.myName\",\"UserName\":\"myName\",\"Password\":\"pass\",\"DatabaseName\":\"test\",\"CustomData\":\"Some_Random_Info\",\"Mechanisms\":\"SCRAM-SHA-256\",\"Roles\":[{\"Role\":\"My_Read_Only_Role101\",\"Db\":\"test\"}]}小窍门
或者,使用 JSON 文件:
az cosmosdb mongodb role definition create \ --resource-group "<resource-group-name>" \ --account-name "<account-name>" \ --body @role.json{ "Id": "test.myName", "UserName": "myName", "Password": "pass", "DatabaseName": "test", "CustomData": "Some_Random_Info", "Mechanisms": "SCRAM-SHA-256", "Roles": [{ "Role": "My_Read_Only_Role101", "Db": "test" }] }
使用驱动程序进行身份验证
使用支持的驱动程序和基于角色的访问控制凭据连接到数据库。
from pymongo import MongoClient
client = MongoClient(
"mongodb://<YOUR_HOSTNAME>:10255/?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000",
username="<YOUR_USER>",
password="<YOUR_PASSWORD>",
authSource='<YOUR_DATABASE>',
authMechanism='SCRAM-SHA-256',
appName="<YOUR appName FROM CONNECTION STRING IN AZURE PORTAL>"
)
执行常见操作
现在,对 Azure Cosmos DB for MongoDB 中基于角色的访问控制功能执行一些常见作。
使用以下命令显示所有角色定义。
az cosmosdb mongodb role definition list --account-name <account-name> --resource-group <resource-group-name>按角色 ID 验证角色是否存在。
az cosmosdb mongodb role definition exists --account-name <account-name> --resource-group <resource-group-name> --id test.My_Read_Only_Role使用角色定义 ID 删除角色定义。
az cosmosdb mongodb role definition delete --account-name <account-name> --resource-group <resource-group-name> --id test.My_Read_Only_Role显示所有用户定义。
az cosmosdb mongodb user definition list --account-name <account-name> --resource-group <resource-group-name>通过 ID 验证用户是否存在。
az cosmosdb mongodb user definition exists --account-name <account-name> --resource-group <resource-group-name> --id test.myName使用其 ID 删除用户定义。
az cosmosdb mongodb user definition delete --account-name <account-name> --resource-group <resource-group-name> --id test.myName