Öğretici: Hizmet Bağlayıcısı aracılığıyla veritabanı hizmetine parolasız bağlantı oluşturma
Makale
Parolasız bağlantılar, Azure hizmetlerine erişmek için yönetilen kimlikleri kullanır. Bu yaklaşımla yönetilen kimlikler için gizli dizileri el ile izlemeniz ve yönetmeniz gerekmez. Bu görevler Azure tarafından dahili olarak güvenli bir şekilde işlenir.
Hizmet Bağlayıcısı, Azure Spring Apps, Azure Uygulaması Service ve Azure Container Apps gibi uygulama barındırma hizmetlerinde yönetilen kimlikleri etkinleştirir. Hizmet Bağlayıcısı yönetilen kimlikleri kabul etmek için PostgreSQL için Azure Veritabanı, MySQL için Azure Veritabanı ve Azure SQL Veritabanı gibi veritabanı hizmetlerini de yapılandırıyor.
Bu öğreticide, aşağıdaki görevleri tamamlamak için Azure CLI'yi kullanacaksınız:
Azure CLI ile ilk ortamınızı denetleyin.
Service Connector ile parolasız bir bağlantı oluşturun.
Veritabanı hizmetine erişmek için Hizmet Bağlayıcısı tarafından oluşturulan ortam değişkenlerini veya yapılandırmaları kullanın.
aracılığıyla az loginAzure CLI ile oturum açın. Azure Cloud Shell kullanıyorsanız veya zaten oturum açtıysanız ile kimliği doğrulanmış hesabınızı az account showonaylayın.
Hizmet Bağlayıcısı parolasız uzantısını yükleme
Azure CLI için en son Hizmet Bağlayıcısı parolasız uzantısını yükleyin:
az extension add --name serviceconnector-passwordless --upgrade
Not
komutunu çalıştırarak az version"serviceconnector-passwordless" sürümünün "2.0.2" veya üzeri olduğunu denetleyin. Uzantı sürümünü yükseltmek için önce Azure CLI'yi yükseltmeniz gerekebilir.
Parolasız bağlantı oluşturma
Ardından yönetilen kimlik kullanarak bağlantı oluşturmak için örnek olarak Azure Uygulaması Hizmeti'ni kullanacağız.
Azure Container Apps: bunun yerine kullanın az containerapp connection create . Daha fazla örnek için bkz . Kimlik bağlantısı ile PostgreSQL veritabanı oluşturma ve bağlama.
Not
Azure portalını kullanıyorsanız Azure Uygulaması Service, Azure Spring Apps veya Azure Container Apps'in Hizmet Bağlayıcısı dikey penceresine gidin ve oluştur'u seçerek bağlantı oluşturun. Azure portalı sizin için komutu otomatik olarak oluşturur ve Cloud Shell'de komut yürütmeyi tetikler.
Aşağıdaki Azure CLI komutu bir --client-type parametre kullanır; java, dotnet, python vb. olabilir. Desteklenen istemci türlerini almak için komutunu az webapp connection create postgres-flexible -h çalıştırın ve uygulamanızla eşleşeni seçin.
MySQL için Azure Veritabanı - Esnek Sunucu, Microsoft Entra kimlik doğrulamasını etkinleştirmek için kullanıcı tarafından atanan bir yönetilen kimlik gerektirir. Daha fazla bilgi için bkz. MySQL için Azure Veritabanı - Esnek Sunucu için Microsoft Entra kimlik doğrulamasını ayarlama. Kullanıcı tarafından atanan bir yönetilen kimlik oluşturmak için aşağıdaki komutu kullanabilirsiniz:
Kullanıcı tarafından atanan yönetilen kimliği oluşturduktan sonra, Genel Yöneticinizden veya Ayrıcalıklı Rol Yöneticinizden bu kimlik için aşağıdaki izinleri vermesini isteyin:
User.Read.All
GroupMember.Read.All
Application.Read.All
Daha fazla bilgi için Active Directory kimlik doğrulamasının İzinler bölümüne bakın.
Ardından, Hizmet Bağlayıcısı'nı kullanarak sistem tarafından atanan yönetilen kimlikle uygulamanızı MySQL veritabanına bağlayın.
Aşağıdaki Azure CLI komutu bir --client-type parametre kullanır. az webapp connection create mysql-flexible -h Desteklenen istemci türlerini almak için komutunu çalıştırın ve uygulamanızla eşleşeni seçin.
Aşağıdaki Azure CLI komutu bir --client-type parametre kullanır. az webapp connection create sql -h Desteklenen istemci türlerini almak için komutunu çalıştırın ve uygulamanızla eşleşeni seçin.
Bu Hizmet Bağlayıcısı komutu arka planda aşağıdaki görevleri tamamlar:
Sistem tarafından atanan yönetilen kimliği etkinleştirin veya Azure Uygulaması Service/Azure Spring Apps/Azure Container Apps tarafından barındırılan uygulama $APPSERVICE_NAME için bir kullanıcı kimliği atayın.
Daha önce etkinleştirilmemişse veritabanı sunucusu için Microsoft Entra Kimlik Doğrulamasını etkinleştirin.
Microsoft Entra yöneticisini geçerli oturum açmış kullanıcı olarak ayarlayın.
Sistem tarafından atanan yönetilen kimlik, kullanıcı tarafından atanan yönetilen kimlik veya hizmet sorumlusu için veritabanı kullanıcısı ekleyin. Veritabanının $DATABASE_NAME tüm ayrıcalıklarını bu kullanıcıya verin. Kullanıcı adı, önceki komut çıkışındaki bağlantı dizesi bulunabilir.
veritabanı türüne göre , AZURE_POSTGRESQL_CONNECTIONSTRINGveya AZURE_SQL_CONNECTIONSTRING adlı AZURE_MYSQL_CONNECTIONSTRINGyapılandırmaları Azure kaynağına ayarlayın.
App Service için yapılandırmalar Uygulama Ayarları dikey penceresinde ayarlanır.
Spring Apps için yapılandırmalar, uygulama başlatıldığında ayarlanır.
Container Apps için yapılandırmalar ortam değişkenlerine ayarlanır. Azure portalındaki Hizmet Bağlayıcısı dikey penceresinde tüm yapılandırmaları ve bunların değerlerini alabilirsiniz.
Hizmet Bağlayıcısı kullanıcıya aşağıdaki ayrıcalıkları atar; bunları iptal edebilir ve gereksinimlerinize göre ayrıcalıkları ayarlayabilirsiniz.
GRANT ALL PRIVILEGES ON DATABASE "$DATABASE_NAME" TO "username";
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO "username";
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO "username";
GRANT ALL PRIVILEGES ON $DATABASE_NAME.* TO 'username'@'%';
GRANT CONTROL ON DATABASE::"$DATABASE_NAME" TO "username";
Microsoft Entra kimlik doğrulaması ile veritabanına bağlanma
Bağlantıyı oluşturduktan sonra, Microsoft Entra kimlik doğrulaması ile veritabanına bağlanmak için uygulamanızdaki bağlantı dizesi kullanabilirsiniz. Örneğin, Microsoft Entra kimlik doğrulaması ile veritabanına bağlanmak için aşağıdaki çözümleri kullanabilirsiniz.
.NET için parolasız bağlantıları destekleyen bir eklenti veya kitaplık yoktur. Azure.Identity gibi istemci kitaplığını kullanarak yönetilen kimlik veya hizmet sorumlusu için erişim belirteci alabilirsiniz. Ardından veritabanına bağlanmak için parola olarak erişim belirtecini kullanabilirsiniz. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümünü açıklamayı kaldırın.
using Azure.Identity;
using Azure.Core;
using Npgsql;
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential();
// For user-assigned identity.
// var sqlServerTokenProvider = new DefaultAzureCredential(
// new DefaultAzureCredentialOptions
// {
// ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// }
// );
// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CLIENTSECRET");
// var sqlServerTokenProvider = new ClientSecretCredential(tenantId, clientId, clientSecret);
// Acquire the access token.
AccessToken accessToken = await sqlServerTokenProvider.GetTokenAsync(
new TokenRequestContext(scopes: new string[]
{
"https://ossrdbms-aad.database.windows.net/.default"
}));
// Combine the token with the connection string from the environment variables provided by Service Connector.
string connectionString =
$"{Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING")};Password={accessToken.Token}";
// Establish the connection.
using (var connection = new NpgsqlConnection(connectionString))
{
Console.WriteLine("Opening connection using access token...");
connection.Open();
}
pom.xml dosyanıza aşağıdaki bağımlılıkları ekleyin:
Spring uygulaması için seçeneğiyle --client-type springbootbağlantı oluşturursanız, Hizmet Bağlayıcısı , spring.datasource.urlve spring.datasource.username özelliklerini spring.datasource.azure.passwordless-enabledAzure Spring Apps olarak ayarlar.
Azure Spring Apps'te uygulamanıza bir PostgreSQL için Azure Veritabanı bağlama öğreticisini izleyerek uygulamanızı güncelleştirin. Daha önce ayarlanmışsa yapılandırma özelliğini kaldırmayı spring.datasource.password ve Spring uygulamanıza doğru bağımlılıkları eklemeyi unutmayın.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Kitaplığı kullanarak azure-identity erişim belirteci alın ve belirteci parola olarak kullanın. Service Connector tarafından eklenen ortam değişkenlerinden bağlantı bilgilerini alın. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümünü açıklamayı kaldırın.
from azure.identity import DefaultAzureCredential
import psycopg2
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# cred = DefaultAzureCredential()
# For user-assigned identity.
# managed_identity_client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# For service principal.
# tenant_id = os.getenv('AZURE_POSTGRESQL_TENANTID')
# client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# client_secret = os.getenv('AZURE_POSTGRESQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# Acquire the access token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
# Combine the token with the connection string from the environment variables added by Service Connector to establish the connection.
conn_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
conn = psycopg2.connect(conn_string + ' password=' + accessToken.token)
Bağımlılıkları yükleyin.
pip install azure-identity
Hizmet Bağlayıcısı tarafından eklenen ortam değişkenlerini kullanarak kitaplık kullanarak azure-identity erişim belirteci alın. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümünü açıklamayı kaldırın.
from azure.identity import DefaultAzureCredential
import psycopg2
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# credential = DefaultAzureCredential()
# For user-assigned identity.
# managed_identity_client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# For service principal.
# tenant_id = os.getenv('AZURE_POSTGRESQL_TENANTID')
# client_id = os.getenv('AZURE_POSTGRESQL_CLIENTID')
# client_secret = os.getenv('AZURE_POSTGRESQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# Acquire the access token.
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
Dosya ayarlama bölümünde, Service Connector hizmeti tarafından eklenen ortam değişkenlerinden Azure PostgreSQL veritabanı bilgilerini alın. Veritabanına erişmek için önceki adımda alınan öğesini kullanın accessToken .
# In your setting file, eg. settings.py
host = os.getenv('AZURE_POSTGRESQL_HOST')
user = os.getenv('AZURE_POSTGRESQL_USER')
password = accessToken.token # this is accessToken acquired from above step.
database = os.getenv('AZURE_POSTGRESQL_NAME')
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': database,
'USER': user,
'PASSWORD': password,
'HOST': host,
'PORT': '5432', # Port is 5432 by default
'OPTIONS': {'sslmode': 'require'},
}
}
Bağımlılıkları yükleyin.
go get github.com/lib/pq
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
go get "github.com/Azure/azure-sdk-for-go/sdk/azcore"
Kodda, kullanarak azidentityerişim belirtecini alın ve ardından Bunu, Service Connector tarafından sağlanan bağlantı bilgileriyle birlikte Azure PostgreSQL'e bağlanmak için parola olarak kullanın. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümünü açıklamayı kaldırın.
import (
"database/sql"
"fmt"
"os"
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
_ "github.com/lib/pq"
)
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// cred, err := azidentity.NewDefaultAzureCredential(nil)
// For user-assigned identity.
// clientid := os.Getenv("AZURE_POSTGRESQL_CLIENTID")
// azidentity.ManagedIdentityCredentialOptions.ID := clientid
// options := &azidentity.ManagedIdentityCredentialOptions{ID: clientid}
// cred, err := azidentity.NewManagedIdentityCredential(options)
// For service principal.
// clientid := os.Getenv("AZURE_POSTGRESQL_CLIENTID")
// tenantid := os.Getenv("AZURE_POSTGRESQL_TENANTID")
// clientsecret := os.Getenv("AZURE_POSTGRESQL_CLIENTSECRET")
// cred, err := azidentity.NewClientSecretCredential(tenantid, clientid, clientsecret, &azidentity.ClientSecretCredentialOptions{})
if err != nil {
// error handling
}
// Acquire the access token
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
token, err := cred.GetToken(ctx, policy.TokenRequestOptions{
Scopes: []string("https://ossrdbms-aad.database.windows.net/.default"),
})
// Combine the token with the connection string from the environment variables added by Service Connector to establish the connection.
connectionString := os.Getenv("AZURE_POSTGRESQL_CONNECTIONSTRING") + " password=" + token.Token
conn, err := sql.Open("postgres", connectionString)
if err != nil {
panic(err)
}
conn.Close()
Kodda kullanarak erişim belirtecini @azure/identity ve Service Connector hizmeti tarafından eklenen ortam değişkenlerinden PostgreSQL bağlantı bilgilerini alın. Bağlantıyı kurmak için bunları birleştirin. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümünü açıklamayı kaldırın.
import { DefaultAzureCredential, ClientSecretCredential } from "@azure/identity";
const { Client } = require('pg');
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned identity.
// const credential = new DefaultAzureCredential();
// For user-assigned identity.
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const credential = new DefaultAzureCredential({
// managedIdentityClientId: clientId
// });
// For service principal.
// const tenantId = process.env.AZURE_POSTGRESQL_TENANTID;
// const clientId = process.env.AZURE_POSTGRESQL_CLIENTID;
// const clientSecret = process.env.AZURE_POSTGRESQL_CLIENTSECRET;
// Acquire the access token.
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
// Use the token and the connection information from the environment variables added by Service Connector to establish the connection.
(async () => {
const client = new Client({
host: process.env.AZURE_POSTGRESQL_HOST,
user: process.env.AZURE_POSTGRESQL_USER,
password: accesstoken.token,
database: process.env.AZURE_POSTGRESQL_DATABASE,
port: Number(process.env.AZURE_POSTGRESQL_PORT) ,
ssl: process.env.AZURE_POSTGRESQL_SSL
});
await client.connect();
await client.end();
})();
PHP için parolasız bağlantılar için bir eklenti veya kitaplık yoktur. Yönetilen kimlik veya hizmet sorumlusu için bir erişim belirteci alabilir ve veritabanına bağlanmak için parola olarak kullanabilirsiniz. Erişim belirteci Azure REST API kullanılarak edinilebilir.
Kodda, sık kullandığınız kitaplıkla REST API kullanarak erişim belirtecini alın.
Kullanıcı tarafından atanan kimlik ve sistem tarafından atanan kimlik için App Service ve Container Apps, iki ortam değişkeni tanımlayarak yönetilen kimlikler için belirteçleri almak üzere dahili olarak erişilebilir bir REST uç noktası sağlar: IDENTITY_ENDPOINT ve IDENTITY_HEADER. Daha fazla bilgi için bkz . REST uç nokta başvurusu.
Kimlik uç noktasına HTTP GET isteğinde bulunarak erişim belirtecini alın ve sorguda olduğu gibi resource kullanınhttps://ossrdbms-aad.database.windows.net. Kullanıcı tarafından atanan kimlik için lütfen sorguya Service Connector tarafından eklenen ortam değişkenlerinden istemci kimliğini de ekleyin.
Bağlantı kurmak için Service Connector hizmeti tarafından eklenen ortam değişkenlerinden erişim belirtecini ve PostgreSQL bağlantı sokmasını birleştirin.
Ruby için parolasız bağlantılar için bir eklenti veya kitaplık yoktur. Yönetilen kimlik veya hizmet sorumlusu için bir erişim belirteci alabilir ve veritabanına bağlanmak için parola olarak kullanabilirsiniz. Erişim belirteci Azure REST API kullanılarak edinilebilir.
Bağımlılıkları yükleyin.
gem install pg
Kodda, Service Connector hizmeti tarafından eklenen ortam değişkenlerinden REST API ve PostgreSQL bağlantı bilgilerini kullanarak erişim belirtecini alın. Bağlantıyı kurmak için bunları birleştirin. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümünü açıklamayı kaldırın.
App Service ve kapsayıcı Uygulamaları, yönetilen kimliklere yönelik belirteçleri almak için dahili olarak erişilebilir bir REST uç noktası sağlar. Daha fazla bilgi için bkz . REST uç nokta başvurusu.
require 'pg'
require 'dotenv/load'
require 'net/http'
require 'json'
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned identity.
# uri = URI(ENV['IDENTITY_ENDPOINT'] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01')
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})
# For user-assigned identity.
# uri = URI(ENV[IDENTITY_ENDPOINT] + '?resource=https://ossrdbms-aad.database.windows.net&api-version=2019-08-01&client-id=' + ENV['AZURE_POSTGRESQL_CLIENTID'])
# res = Net::HTTP.get_response(uri, {'X-IDENTITY-HEADER' => ENV['IDENTITY_HEADER'], 'Metadata' => 'true'})
# For service principal
# uri = URI('https://login.microsoftonline.com/' + ENV['AZURE_POSTGRESQL_TENANTID'] + '/oauth2/v2.0/token')
# params = {
# :grant_type => 'client_credentials',
# :client_id: => ENV['AZURE_POSTGRESQL_CLIENTID'],
# :client_secret => ENV['AZURE_POSTGRESQL_CLIENTSECRET'],
# :scope => 'https://ossrdbms-aad.database.windows.net/.default'
# }
# req = Net::HTTP::POST.new(uri)
# req.set_form_data(params)
# req['Content-Type'] = 'application/x-www-form-urlencoded'
# res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => true) do |http|
# http.request(req)
parsed = JSON.parse(res.body)
access_token = parsed["access_token"]
# Use the token and the connection string from the environment variables added by Service Connector to establish the connection.
conn = PG::Connection.new(
connection_string: ENV['AZURE_POSTGRESQL_CONNECTIONSTRING'] + " password=" + access_token,
)
Diğer diller için, Service Connector'ın veritabanını bağlamak için ortam değişkenlerine ayarlayıp ayarlayacak bağlantı özelliklerini kullanın. Ortam değişkeni ayrıntıları için bkz. PostgreSQL için Azure Veritabanı Service Connector ile tümleştirme.
Ardından, Hizmet Bağlayıcısı'nı kullanmadan önce PostgreSQL esnek sunucusunda tablolar ve diziler oluşturduysanız, sahip olarak bağlanmanız ve Hizmet Bağlayıcısı tarafından oluşturulma izni <aad-username> vermeniz gerekir. Hizmet Bağlayıcısı tarafından ayarlanan bağlantı dizesi veya yapılandırmadaki kullanıcı adı gibi aad_<connection name>görünmelidir. Azure portalını kullanıyorsanız sütunun yanındaki Service Type genişlet düğmesini seçin ve değeri alın. Azure CLI kullanıyorsanız CLI komut çıkışını denetleyin configurations .
Ardından, izin vermek için sorguyu yürütür
az extension add --name rdbms-connect
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO \"<aad-username>\";GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO \"<aad username>\";"
<owner-username> ve<owner-password>, başkalarına izin verebilen mevcut tablonun sahibidir. <aad-username> , Service Connector tarafından oluşturulan kullanıcıdır. Bunları gerçek değerle değiştirin.
Sonucu şu komutla doğrulayın:
az postgres flexible-server execute -n <postgres-name> -u <owner-username> -p "<owner-password>" -d <database-name> --querytext "SELECT distinct(table_name) FROM information_schema.table_privileges WHERE grantee='<aad-username>' AND table_schema='public';" --output table
.NET için parolasız bağlantıları destekleyen bir eklenti veya kitaplık yoktur. Azure.Identity gibi istemci kitaplığını kullanarak yönetilen kimlik veya hizmet sorumlusu için erişim belirteci alabilirsiniz. Ardından veritabanına bağlanmak için parola olarak erişim belirtecini kullanabilirsiniz. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümünü açıklamayı kaldırın.
using Azure.Core;
using Azure.Identity;
using MySqlConnector;
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned managed identity.
// var credential = new DefaultAzureCredential();
// For user-assigned managed identity.
// var credential = new DefaultAzureCredential(
// new DefaultAzureCredentialOptions
// {
// ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTID");
// });
// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_MYSQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTSECRET");
// var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
var tokenRequestContext = new TokenRequestContext(
new[] { "https://ossrdbms-aad.database.windows.net/.default" });
AccessToken accessToken = await credential.GetTokenAsync(tokenRequestContext);
// Open a connection to the MySQL server using the access token.
string connectionString =
$"{Environment.GetEnvironmentVariable("AZURE_MYSQL_CONNECTIONSTRING")};Password={accessToken.Token}";
using var connection = new MySqlConnection(connectionString);
Console.WriteLine("Opening connection using access token...");
await connection.OpenAsync();
// do something
pom.xml dosyanıza aşağıdaki bağımlılıkları ekleyin:
Spring uygulaması için seçeneğiyle --client-type springbootbağlantı oluşturursanız, Hizmet Bağlayıcısı , spring.datasource.urlve spring.datasource.username özelliklerini spring.datasource.azure.passwordless-enabledAzure Spring Apps olarak ayarlar.
Erişim belirteci ile kimlik doğrulaması yapın kitaplık aracılığıyla azure-identity alın ve Service Connector tarafından eklenen ortam değişkeninden bağlantı bilgilerini alın. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümünü açıklamayı kaldırın.
from azure.identity import ManagedIdentityCredential, ClientSecretCredential
import mysql.connector
import os
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned managed identity.
# cred = ManagedIdentityCredential()
# For user-assigned managed identity.
# managed_identity_client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# For service principal
# tenant_id = os.getenv('AZURE_MYSQL_TENANTID')
# client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# client_secret = os.getenv('AZURE_MYSQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# acquire token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
# open connect to Azure MySQL with the access token.
host = os.getenv('AZURE_MYSQL_HOST')
database = os.getenv('AZURE_MYSQL_NAME')
user = os.getenv('AZURE_MYSQL_USER')
password = accessToken.token
cnx = mysql.connector.connect(user=user,
password=password,
host=host,
database=database)
cnx.close()
Bağımlılıkları yükleyin.
pip install azure-identity
Hizmet Bağlayıcısı tarafından eklenen ortam değişkenleriyle kitaplık aracılığıyla azure-identity erişim belirteci alın. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümünü açıklamayı kaldırın.
from azure.identity import ManagedIdentityCredential, ClientSecretCredential
import os
# Uncomment the following lines corresponding to the authentication type you want to use.
# system-assigned managed identity
# cred = ManagedIdentityCredential()
# user-assigned managed identity
# managed_identity_client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# service principal
# tenant_id = os.getenv('AZURE_MYSQL_TENANTID')
# client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# client_secret = os.getenv('AZURE_MYSQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# acquire token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
Dosya ayarlama bölümünde, Service Connector hizmeti tarafından eklenen ortam değişkenlerinden Azure MySQL veritabanı bilgilerini alın. Veritabanına erişmek için önceki adımda alınan öğesini kullanın accessToken .
# in your setting file, eg. settings.py
host = os.getenv('AZURE_MYSQL_HOST')
database = os.getenv('AZURE_MYSQL_NAME')
user = os.getenv('AZURE_MYSQL_USER')
password = accessToken.token # this is accessToken acquired from above step.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': database,
'USER': user,
'PASSWORD': password,
'HOST': host
}
}
Bağımlılıkları yükleyin.
go get "github.com/go-sql-driver/mysql"
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
go get "github.com/Azure/azure-sdk-for-go/sdk/azcore"
Kodda, aracılığıyla azidentityerişim belirteci alın ve ardından belirteçle Azure MySQL'e bağlanın. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümünü açıklamayı kaldırın.
import (
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/go-sql-driver/mysql"
)
func main() {
// Uncomment the following lines corresponding to the authentication type you want to use.
// for system-assigned managed identity
// cred, err := azidentity.NewDefaultAzureCredential(nil)
// for user-assigned managed identity
// clientid := os.Getenv("AZURE_MYSQL_CLIENTID")
// azidentity.ManagedIdentityCredentialOptions.ID := clientid
// options := &azidentity.ManagedIdentityCredentialOptions{ID: clientid}
// cred, err := azidentity.NewManagedIdentityCredential(options)
// for service principal
// clientid := os.Getenv("AZURE_MYSQL_CLIENTID")
// tenantid := os.Getenv("AZURE_MYSQL_TENANTID")
// clientsecret := os.Getenv("AZURE_MYSQL_CLIENTSECRET")
// cred, err := azidentity.NewClientSecretCredential(tenantid, clientid, clientsecret, &azidentity.ClientSecretCredentialOptions{})
if err != nil {
}
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
token, err := cred.GetToken(ctx, policy.TokenRequestOptions{
Scopes: []string("https://ossrdbms-aad.database.windows.net/.default"),
})
connectionString := os.Getenv("AZURE_MYSQL_CONNECTIONSTRING") + ";Password=" + token.Token
db, err := sql.Open("mysql", connectionString)
}
Service Connector hizmeti tarafından eklenen ortam değişkenlerinden ve Azure MySQL veritabanı bilgilerini kullanarak @azure/identity erişim belirteci alın. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümünü açıklamayı kaldırın.
import { DefaultAzureCredential,ClientSecretCredential } from "@azure/identity";
const mysql = require('mysql2');
// Uncomment the following lines corresponding to the authentication type you want to use.
// for system-assigned managed identity
// const credential = new DefaultAzureCredential();
// for user-assigned managed identity
// const clientId = process.env.AZURE_MYSQL_CLIENTID;
// const credential = new DefaultAzureCredential({
// managedIdentityClientId: clientId
// });
// for service principal
// const tenantId = process.env.AZURE_MYSQL_TENANTID;
// const clientId = process.env.AZURE_MYSQL_CLIENTID;
// const clientSecret = process.env.AZURE_MYSQL_CLIENTSECRET;
// const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
// acquire token
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
const connection = mysql.createConnection({
host: process.env.AZURE_MYSQL_HOST,
user: process.env.AZURE_MYSQL_USER,
password: accessToken.token,
database: process.env.AZURE_MYSQL_DATABASE,
port: process.env.AZURE_MYSQL_PORT,
ssl: process.env.AZURE_MYSQL_SSL
});
connection.connect((err) => {
if (err) {
console.error('Error connecting to MySQL database: ' + err.stack);
return;
}
console.log('Connected to MySQL database');
});
Diğer diller için, Service Connector'ın veritabanını bağlamak için ortam değişkenlerine ayarlayıp ayarlayıp bağlantı dizesi ve kullanıcı adını kullanın. Ortam değişkeni ayrıntıları için bkz. MySQL için Azure Veritabanı Service Connector ile tümleştirme.
Diğer diller için, Service Connector'ın veritabanını bağlamak için ortam değişkenlerine ayarlayıp ayarlayıp bağlantı dizesi ve kullanıcı adını kullanın. Ortam değişkeni ayrıntıları için bkz. MySQL için Azure Veritabanı Service Connector ile tümleştirme.
Diğer diller için, Service Connector'ın veritabanını bağlamak için ortam değişkenlerine ayarlayıp ayarlayacak bağlantı özelliklerini kullanın. Ortam değişkeni ayrıntıları için bkz. MySQL için Azure Veritabanı Service Connector ile tümleştirme.
Daha fazla kod örneği için bkz . Yönetilen kimlik kullanarak gizli diziler olmadan App Service'ten Azure veritabanlarına bağlanma.
Service Connector tarafından eklenen ortam değişkeninden Azure SQL Veritabanı bağlantı dizesi alın.
using Microsoft.Data.SqlClient;
string connectionString =
Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING")!;
using var connection = new SqlConnection(connectionString);
connection.Open();
Service Connector tarafından eklenen ortam değişkeninden Azure SQL Veritabanı bağlantı dizesi alın.
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
public class Main {
public static void main(String[] args) {
// AZURE_SQL_CONNECTIONSTRING should be one of the following:
// For system-assigned managed identity: "jdbc:sqlserver://{SQLName}.database.windows.net:1433;databaseName={SQLDbName};authentication=ActiveDirectoryMSI;"
// For user-assigned managed identity: "jdbc:sqlserver://{SQLName}.database.windows.net:1433;databaseName={SQLDbName};msiClientId={UserAssignedMiClientId};authentication=ActiveDirectoryMSI;"
// For service principal: "jdbc:sqlserver://{SQLName}.database.windows.net:1433;databaseName={SQLDbName};user={ServicePrincipalClientId};password={spSecret};authentication=ActiveDirectoryServicePrincipal;"
String connectionString = System.getenv("AZURE_SQL_CONNECTIONSTRING");
SQLServerDataSource ds = new SQLServerDataSource();
ds.setURL(connectionString);
try (Connection connection = ds.getConnection()) {
System.out.println("Connected successfully.");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Daha fazla bilgi için bkz . Yönetilen kimlik kullanarak gizli diziler olmadan App Service'ten Azure veritabanlarına bağlanma.
Spring uygulaması için seçeneğiyle --client-type springbootbağlantı oluşturursanız, Hizmet Bağlayıcısı değer biçimine jdbc:sqlserver://<sql-server>.database.windows.net:1433;databaseName=<sql-db>;authentication=ActiveDirectoryMSI; sahip özellikleri spring.datasource.url Azure Spring Apps olarak ayarlar.
Java uygulamasını Azure SQL Veritabanı ile parolasız bağlantılar kullanacak şekilde geçirme öğreticisini izleyerek uygulamanızı güncelleştirin. Daha önce ayarlanmışsa yapılandırma özelliğini kaldırmayı spring.datasource.password ve doğru bağımlılıkları eklemeyi unutmayın.
Bağımlılıkları yükleyin.
python -m pip install pyodbc
Service Connector tarafından eklenen ortam değişkeninden Azure SQL Veritabanı bağlantı yapılandırmalarını alın. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümünü açıklamayı kaldırın. Azure Container Apps'i işlem hizmeti olarak kullanıyorsanız veya kod parçacığındaki bağlantı dizesi çalışmıyorsa, erişim belirteci kullanarak Azure SQL Veritabanı bağlanmak için Azure SQL Veritabanı ile parolasız bağlantılar kullanmak için Python uygulamasını geçirme bölümüne bakın.
import os
import pyodbc
server = os.getenv('AZURE_SQL_SERVER')
port = os.getenv('AZURE_SQL_PORT')
database = os.getenv('AZURE_SQL_DATABASE')
authentication = os.getenv('AZURE_SQL_AUTHENTICATION')
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned managed identity.
# connString = f'Driver={{ODBC Driver 18 for SQL Server}};Server=tcp:{server},{port};Database={database};Authentication={authentication};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30'
# For user-assigned managed identity.
# clientID = os.getenv('AZURE_SQL_USER')
# connString = f'Driver={{ODBC Driver 18 for SQL Server}};Server=tcp:{server},{port};Database={database};UID={clientID};Authentication={authentication};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30'
# For service principal.
# user = os.getenv('AZURE_SQL_USER')
# password = os.getenv('AZURE_SQL_PASSWORD')
# connString = f'Driver={{ODBC Driver 18 for SQL Server}};Server=tcp:{server},{port};Database={database};UID={user};PWD={password};Authentication={authentication};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30'
conn = pyodbc.connect(connString)
Bağımlılıkları yükleyin.
npm install mssql
Hizmet Bağlayıcısı tarafından eklenen ortam değişkenlerinden Azure SQL Veritabanı bağlantı yapılandırmalarını alın. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümünü açıklamayı kaldırın.
Diğer diller için, Service Connector'ın veritabanını bağlamak için ortam değişkenlerine ayarlayıp ayarlayacak bağlantı özelliklerini kullanın. Ortam değişkeni ayrıntıları için bkz. Azure SQL Veritabanı Service Connector ile tümleştirme.
Son olarak, uygulamanızı bir Azure barındırma hizmetine dağıtın. Bu kaynak hizmet, Azure'da hedef veritabanına bağlanmak için yönetilen kimlik kullanabilir.
Azure Spring Apps için, uygulama ve dağıtım oluşturma hakkında daha fazla ayrıntı için belgeyi denetleyebilirsiniz. Bkz . Uygulamayı derleme ve dağıtma.
Ardından günlüğü denetleyebilir veya azure veritabanına başarıyla bağlanıp bağlanamadığını görmek için uygulamayı çağırabilirsiniz.
Sorun giderme
İzin
İzinle ilgili hatalarla karşılaşırsanız, komutuyla az account showAzure CLI oturum açmış kullanıcısını onaylayın. Doğru hesapla oturum açtığınızdan emin olun. Ardından, Service Connector ile parolasız bağlantı oluşturmak için gerekli olabilecek aşağıdaki izinlere sahip olduğunuzu onaylayın.
İzin
İşlem
Microsoft.DBforPostgreSQL/flexibleServers/read
Veritabanı sunucusunun bilgilerini almak için gereklidir
Microsoft.DBforPostgreSQL/flexibleServers/write
Veritabanı sunucusu için Microsoft Entra kimlik doğrulamasını etkinleştirmek için gereklidir
Azure CLI oturum açma kullanıcısını veritabanı sunucusu Microsoft Entra yöneticisi olarak eklemek için gereklidir
İzin
İşlem
Microsoft.Sql/servers/read
Veritabanı sunucusunun bilgilerini almak için gereklidir
Microsoft.Sql/servers/firewallRules/write
Yerel IP adresinin engellenmesi durumunda güvenlik duvarı kuralı oluşturmak için gereklidir
Microsoft.Sql/servers/firewallRules/delete
Güvenlik sorununu önlemek için Hizmet Bağlayıcısı tarafından oluşturulan güvenlik duvarı kuralını geri döndürmek için gereklidir
Microsoft.Sql/servers/administrators/read
Azure CLI oturum açma kullanıcılarının bir veritabanı sunucusu Microsoft Entra yöneticisi olup olmadığını denetlemek için gereklidir
Microsoft.Sql/servers/administrators/write
Azure CLI oturum açma kullanıcısını veritabanı sunucusu Microsoft Entra yöneticisi olarak eklemek için gereklidir
Bazı durumlarda izinler gerekli değildir. Örneğin, Azure CLI kimliği doğrulanmış kullanıcı zaten SQL server'da Active Directory Yöneticisiyse, izninizin Microsoft.Sql/servers/administrators/write olması gerekmez.
Microsoft Entra Kimlik
Hata ERROR: AADSTS530003: Your device is required to be managed to access this resource.alırsanız, bt departmanınızdan bu cihazı Microsoft Entra Id'ye ekleme konusunda yardım isteyin. Daha fazla bilgi için bkz . Microsoft Entra'ya katılmış cihazlar.
Hesabınızın ve barındırma hizmetinin yönetilen kimliğini almak için Hizmet Bağlayıcısı'nın Microsoft Entra Id'ye erişmesi gerekir. Cihazınızın Microsoft Entra Id'ye erişip erişemediğini denetlemek için aşağıdaki komutu kullanabilirsiniz:
az ad signed-in-user show
Etkileşimli olarak oturum açmazsanız ve Interactive authentication is neededhatasını da alabilirsiniz. Hatayı çözmek için komutuyla az login oturum açın.
Ağ bağlantısı
Veritabanı sunucunuz Sanal Ağ ise, Azure CLI komutunu çalıştıran ortamınızın Sanal Ağ sunucuya erişebildiğinden emin olun.
Veritabanı sunucunuz Sanal Ağ ise, Azure CLI komutunu çalıştıran ortamınızın Sanal Ağ sunucuya erişebildiğinden emin olun.
Veritabanı sunucunuz genel erişime izin vermiyorsa, Azure CLI komutunu çalıştıran ortamınızın özel uç nokta üzerinden sunucuya erişebildiğinden emin olun.
Sonraki adımlar
Hizmet Bağlayıcısı ve parolasız bağlantılar hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın: