Parolasız bağlantılar, Azure hizmetlerine erişmek için yönetilen kimlikleri kullanır. Bu yaklaşımla yönetilen kimlikler için gizlilikleri 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 ve Azure App Service gibi uygulama barındırma hizmetlerinde yönetilen kimlikleri etkinleştirir. Service Connector, yönetilen kimlikleri kabul etmek için PostgreSQL için Azure Veritabanı, MySQL için Azure Veritabanı, Azure SQL Veritabanı ve Microsoft Fabric'teki 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.
Önkoşullar
Azure CLI'yi kullanmaya başlamak için:
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 serviceconnector-passwordlessuzantı sürümünün az version 2.0.2 veya üzeri olup olmadığını denetleyin. Gerekirse, önce Azure CLI yükseltin ve ardından uzantıyı yükseltin.
Parolasız bağlantı oluşturma
Aşağıdaki komutlar, yönetilen kimlik kullanarak bağlantı oluşturmak için örnek olarak Azure App Service kullanır.
Azure Spring Apps kullanıyorsanız, bunun yerine komutunu çalıştırınaz spring connection create. Daha fazla örnek için bkz. Azure Spring Apps'i Azure veritabanına bağlama.
Not
Azure portalını tercih ediyorsanız, Azure App Service veya Azure Spring Apps içinde Service Connector bölmesini açın ve ardından Oluştur'u seçin. Portal otomatik olarak komutu oluşturur ve Cloud Shell çalıştırır.
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.
az webapp connection create postgres-flexible \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $POSTGRESQL_HOST \
--database $DATABASE_NAME \
--user-identity client-id=XX subs-id=XX \
--client-type $CLIENT_TYPE
az webapp connection create postgres-flexible \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $POSTGRESQL_HOST \
--database $DATABASE_NAME \
--system-identity \
--client-type $CLIENT_TYPE
az webapp connection create postgres-flexible \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $POSTGRESQL_HOST \
--database $DATABASE_NAME \
--service-principal client-id=XX secret=XX\
--client-type $CLIENT_TYPE
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:
USER_IDENTITY_NAME=<YOUR_USER_ASSIGNED_MANAGED_IDENTITY_NAME>
IDENTITY_RESOURCE_ID=$(az identity create \
--name $USER_IDENTITY_NAME \
--resource-group $RESOURCE_GROUP \
--query id \
--output tsv)
Önemli
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.
az webapp connection create mysql-flexible \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $MYSQL_HOST \
--database $DATABASE_NAME \
--user-identity client-id=XX subs-id=XX mysql-identity-id=$IDENTITY_RESOURCE_ID \
--client-type java
az webapp connection create mysql-flexible \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $MYSQL_HOST \
--database $DATABASE_NAME \
--system-identity mysql-identity-id=$IDENTITY_RESOURCE_ID \
--client-type java
az webapp connection create mysql-flexible \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $MYSQL_HOST \
--database $DATABASE_NAME \
--service-principal client-id=XX secret=XX mysql-identity-id=$IDENTITY_RESOURCE_ID \
--client-type java
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.
az webapp connection create sql \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $SQL_HOST \
--database $DATABASE_NAME \
--user-identity client-id=XX subs-id=XX \
--client-type dotnet
az webapp connection create sql \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $SQL_HOST \
--database $DATABASE_NAME \
--system-identity \
--client-type dotnet
az webapp connection create sql \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--target-resource-group $RESOURCE_GROUP \
--server $SQL_HOST \
--database $DATABASE_NAME \
--service-principal client-id=XX secret=XX \
--client-type dotnet
Aşağıdaki Azure CLI komutu bir --client-type parametre kullanır.
az webapp connection create fabricsql -h Desteklenen istemci türlerini almak için komutunu çalıştırın ve uygulamanızla eşleşeni seçin.
az webapp connection create fabricsql \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--fabric-workspace-uuid $FABRIC_WORKSPACE_UUID \
--fabric-sql-db-uuid $FABRIC_SQL_DB_UUID \
--user-identity client-id=XX subs-id=XX \
--client-type dotnet
az webapp connection create fabricsql \
--resource-group $RESOURCE_GROUP \
--name $APPSERVICE_NAME \
--fabric-workspace-uuid $FABRIC_WORKSPACE_UUID \
--fabric-sql-db-uuid $FABRIC_SQL_DB_UUID \
--system-identity \
--client-type dotnet
Not
Microsoft Fabric'te SQL veritabanı hedeflenirken hizmet sorumlularını kullanan hizmet bağlantıları desteklenmez.
Bu Hizmet Bağlayıcısı komutu arka planda aşağıdaki görevleri tamamlar:
- 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 sağlayıcısı için bir 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ı dizesinde bulunabilir.
-
AZURE_MYSQL_CONNECTIONSTRING, AZURE_POSTGRESQL_CONNECTIONSTRING, AZURE_SQL_CONNECTIONSTRING, veya FABRIC_SQL_CONNECTIONSTRING adlı yapılandırmaları veritabanı türüne göre 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.
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";
ALTER ROLE db_datareader ADD MEMBER "username"
ALTER ROLE db_datawriter ADD MEMBER "username"
ALTER ROLE db_ddladmin ADD MEMBER "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. Kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümündeki yorum işaretini kaldırarak aşağıdaki kodu kullanabilirsiniz.
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:
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.5</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.2.0</version>
</dependency>
Ortam değişkenlerinden bağlantı dizesi alın ve veritabanına bağlanmak için eklenti adını ekleyin:
import java.sql.*;
String url = System.getenv("AZURE_POSTGRESQL_CONNECTIONSTRING");
String pluginName = "com.azure.identity.extensions.jdbc.postgresql.AzurePostgresqlAuthenticationPlugin";
Connection connection = DriverManager.getConnection(url + "&authenticationPluginClassName=" + pluginName);
Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:
Bağımlılıkları yükleyin.
pip install azure-identity
pip install psycopg2-binary
pip freeze > requirements.txt # Save the dependencies to a file
Kütüphaneyi kullanarak azure-identity erişim belirteci alın ve bu belirteci parola olarak kullanın. Service Connector tarafından eklenen ortam değişkenlerinden bağlantı bilgilerini alın. Kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümündeki yorum işaretini kaldırarak aşağıdaki kodu kullanabilirsiniz.
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 azure-identity kütüphanesi aracılığıyla erişim belirteci alın. Kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümündeki yorum işaretini kaldırarak aşağıdaki kodu kullanabilirsiniz.
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. Önceki adımda edinilen bilgiyi kullanarak veritabanına erişin 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, azidentity kullanarak erişim belirteci 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. Kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümündeki yorum işaretini kaldırarak aşağıdaki kodu kullanabilirsiniz.
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()
Bağımlılıkları yükleyin.
npm install --save @azure/identity
npm install --save pg
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. Kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümündeki yorum işaretini kaldırarak aşağıdaki kodu kullanabilirsiniz.
import { DefaultAzureCredential, ClientSecretCredential } from "@azure/identity";
import { Client } from '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;
// const credential = new ClientSecretCredential(tenantId, clientId, 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.
Kodunuzda, sık kullandığınız bir kütüphane ile REST API'yi kullanarak erişim belirtecini alın.
Kullanıcı tarafından atanan kimlik ve sistem tarafından atanan kimlik için, Azure App Service 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 https://ossrdbms-aad.database.windows.net kullanınresource. 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.
Hizmet sorumlusu için, erişim belirtecini alma ayrıntılarını görmek için Azure AD hizmetinden hizmete erişim belirteci isteğine bakın. POST isteğini, Hizmet Bağlayıcısı tarafından eklenen ortam değişkenlerinden hizmet sorumlusunun kiracı kimliği, istemci kimliği, istemci gizli dizisi ile ve https://ossrdbms-aad.database.windows.net/.default kapsamı dahilinde yapın.
Bağlantı kurmak için Service Connector hizmeti tarafından eklenen ortam değişkenlerinden erişim belirtecini ve PostgreSQL bağlantı dizesini birleştirin.
<?php
$conn_string = sprintf("%s password=", getenv('AZURE_POSTGRESQL_CONNECTIONSTRING'), $access_token);
$dbconn = pg_connect($conn_string);
?>
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. Kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümündeki yorum işaretini kaldırarak aşağıdaki kodu kullanabilirsiniz.
Azure App Service, 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,
)
Hizmet sorumlusu için erişim belirteci almanın detaylarını görmek için Azure AD hizmetten hizmete erişim belirteci isteğine başvurun.
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, "PostgreSQL için Azure Veritabanı"nı Service Connector ile tümleştirme bölümüne bakın.
Ardından, Service Connector’ı kullanmadan önce PostgreSQL esnek sunucusunda tablolar ve diziler oluşturduysanız, sahip olarak bağlanın ve Service Connector tarafından oluşturulan <aad-username> öğesine gerekli izinleri verin. 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, değeri almak için Hizmet Türü sütununun yanındaki genişlet düğmesini seçin. Azure CLI kullanıyorsanız komut çıktısında configurations öğesini denetleyin.
Ardından izin vermek için aşağıdaki sorguyu çalıştırın:
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 sahibine aittir.
<aad-username> , Service Connector tarafından oluşturulan kullanıcıdır. Bunları gerçek değerlerle değiştirin.
Sonucu 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. Kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümündeki yorum işaretini kaldırarak aşağıdaki kodu kullanabilirsiniz.
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:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.2.0</version>
</dependency>
Ortam değişkeninden bağlantı dizesi alın ve veritabanına bağlanmak için eklenti adını ekleyin:
String url = System.getenv("AZURE_MYSQL_CONNECTIONSTRING");
String pluginName = "com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin";
Properties properties = new Properties();
properties.put("defaultAuthenticationPlugin", pluginName);
properties.put("authenticationPlugins", pluginName);
// Uncomment the following lines corresponding to the authentication type you want to use.
// for user-assigned managed identity
// String clientId = System.getenv('AZURE_MYSQL_CLIENTID')
// properties.put("azure.clientId", clientId);
// For service principal
// String tenantId = System.getenv('AZURE_MYSQL_TENANTID')
// String clientId = System.getenv('AZURE_MYSQL_CLIENTID')
// String clientSecret = System.getenv('AZURE_MYSQL_CLIENTSECRET')
// properties.put("azure.clientId", clientId);
// properties.put("azure.clientSecret", clientSecret);
// properties.put("azure.tenantId", tenantId);
Connection connection = DriverManager.getConnection(url, properties);
Daha fazla bilgi için bkz. MySQL için Azure Veritabanı - Esnek Sunucu ile Java ve JDBC kullanma.
Bağımlılıkları yükleme
pip install azure-identity
# install Connector/Python https://dev.mysql.com/doc/connector-python/en/connector-python-installation.html
pip install mysql-connector-python
Kitaplık aracılığıyla alınan erişim belirteci ile kimlik doğrulaması yapın ve Service Connector tarafından eklenen ortam değişkeninden bağlantı bilgilerini elde edin. Kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümündeki yorum işaretini kaldırarak aşağıdaki kodu kullanabilirsiniz.
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 azure-identity kütüphanesi aracılığıyla erişim belirteci edinin. Kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümündeki yorum işaretini kaldırarak aşağıdaki kodu kullanabilirsiniz.
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. Önceki adımda edinilen bilgiyi kullanarak veritabanına erişin 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, azidentity erişim belirteci aracılığıyla erişim belirteci alın ve ardından belirteçle Azure MySQL'e bağlanın. Kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümündeki yorum işaretini kaldırarak aşağıdaki kodu kullanabilirsiniz.
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)
}
Bağımlılıkları yükleme
npm install --save @azure/identity
npm install --save mysql2
Service Connector hizmeti tarafından eklenen ortam değişkenlerinden ve Azure MySQL veritabanı bilgilerini kullanarak @azure/identity erişim belirteci alın. Kullanmak istediğiniz kimlik doğrulama türü için kod parçacığının bölümündeki yorum işaretini kaldırarak aşağıdaki kodu kullanabilirsiniz.
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');
});
Daha fazla kod örneği için bkz. Yönetilen kimlik kullanarak gizli diziler olmadan App Service'ten Azure veritabanlarına bağlanma.
Bağımlılıkları yükleyin.
dotnet add package Microsoft.Data.SqlClient
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();
Daha fazla bilgi için bkz. Active Directory Yönetilen Kimlik kimlik doğrulamasını kullanma.
pom.xml dosyanıza aşağıdaki bağımlılıkları ekleyin:
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>10.2.0.jre11</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.7.0</version>
</dependency>
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 anahtarlara ihtiyaç duymadan App Service'ten Azure veritabanlarına bağlanmak.
Bağımlılıkları yükleyin.
python -m pip install mssql-python python-dotenv
Service Connector tarafından eklenen ortam değişkeninden Azure SQL Veritabanı bağlantı yapılandırmalarını alın. Aşağıdaki kodda, kimlik doğrulama türünüze ait bölümün yorum işaretini kaldırın.
import os
from mssql_python import connect
server = os.getenv('AZURE_SQL_SERVER')
port = os.getenv('AZURE_SQL_PORT')
database = os.getenv('AZURE_SQL_DATABASE')
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned managed identity.
# connection_string = f'Server={server},{port};Database={database};Authentication=ActiveDirectoryMSI;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30'
# For user-assigned managed identity.
# client_id = os.getenv('AZURE_SQL_USER')
# connection_string = f'Server={server},{port};Database={database};UID={client_id};Authentication=ActiveDirectoryMSI;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30'
# For service principal.
# user = os.getenv('AZURE_SQL_USER')
# password = os.getenv('AZURE_SQL_PASSWORD')
# connection_string = f'Server={server},{port};Database={database};UID={user};PWD={password};Authentication=ActiveDirectoryServicePrincipal;Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30'
conn = connect(connection_string)
- 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 kodda, kimlik doğrulama türünüze ait bölümün yorum işaretini kaldırın.
import sql from 'mssql';
const server = process.env.AZURE_SQL_SERVER;
const database = process.env.AZURE_SQL_DATABASE;
const port = parseInt(process.env.AZURE_SQL_PORT);
const authenticationType = process.env.AZURE_SQL_AUTHENTICATIONTYPE;
// Uncomment the following lines corresponding to the authentication type you want to use.
// For system-assigned managed identity.
// const config = {
// server,
// port,
// database,
// authentication: {
// type: authenticationType
// },
// options: {
// encrypt: true
// }
// };
// For user-assigned managed identity.
// const clientId = process.env.AZURE_SQL_CLIENTID;
// const config = {
// server,
// port,
// database,
// authentication: {
// type: authenticationType
// },
// options: {
// encrypt: true,
// clientId: clientId
// }
// };
// For service principal.
// const clientId = process.env.AZURE_SQL_CLIENTID;
// const clientSecret = process.env.AZURE_SQL_CLIENTSECRET;
// const tenantId = process.env.AZURE_SQL_TENANTID;
// const config = {
// server,
// port,
// database,
// authentication: {
// type: authenticationType
// },
// options: {
// encrypt: true,
// clientId: clientId,
// clientSecret: clientSecret,
// tenantId: tenantId
// }
// };
this.poolconnection = await sql.connect(config);
Daha fazla bilgi için bkz. Microsoft SQL Server'da istemci programlama için Giriş sayfası.
Bağımlılıkları yükleyin.
dotnet add package Microsoft.Data.SqlClient
Hizmet Bağlayıcısı tarafından eklenen ortam değişkeninden Microsoft Fabric bağlantı dizesindeki SQL veritabanını alın.
using Microsoft.Data.SqlClient;
string connectionString =
Environment.GetEnvironmentVariable("FABRIC_SQL_CONNECTIONSTRING")!;
using var connection = new SqlConnection(connectionString);
connection.Open();
Daha fazla bilgi için bkz. Active Directory yönetilen kimlik kimlik doğrulamasını kullanma.
pom.xml dosyanıza aşağıdaki bağımlılıkları ekleyin:
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>10.2.0.jre11</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity</artifactId>
<version>1.7.0</version>
</dependency>
Hizmet Bağlayıcısı tarafından eklenen ortam değişkeninden Microsoft Fabric bağlantı dizesindeki SQL veritabanını 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) {
// FABRIC_SQL_CONNECTIONSTRING should be one of the following:
// For system-assigned managed identity: "jdbc:sqlserver://<Fabric-SQL-Identifier>.msit-database.fabric.microsoft.com,1433;databaseName=<SQL-DB-name>-<Fabric-DB-Identifier>;authentication=ActiveDirectoryMSI;"
// For user-assigned managed identity: "jdbc:sqlserver://<Fabric-SQL-Identifier>.msit-database.fabric.microsoft.com,1433;databaseName=<SQL-DB-name>-<Fabric-DB-Identifier>;msiClientId=<msiClientId>;authentication=ActiveDirectoryMSI;"
String connectionString = System.getenv("FABRIC_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 anahtarlara ihtiyaç duymadan App Service'ten Azure veritabanlarına bağlanmak.
Spring uygulaması için --client-type springboot seçeneğiyle bir bağlantı oluşturursanız, Hizmet Bağlayıcısı, Azure Spring Apps'e FABRIC_SQL_CONNECTIONSTRING değer formatına sahip ortam değişkeni jdbc:sqlserver://<Fabric-SQL-Identifier>.msit-database.fabric.microsoft.com,1433;databaseName=<SQL-DB-name>-<Fabric-DB-Identifier>;authentication=ActiveDirectoryMSI;'i ayarlar.
Kullanıcı tarafından atanan yönetilen kimliklere msiClientId=<msiClientId>; eklenir.
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.
spring:
datasource:
url: ${FABRIC_SQL_CONNECTIONSTRING}
Bağımlılıkları yükleyin.
python -m pip install mssql-python python-dotenv
Hizmet Bağlayıcısı tarafından eklenen ortam değişkeninden Microsoft Fabric bağlantı dizesindeki SQL veritabanını alın.
Authentication=ActiveDirectoryMSI; , yönetilen kimlikler kullanılarak bağlanırken bağlantı dizesinde gereklidir.
UID=<msiClientId> kullanıcı tarafından atanan yönetilen kimlik kullanılarak bağlanırken bağlantı dizesinde de gereklidir.
import os
from mssql_python import connect
connection_string = os.getenv('FABRIC_SQL_CONNECTIONSTRING')
# System-assigned managed identity connection string format
# `Server=tcp:<Fabric-SQL-Identifier>.msit-database.fabric.microsoft.com,1433;Database=<SQL-DB-name>-<Fabric-DB-Identifier>;Authentication=ActiveDirectoryMSI;`
# User-assigned managed identity connection string format
# `Server=tcp:<Fabric-SQL-Identifier>.msit-database.fabric.microsoft.com,1433;Database=<SQL-DB-name>-<Fabric-DB-Identifier>;UID=<msiClientId>;Authentication=ActiveDirectoryMSI;`
conn = connect(connection_string)
- Bağımlılıkları yükleyin.
go mod init <YourProjectName>
go mod tidy
- Hizmet Bağlayıcısı tarafından eklenen ortam değişkeninden Microsoft Fabric bağlantı dizesindeki SQL veritabanını alın.
package main
import (
"github.com/microsoft/go-mssqldb/azuread"
"database/sql"
"context"
"log"
"fmt"
"os"
)
var db *sql.DB
var connectionString = os.Getenv("FABRIC_SQL_CONNECTIONSTRING")
func main() {
var err error
// Create connection pool
db, err = sql.Open(azuread.DriverName, connectionString)
if err != nil {
log.Fatal("Error creating connection pool: ", err.Error())
}
ctx := context.Background()
err = db.PingContext(ctx)
if err != nil {
log.Fatal(err.Error())
}
fmt.Printf("Connected!\n")
}
Daha fazla bilgi için bkz. Azure SQL Veritabanı'nda veritabanını sorgulamak için Golang kullanma.
Daha fazla bilgi için bkz. Microsoft Fabric'te SQL veritabanınıza bağlanma.
Uygulamayı azure barındırma hizmetine dağıtma
Uygulamanızı bir Azure barındırma hizmetine dağıtın. İsteğe bağlı olarak, bu kaynakları dağıtma hakkında daha fazla bilgi için aşağıdaki kılavuzlara bakın.
Azure veritabanına başarıyla bağlanıp bağlanamadığını görmek için günlüğü denetleyin veya uygulamayı çağırın.
Sorun giderme
İzinler
İ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 |
Microsoft.DBforPostgreSQL/flexibleServers/firewallRules/write |
Yerel IP adresinin engellenmesi durumunda güvenlik duvarı kuralı oluşturmak için gereklidir |
Microsoft.DBforPostgreSQL/flexibleServers/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.DBforPostgreSQL/flexibleServers/administrators/read |
Bir Azure CLI oturum açma kullanıcısının bir veritabanı sunucusu Microsoft Entra yöneticisi olup olmadığını kontrol etmek gereklidir. |
Microsoft.DBforPostgreSQL/flexibleServers/administrators/write |
Azure CLI oturum açma kullanıcısının, veritabanı sunucusunda Microsoft Entra yöneticisi olarak atanması gerekmektedir. |
| İzin |
İşlem |
Microsoft.DBforMySQL/flexibleServers/read |
Veritabanı sunucusunun bilgilerini almak için gereklidir |
Microsoft.DBforMySQL/flexibleServers/write |
Sağlanan Kullanıcı tarafından atanan yönetilen kimliği veritabanı sunucusuna eklemek için gereklidir |
Microsoft.DBforMySQL/flexibleServers/firewallRules/write |
Yerel IP adresinin engellenmesi durumunda güvenlik duvarı kuralı oluşturmak için gereklidir |
Microsoft.DBforMySQL/flexibleServers/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.DBforMySQL/flexibleServers/administrators/read |
Bir Azure CLI oturum açma kullanıcısının bir veritabanı sunucusu Microsoft Entra yöneticisi olup olmadığını kontrol etmek gereklidir. |
Microsoft.DBforMySQL/flexibleServers/administrators/write |
Azure CLI oturum açma kullanıcısının, veritabanı sunucusunda Microsoft Entra yöneticisi olarak atanması gerekmektedir. |
| İ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 |
Bir Azure CLI oturum açma kullanıcısının bir veritabanı sunucusu Microsoft Entra yöneticisi olup olmadığını kontrol etmek gereklidir. |
Microsoft.Sql/servers/administrators/write |
Azure CLI oturum açma kullanıcısının, veritabanı sunucusunda Microsoft Entra yöneticisi olarak atanması gerekmektedir. |
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, 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: