重要
此功能目前为预览版。
Microsoft Fabric 中的 Cosmos DB 主要依赖于 Microsoft Entra ID 身份验证和内置数据平面角色来管理身份验证和授权。 在本指南中,您将使用 Microsoft Entra ID 和已登录的帐户连接到 Fabric 数据库中的 Cosmos DB。
重要
这些步骤类似于在使用 服务主体、 组或其他类型Microsoft Entra ID 标识时进行身份验证的过程。 若要授予服务主体连接到 Microsoft Fabric 和 Cosmos DB 数据库的能力,请启用 “服务主体可以使用 Fabric 租户中的 Fabric API 设置。 有关详细信息,请参阅 Microsoft Fabric 租户设置。
先决条件
现有Fabric容量
- 如果没有 Fabric 容量, 请启动 Fabric 试用版。
Fabric 中的现有 Cosmos DB 数据库
具有 Fabric 中数据库的 读取 权限的标识
- 有关 Fabric 权限的详细信息,请参阅 访问控制。
Azure CLI
- 如果尚未安装, 请安装 Azure CLI。
- Python 3.12 或更高版本
- Node.js 22 或更高版本
- .NET SDK 9.0 或更高版本
检索 Cosmos DB 终结点
首先,获取 Fabric 中 Cosmos DB 数据库的终结点。 要使用 Azure SDK 进行连接,需要此终结点。
打开 Fabric 门户(https://app.fabric.microsoft.com)。
导航到现有的 Cosmos DB 数据库。
在数据库的菜单栏中选择 “设置” 选项。
在“设置”对话框中,导航到 “连接” 部分。 然后,复制 Cosmos DB NoSQL 数据库 字段的 Endpoint 值。 在后续步骤中使用此值。
向 Azure CLI 进行身份验证
现在,向 Azure CLI 进行身份验证。 Azure SDK 可以使用各种不同的身份验证机制来验证身份,但 Azure CLI 是各种开发人员语言中最通用和最无摩擦的选项。
在本地开发环境中,打开终端。
使用
az login.. 向 Azure CLI 进行身份验证。az login按照交互式步骤执行多重身份验证(MFA),并选择订阅。
通过查询身份验证您的帐户是否已成功登录。
az ad signed-in-user show观察上一命令的输出。 该
id字段包含当前已登录身份的主体 ID(对象)。{ "@odata.context": "<https://graph.microsoft.com/v1.0/$metadata#users/$entity>", "businessPhones": [], "displayName": "Kai Carter", "givenName": "Kai", "id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb", "jobTitle": "Senior Sales Representative", "mail": "<kai@adventure-works.com>", "mobilePhone": null, "officeLocation": "Redmond", "preferredLanguage": null, "surname": "Carter", "userPrincipalName": "<kai@adventure-works.com>" }注释
在Microsoft Entra ID 术语中,此标识称为 人工标识。 它是一种标识类型,可以连接到许多不同类型的数据库,包括但不限于:
- 托管标识(系统或用户分配)
- 工作负载标识
- 应用程序标识
- 设备标识
虽然这些步骤侧重于使用人工标识连接到 Fabric 中的数据库,但如果使用其他标识类型进行连接,则步骤类似。 有关标识的详细信息,请参阅 标识基础知识。
使用 Azure SDK 进行连接
最后,使用 Azure SDK 通过端点和身份认证连接到 Fabric 中的 Cosmos DB 数据库。 Azure SDK 附带统一 标识 库,可代表你自动处理身份验证。 此步骤使用类型 AzureCliCredential ,该类型根据环境自动查找正确的标识类型。
小窍门
或者,可以使用DefaultAzureCredential类型。 此类型可以在应用程序代码部署到 Azure 时自动找到正确的系统分配或用户分配的托管标识,并在本地开发时找到正确的人类身份。
from azure.cosmos import CosmosClient
from azure.identity import DefaultAzureCredential
endpoint = "<cosmos-db-fabric-endpoint>"
credential = DefaultAzureCredential()
client = CosmosClient(endpoint, credential=credential)
container = client.get_database_client("<database-name>").get_container_client("<container-name>")
nosql = "SELECT TOP 10 VALUE item.id FROM items AS item"
results = container.query_items(
query=nosql,
enable_cross_partition_query=True,
)
items = [item for item in results]
for item in items:
print(item)
注释
此示例使用 PyPI 中的 azure-identity 和 azure-cosmos 包。
import { Container, CosmosClient, CosmosClientOptions } from '@azure/cosmos'
import { TokenCredential, AzureCliCredential } from '@azure/identity'
run();
async function run() {
let endpoint: string = '<cosmos-db-fabric-endpoint>';
let credential: TokenCredential = new AzureCliCredential();
let options: CosmosClientOptions = {
endpoint: endpoint,
aadCredentials: credential
};
const client: CosmosClient = new CosmosClient(options);
const container: Container = client.database('<database-name>').container('<container-name>');
const nosql = 'SELECT TOP 10 VALUE item.id FROM items AS item';
const querySpec = {
query: nosql
}
let response = await container.items.query(querySpec).fetchAll();
for (let item of response.resources) {
console.log(item);
}
}
注释
此示例使用 npm 中的 @azure/identity 和 @azure/cosmos 包。
using Azure.Identity;
using Microsoft.Azure.Cosmos;
string endpoint = "<cosmos-db-fabric-endpoint>";
AzureCliCredential credential = new();
CosmosClient client = new(endpoint, credential);
Container container = client
.GetDatabase("<database-name>")
.GetContainer("<container-name>");
string sql = "SELECT TOP 10 VALUE item.id FROM items AS item";
QueryDefinition query = new(sql);
FeedIterator<string> iterator = container.GetItemQueryIterator<string>(query);
while (iterator.HasMoreResults)
{
FeedResponse<string> response = await iterator.ReadNextAsync();
foreach (var item in response)
{
Console.WriteLine(item);
}
}
注释
此示例使用 NuGet 中的 Azure.Identity 和 Microsoft.Azure.Cosmos 包。