Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Cosmos DB in Microsoft Fabric basiert ausschließlich auf der Microsoft Entra ID-Authentifizierung und integrierten Datenebenenrollen zum Verwalten von Authentifizierung und Autorisierung. In diesem Leitfaden verwenden Sie Die Microsoft Entra-ID und Ihr angemeldetes Konto, um eine Verbindung mit einem Cosmos DB-Artefakt in Microsoft Fabric herzustellen.
Voraussetzungen
Bestehende Fabric-Kapazität
- Wenn Sie über keine Fabric-Kapazität verfügen, starten Sie eine Fabric-Testversion.
Eine vorhandene Cosmos DB-Datenbank in Fabric
- Wenn Sie noch keine Datenbank besitzen, erstellen Sie eine neue Cosmos DB-Datenbank in Fabric.
Eine Identität mit der Leseberechtigung für die Datenbank in Fabric
- Weitere Informationen zu Fabric-Berechtigungen finden Sie unter Zugriffssteuerungen.
Abrufen des Cosmos DB-Endpunkts
Rufen Sie zuerst den Endpunkt für die Cosmos DB-Datenbank in Fabric ab. Dieser Endpunkt ist erforderlich, um eine Verbindung mit dem Azure SDK herzustellen.
Öffnen Sie das Fabric-Portal (https://app.fabric.microsoft.com).
Navigieren Sie zu Ihrer vorhandenen Cosmos DB-Datenbank.
Wählen Sie die Einstellungsoption in der Menüleiste für die Datenbank aus.
Navigieren Sie im Dialogfeld "Einstellungen" zum Abschnitt "Verbindung" . Kopieren Sie dann den Wert des Endpoints für die Cosmos DB NoSQL-Datenbank. Sie verwenden diesen Wert in einem späteren Schritt[s].
Authentifizieren aus einem Notizbuch
Fabric-Notizbücher haben keine Möglichkeit, ein gültiges Azure-Anmeldeinformationsobjekt zu erstellen, das von Azure-Diensten verwendet wird. Benutzer authentifizieren sich mithilfe von Fabric NotebookUtils-Anmeldeinformationsprogrammen , die den Authentifizierungsbereich für Cosmos DB erfordern und ein Token im Zeichenfolgenformat erzeugen. Dazu ist ein benutzerdefinierter Code erforderlich, um ein gültiges Azure-Anmeldeinformationsobjekt zu erstellen.
Hier ist ein Notizbuchbeispiel, in dem dies veranschaulicht wird.
Zelle [1]:
#Install packages
%pip install azure-cosmos
Zelle [2]:
#Imports and config values
import logging
from azure.cosmos.aio import CosmosClient
from azure.cosmos.exceptions import CosmosHttpResponseError
COSMOS_ENDPOINT = 'https://my-cosmos-endpoint.cosmos.fabric.microsoft.com:443/'
COSMOS_DATABASE_NAME = '{your-cosmos-artifact-name}'
COSMOS_CONTAINER_NAME = '{your-container-name}'
Der Inhalt von Zelle 3 erstellt ein FabricTokenCredential()-Objekt und enthält den Code, der erforderlich ist, um ein gültiges Anmeldeinformationsobjekt für das Cosmos DB SDK aus der Tokenzeichenfolge zu erzeugen, die von den Fabric NotebookUtils-Anmeldeinformationsprogrammen generiert wird, die zum Authentifizieren eines Benutzers erforderlich sind.
Zelle [3]:
# Custom TokenCredential implementation for Fabric authentication in a notebook
%pip install azure-core
from azure.core.credentials import TokenCredential, AccessToken
import base64
import json
import notebookutils
from datetime import datetime, timezone
class FabricTokenCredential(TokenCredential):
def get_token(self, *scopes: str, claims: Optional[str] = None, tenant_id: Optional[str] = None,
enable_cae: bool = False, **kwargs: Any) -> AccessToken:
access_token = notebookutils.credentials.getToken("https://cosmos.azure.com/")
parts = access_token.split(".")
if len(parts) < 2:
raise ValueError("Invalid JWT format")
payload_b64 = parts[1]
# Fix padding
padding = (-len(payload_b64)) % 4
if padding:
payload_b64 += "=" * padding
payload_json = base64.urlsafe_b64decode(payload_b64.encode("utf-8")).decode("utf-8")
payload = json.loads(payload_json)
exp = payload.get("exp")
if exp is None:
raise ValueError("exp claim missing in token")
return AccessToken(token=access_token, expires_on=exp)
Zelle [4]:
# Create a Cosmos client with the FabricTokenCredential() and run a query
async with CosmosClient(endpoint, credential=FabricTokenCredential()) as client:
container = client.get_database_client(COSMOS_DATABASE_NAME).get_container_client(COSMOS_CONTAINER_NAME)
query_text = "SELECT * FROM c"
results = container.query_items(query=query_text)
items = []
async for item in results:
items.append(item)
for item in items:
print(item)