Bu makale, Service Connector kullanarak uygulamalarınızı PostgreSQL için Azure Veritabanı'na bağlamak için kullanabileceğiniz desteklenen kimlik doğrulama yöntemlerini, istemcileri ve örnek kodu kapsar. Bu makalede, hizmet bağlantıları oluştururken elde edilen varsayılan ortam değişkeni adlarını, değerlerini ve yapılandırmasını da bulacaksınız.
Desteklenen işlem hizmetleri
Hizmet Bağlayıcısı, aşağıdaki işlem hizmetlerini PostgreSQL için Azure Veritabanı bağlamak için kullanılabilir:
- Azure App Service
- Azure Container Apps (Azure Konteyner Uygulamaları)
- Azure İşlevleri
- Azure Kubernetes Hizmeti (AKS)
- Azure Bahar Uygulamaları
Desteklenen kimlik doğrulama türleri ve istemci türleri
Aşağıdaki tabloda, Service Connector kullanarak işlem hizmetlerini PostgreSQL için Azure Veritabanı'na bağlamak için hangi kimlik doğrulama yöntemlerinin ve istemcilerinin desteklendiği gösterilmektedir. "Evet", birleşimin desteklendiğini, "Hayır" ise bunun desteklenmediğini gösterir.
| İstemci türü |
Sistem tarafından atanan yönetilen kimlik |
Kullanıcı atamalı yönetilen kimlik |
Gizli anahtar/bağlantı dizesi |
Hizmet sorumlusu |
| .NET |
Evet |
Evet |
Evet |
Evet |
| Go (Tavsiye Edilen Yaş: 8+) |
Evet |
Evet |
Evet |
Evet |
| Java (JDBC) |
Evet |
Evet |
Evet |
Evet |
| Java - Spring Boot (JDBC) |
Evet |
Evet |
Evet |
Evet |
| Node.js (pg) |
Evet |
Evet |
Evet |
Evet |
| PHP (yerleşik) |
Evet |
Evet |
Evet |
Evet |
| Python (psycopg2) |
Evet |
Evet |
Evet |
Evet |
| Python-Django |
Evet |
Evet |
Evet |
Evet |
| Ruby (ruby-pg) |
Evet |
Evet |
Evet |
Evet |
| Hiçbiri |
Evet |
Evet |
Evet |
Evet |
Not
Sistem tarafından atanan yönetilen kimlik, Kullanıcı tarafından atanan yönetilen kimlik ve Hizmet sorumlusu yalnızca Azure CLI'da desteklenir.
Varsayılan ortam değişkeni adları veya uygulama özellikleri ve örnek kod
Bağlantınızın kimlik doğrulama türüne ve istemci türüne göre aşağıdaki tablolarda bağlantı ayrıntılarına ve örnek koda başvurun. Adlandırma kuralları hakkında daha fazla bilgi için Hizmet Bağlayıcısı iç bilgileri makalesine bakın.
Sistem tarafından atanan yönetilen kimlik
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CONNECTIONSTRING |
.NET PostgreSQL bağlantı dizesi |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CONNECTIONSTRING |
JDBC PostgreSQL bağlantı dizesi |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Uygulama özellikleri |
Açıklama |
Örnek değer |
spring.datasource.azure.passwordless-enabled |
Parolasız kimlik doğrulamasını etkinleştirme |
true |
spring.datasource.url |
Veritabanı URL'si |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Veritabanı kullanıcı adı |
username |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CONNECTIONSTRING |
psycopg2 bağlantı dizesi |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_NAME |
Veritabanı adı |
<database-name> |
AZURE_POSTGRESQL_HOST |
Veritabanı ana bilgisayar URL'si |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Veritabanı kullanıcı adı |
<username> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Go PostgreSQL bağlantı dizesi |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_HOST |
Veritabanı ana bilgisayar URL'si |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Veritabanı kullanıcı adı |
<username> |
AZURE_POSTGRESQL_DATABASE |
Veritabanı adı |
<database-name> |
AZURE_POSTGRESQL_PORT |
Bağlantı noktası numarası |
5432 |
AZURE_POSTGRESQL_SSL |
SSL seçeneği |
true |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CONNECTIONSTRING |
PHP yerel PostgreSQL bağlantı dizesi |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Ruby PostgreSQL bağlantı dizesi |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_HOST |
Veritabanı ana bilgisayar URL'si |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Veritabanı kullanıcı adı |
<username> |
AZURE_POSTGRESQL_DATABASE |
Veritabanı adı |
<database-name> |
AZURE_POSTGRESQL_PORT |
Bağlantı noktası numarası |
5432 |
AZURE_POSTGRESQL_SSL |
SSL seçeneği |
true |
Örnek kod
Sistem tarafından atanan yönetilen kimliği kullanarak PostgreSQL için Azure Veritabanı bağlanmak için aşağıdaki adımlara ve koda bakın.
.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üne ait kod bölümü üzerindeki açıklama işaretini 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:
<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
azure-identity kütüphanesini kullanarak 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. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türüne ait kod bölümü üzerindeki açıklama işaretini 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 azure-identity kitaplığı ile erişim belirteci alın. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türüne ait kod bölümü üzerindeki açıklama işaretini 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. Önceki adımda alınan accessToken öğesini kullanarak veritabanına erişin.
# 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 belirtecini alın ve ardından onu, 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üne ait kod bölümü üzerindeki açıklama işaretini 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()
Bağımlılıkları yükleyin.
npm install --save @azure/identity
npm install --save pg
Kodda, @azure/identity kullanarak ve Service Connector tarafından eklenen ortam değişkenlerinden PostgreSQL bağlantı bilgilerini alarak, erişim belirtecini edinin. Bağlantıyı kurmak için bunları birleştirin. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türüne ait kod bölümü üzerindeki açıklama işaretini kaldırın.
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.
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, Azure App Service ve Azure Container Apps iki ortam değişkeni tanımlayarak yönetilen kimliklere yönelik belirteçleri almak için 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şkenlerindeki hizmet sorumlusunun kiracı kimliği, istemci kimliği ve istemci gizliliğini kullanarak ve https://ossrdbms-aad.database.windows.net/.default kapsamıyla birlikte 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. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türüne ait kod bölümü üzerindeki açıklama işaretini kaldırın.
Azure App Service ve Azure Container Apps, 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 belirtecini nasıl alacağınızla ilgili daha fazla ayrıntı görmek için Azure AD hizmetler arası erişim belirteci isteğine bakın.
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ü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 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
Kullanıcı atamalı yönetilen kimlik
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CLIENTID |
İstemci kimliğiniz |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
.NET PostgreSQL bağlantı dizesi |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CLIENTID |
İstemci kimliğiniz |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
JDBC PostgreSQL bağlantı dizesi |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Uygulama özellikleri |
Açıklama |
Örnek değer |
spring.datasource.azure.passwordless-enabled |
Parolasız kimlik doğrulamasını etkinleştirme |
true |
spring.cloud.azure.credential.client-id |
İstemci kimliğiniz |
<identity-client-ID> |
spring.cloud.azure.credential.client-managed-identity-enabled |
İstemci yönetimli kimliği etkinleştir |
true |
spring.datasource.url |
Veritabanı URL'si |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Veritabanı kullanıcı adı |
username |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CLIENTID |
İstemci kimliğiniz |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
psycopg2 bağlantı dizesi |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_NAME |
Veritabanı adı |
<database-name> |
AZURE_POSTGRESQL_HOST |
Veritabanı ana bilgisayar URL'si |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Veritabanı kullanıcı adı |
<username> |
AZURE_POSTGRESQL_CLIENTID |
İstemci kimliğiniz |
<<identity-client-ID>> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CLIENTID |
İstemci kimliğiniz |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Go PostgreSQL bağlantı dizesi |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_HOST |
Veritabanı ana bilgisayar URL'si |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Veritabanı kullanıcı adı |
<username> |
AZURE_POSTGRESQL_DATABASE |
Veritabanı adı |
<database-name> |
AZURE_POSTGRESQL_PORT |
Bağlantı noktası numarası |
5432 |
AZURE_POSTGRESQL_SSL |
SSL seçeneği |
true |
AZURE_POSTGRESQL_CLIENTID |
İstemci kimliğiniz |
<identity-client-ID> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CLIENTID |
İstemci kimliğiniz |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
PHP yerel PostgreSQL bağlantı dizesi |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CLIENTID |
İstemci kimliğiniz |
<identity-client-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Ruby PostgreSQL bağlantı dizesi |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_HOST |
Veritabanı ana bilgisayar URL'si |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Veritabanı kullanıcı adı |
<username> |
AZURE_POSTGRESQL_DATABASE |
Veritabanı adı |
<database-name> |
AZURE_POSTGRESQL_PORT |
Bağlantı noktası numarası |
5432 |
AZURE_POSTGRESQL_SSL |
SSL seçeneği |
true |
AZURE_POSTGRESQL_CLIENTID |
İstemci kimliğiniz |
<identity-client-ID> |
Örnek kod
Kullanıcı tarafından atanan yönetilen kimliği kullanarak PostgreSQL için Azure Veritabanı bağlanmak için aşağıdaki adımlara ve koda bakın.
.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üne ait kod bölümü üzerindeki açıklama işaretini 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:
<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
azure-identity kütüphanesini kullanarak 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. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türüne ait kod bölümü üzerindeki açıklama işaretini 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 azure-identity kitaplığı ile erişim belirteci alın. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türüne ait kod bölümü üzerindeki açıklama işaretini 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. Önceki adımda alınan accessToken öğesini kullanarak veritabanına erişin.
# 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 belirtecini alın ve ardından onu, 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üne ait kod bölümü üzerindeki açıklama işaretini 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()
Bağımlılıkları yükleyin.
npm install --save @azure/identity
npm install --save pg
Kodda, @azure/identity kullanarak ve Service Connector tarafından eklenen ortam değişkenlerinden PostgreSQL bağlantı bilgilerini alarak, erişim belirtecini edinin. Bağlantıyı kurmak için bunları birleştirin. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türüne ait kod bölümü üzerindeki açıklama işaretini kaldırın.
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.
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, Azure App Service ve Azure Container Apps iki ortam değişkeni tanımlayarak yönetilen kimliklere yönelik belirteçleri almak için 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şkenlerindeki hizmet sorumlusunun kiracı kimliği, istemci kimliği ve istemci gizliliğini kullanarak ve https://ossrdbms-aad.database.windows.net/.default kapsamıyla birlikte 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. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türüne ait kod bölümü üzerindeki açıklama işaretini kaldırın.
Azure App Service ve Azure Container Apps, 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 belirtecini nasıl alacağınızla ilgili daha fazla ayrıntı görmek için Azure AD hizmetler arası erişim belirteci isteğine bakın.
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ü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 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
Bağlantı dizesi
Uyarı
Microsoft, kullanılabilir en güvenli kimlik doğrulama akışını kullanmanızı önerir. Bu yordamda açıklanan kimlik doğrulama akışı, uygulamada çok yüksek düzeyde güven gerektirir ve diğer akışlarda mevcut olmayan riskleri taşır. Bu akışı yalnızca yönetilen kimlikler gibi diğer daha güvenli akışlar uygun olmadığında kullanmalısınız.
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CONNECTIONSTRING |
.NET PostgreSQL bağlantı dizesi |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CONNECTIONSTRING |
JDBC PostgreSQL bağlantı dizesi |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username>&password=<password> |
| Uygulama özellikleri |
Açıklama |
Örnek değer |
spring.datasource.url |
Veritabanı URL'si |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Veritabanı kullanıcı adı |
<username> |
spring.datasource.password |
Veritabanı parolası |
<password> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CONNECTIONSTRING |
psycopg2 bağlantı dizesi |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> password=<password> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_NAME |
Veritabanı adı |
<database-name> |
AZURE_POSTGRESQL_HOST |
Veritabanı ana bilgisayar URL'si |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Veritabanı kullanıcı adı |
<username> |
AZURE_POSTGRESQL_PASSWORD |
Veritabanı parolası |
<database-password> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Go PostgreSQL bağlantı dizesi |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> password=<password> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_HOST |
Veritabanı ana bilgisayar URL'si |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Veritabanı kullanıcı adı |
<username> |
AZURE_POSTGRESQL_PASSWORD |
Veritabanı parolası |
<password> |
AZURE_POSTGRESQL_DATABASE |
Veritabanı adı |
<database-name> |
AZURE_POSTGRESQL_PORT |
Bağlantı noktası numarası |
5432 |
AZURE_POSTGRESQL_SSL |
SSL seçeneği |
true |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CONNECTIONSTRING |
PHP yerel PostgreSQL bağlantı dizesi |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Ruby PostgreSQL bağlantı dizesi |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> password=<password> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_HOST |
Veritabanı ana bilgisayar URL'si |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Veritabanı kullanıcı adı |
<username> |
AZURE_POSTGRESQL_DATABASE |
Veritabanı adı |
<database-name> |
AZURE_POSTGRESQL_PORT |
Bağlantı noktası numarası |
5432 |
AZURE_POSTGRESQL_SSL |
SSL seçeneği |
true |
AZURE_POSTGRESQL_PASSWORD |
Veritabanı parolası |
<password> |
Örnek kod
bağlantı dizesi kullanarak PostgreSQL için Azure Veritabanı bağlanmak için aşağıdaki adımlara ve koda bakın.
-
Npgsql yönergelerini izleyerek bağımlılıkları yükleme
- Kodda, Service Connector tarafından eklenen ortam değişkenlerinden PostgreSQL bağlantı dizesini alın.
using System;
using Npgsql;
string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
{
connection.Open();
}
-
pgJDBC yönergelerini izleyerek bağımlılıkları yükleyin.
- Kodda, Service Connector tarafından eklenen ortam değişkenlerinden PostgreSQL bağlantı dizesini alın.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
String connectionString = System.getenv("AZURE_POSTGRESQL_CONNECTIONSTRING");
Connection connection = null;
try {
connection = DriverManager.getConnection(connectionString);
System.out.println("Connection successful!");
} catch (SQLException e){
System.out.println(e.getMessage());
}
- Dosyanıza
pom.xml aşağıdaki bağımlılıkları ekleyerek Spring Cloud Azure Starter JDBC PostgreSQL modülünü yükleyin. Spring Cloud Azure sürümünü burada bulabilirsiniz.
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-dependencies</artifactId>
<version>5.20.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-jdbc-postgresql</artifactId>
</dependency>
</dependencies>
</dependencyManagement>
- Spring Boot uygulaması kurma, daha fazla ayrıntı için bu bölüme bakın.
-
psycopg2 yönergelerini izleyerek bağımlılıkları yükleyin.
- Kodda, Service Connector tarafından eklenen ortam değişkenlerinden PostgreSQL bağlantı bilgilerini alın.
import os
import psycopg2
connection_string = os.getenv('AZURE_POSTGRESQL_CONNECTIONSTRING')
connection = psycopg2.connect(connection_string)
print("Connection established")
connection.close()
-
Django yönergelerini ve psycopg2 kılavuzunu izleyerek bağımlılıkları yükleyin.
pip install django
pip install psycopg2
- Ayar dosyasında, Service Connector tarafından eklenen ortam değişkenlerinden PostgreSQL veritabanı bilgilerini alın.
# in your setting file, eg. settings.py
host = os.getenv('AZURE_POSTGRESQL_HOST')
user = os.getenv('AZURE_POSTGRESQL_USER')
password = os.getenv('AZURE_POSTGRESQL_PASSWORD')
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
- Kodda, Service Connector tarafından eklenen ortam değişkenlerinden PostgreSQL bağlantı dizesini alın.
import (
"database/sql"
"fmt"
"os"
_ "github.com/lib/pq"
)
connectionString := os.Getenv("AZURE_POSTGRESQL_CONNECTIONSTRING")
conn, err := sql.Open("postgres", connectionString)
if err != nil {
panic(err)
}
conn.Close()
- Bağımlılıkları yükleyin.
npm install pg dotenv
- Kodda, Service Connector tarafından eklenen ortam değişkenlerinden PostgreSQL bağlantı bilgilerini alın.
import { Client } from 'pg';
(async () => {
const client = new Client({
host: process.env.AZURE_POSTGRESQL_HOST,
user: process.env.AZURE_POSTGRESQL_USER,
password: process.env.AZURE_POSTGRESQL_PASSWORD,
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();
})();
- Kodda, Service Connector tarafından eklenen ortam değişkenlerinden PostgreSQL bağlantı bilgilerini alın.
<?php
$conn_string = getenv('AZURE_POSTGRESQL_CONNECTIONSTRING');
$dbconn = pg_connect($conn_string);
?>
- Bağımlılıkları yükleyin.
gem install pg
- Kodda, Service Connector tarafından eklenen ortam değişkenlerinden PostgreSQL bağlantı bilgilerini alın.
require 'pg'
require 'dotenv/load'
begin
conn = PG::Connection.new(
connection_string: ENV['AZURE_POSTGRESQL_CONNECTIONSTRING'],
)
rescue PG::Error => e
puts e.message
ensure
connection.close if connection
end
Hizmet sorumlusu
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CLIENTID |
İstemci kimliğiniz |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
İstemci gizli anahtarınız |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Kiracı kimliğiniz |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
.NET PostgreSQL bağlantı dizesi |
Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>; |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CLIENTID |
İstemci kimliğiniz |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
İstemci gizli anahtarınız |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Kiracı kimliğiniz |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
JDBC PostgreSQL bağlantı dizesi |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require&user=<username> |
| Uygulama özellikleri |
Açıklama |
Örnek değer |
spring.datasource.azure.passwordless-enabled |
Parolasız kimlik doğrulamasını etkinleştirme |
true |
spring.cloud.azure.credential.client-id |
İstemci kimliğiniz |
<client-ID> |
spring.cloud.azure.credential.client-secret |
İstemci gizli anahtarınız |
<client-secret> |
spring.cloud.azure.credential.tenant-id |
Kiracı kimliğiniz |
<tenant-ID> |
spring.datasource.url |
Veritabanı URL'si |
jdbc:postgresql://<PostgreSQL-server-name>.postgres.database.azure.com:5432/<database-name>?sslmode=require |
spring.datasource.username |
Veritabanı kullanıcı adı |
username |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CLIENTID |
İstemci kimliğiniz |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
İstemci gizli anahtarınız |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Kiracı kimliğiniz |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
psycopg2 bağlantı dizesi |
dbname=<database-name> host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 sslmode=require user=<username> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_NAME |
Veritabanı adı |
<database-name> |
AZURE_POSTGRESQL_HOST |
Veritabanı ana bilgisayar URL'si |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Veritabanı kullanıcı adı |
<username> |
AZURE_POSTGRESQL_CLIENTID |
İstemci kimliğiniz |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
Müşterinizin Gizli Bilgisi |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Kiracı kimliğiniz |
<tenant-ID> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CLIENTID |
İstemci kimliğiniz |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
İstemci gizli anahtarınız |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Kiracı kimliğiniz |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Go PostgreSQL bağlantı dizesi |
host=<PostgreSQL-server-name>.postgres.database.azure.com dbname=<database-name> sslmode=require user=<username> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_HOST |
Veritabanı ana bilgisayar URL'si |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USER |
Veritabanı kullanıcı adı |
<username> |
AZURE_POSTGRESQL_DATABASE |
Veritabanı adı |
<database-name> |
AZURE_POSTGRESQL_PORT |
Bağlantı noktası numarası |
5432 |
AZURE_POSTGRESQL_SSL |
SSL seçeneği |
true |
AZURE_POSTGRESQL_CLIENTID |
İstemci kimliğiniz |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
İstemci gizli anahtarınız |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Kiracı kimliğiniz |
<tenant-ID> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CLIENTID |
İstemci kimliğiniz |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
İstemci gizli anahtarınız |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Kiracı kimliğiniz |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
PHP yerel PostgreSQL bağlantı dizesi |
host=<PostgreSQL-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_CLIENTID |
İstemci kimliğiniz |
<client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
İstemci gizli anahtarınız |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Kiracı kimliğiniz |
<tenant-ID> |
AZURE_POSTGRESQL_CONNECTIONSTRING |
Ruby PostgreSQL bağlantı dizesi |
host=<your-postgres-server-name>.postgres.database.azure.com port=5432 dbname=<database-name> sslmode=require user=<username> |
| Varsayılan ortam değişkeni adı |
Açıklama |
Örnek değer |
AZURE_POSTGRESQL_HOST |
Veritabanı ana bilgisayar URL'si |
<PostgreSQL-server-name>.postgres.database.azure.com |
AZURE_POSTGRESQL_USERNAME |
Veritabanı kullanıcı adı |
<username> |
AZURE_POSTGRESQL_DATABASE |
Veritabanı adı |
<database-name> |
AZURE_POSTGRESQL_PORT |
Bağlantı noktası numarası |
5432 |
AZURE_POSTGRESQL_SSL |
SSL seçeneği |
true |
AZURE_POSTGRESQL_CLIENTID |
İstemci kimliğiniz |
<identity-client-ID> |
AZURE_POSTGRESQL_CLIENTSECRET |
İstemci gizli anahtarınız |
<client-secret> |
AZURE_POSTGRESQL_TENANTID |
Kiracı kimliğiniz |
<tenant-ID> |
Örnek kod
Hizmet sorumlusu kullanarak PostgreSQL için Azure Veritabanı bağlanmak için aşağıdaki adımlara ve koda bakın.
.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üne ait kod bölümü üzerindeki açıklama işaretini 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:
<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
azure-identity kütüphanesini kullanarak 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. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türüne ait kod bölümü üzerindeki açıklama işaretini 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 azure-identity kitaplığı ile erişim belirteci alın. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türüne ait kod bölümü üzerindeki açıklama işaretini 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. Önceki adımda alınan accessToken öğesini kullanarak veritabanına erişin.
# 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 belirtecini alın ve ardından onu, 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üne ait kod bölümü üzerindeki açıklama işaretini 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()
Bağımlılıkları yükleyin.
npm install --save @azure/identity
npm install --save pg
Kodda, @azure/identity kullanarak ve Service Connector tarafından eklenen ortam değişkenlerinden PostgreSQL bağlantı bilgilerini alarak, erişim belirtecini edinin. Bağlantıyı kurmak için bunları birleştirin. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türüne ait kod bölümü üzerindeki açıklama işaretini kaldırın.
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.
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, Azure App Service ve Azure Container Apps iki ortam değişkeni tanımlayarak yönetilen kimliklere yönelik belirteçleri almak için 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şkenlerindeki hizmet sorumlusunun kiracı kimliği, istemci kimliği ve istemci gizliliğini kullanarak ve https://ossrdbms-aad.database.windows.net/.default kapsamıyla birlikte 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. Aşağıdaki kodu kullanırken, kullanmak istediğiniz kimlik doğrulama türüne ait kod bölümü üzerindeki açıklama işaretini kaldırın.
Azure App Service ve Azure Container Apps, 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 belirtecini nasıl alacağınızla ilgili daha fazla ayrıntı görmek için Azure AD hizmetler arası erişim belirteci isteğine bakın.
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ü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 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
Sonraki adımlar
Service Connector hakkında daha fazla bilgi edinmek için aşağıda listelenen öğreticileri izleyin.