Megosztás a következőn keresztül:


Az Azure Database for PostgreSQL integrálása a Service Connector használatával

Ez a lap a támogatott hitelesítési módszereket és ügyfeleket mutatja be, valamint az Azure Database for PostgreSQL szolgáltatással más felhőszolgáltatásokhoz való csatlakoztatásához használható mintakódot. Előfordulhat, hogy a Service Connector használata nélkül más programozási nyelveken is csatlakozhat az Azure Database for PostgreSQL-hez. Ezen a lapon láthatók a környezeti változók alapértelmezett nevei és értékei (vagy a Spring Boot-konfiguráció), amely a szolgáltatáskapcsolat létrehozásakor jelenik meg.

Támogatott számítási szolgáltatások

A Service Connector segítségével a következő számítási szolgáltatásokat csatlakoztathatja az Azure Database for PostgreSQL-hez:

  • Azure App Service
  • Azure Container-alkalmazások
  • Azure Functions
  • Azure Kubernetes Service (AKS)
  • Azure Spring Apps

Támogatott hitelesítési típusok és ügyféltípusok

Az alábbi táblázat azt mutatja be, hogy a hitelesítési módszerek és az ügyfelek mely kombinációi támogatottak a számítási szolgáltatásnak az Azure Database for PostgreSQL-hez a Service Connector használatával való csatlakoztatásához. Az "Igen" azt jelzi, hogy a kombináció támogatott, míg a "Nem" azt jelzi, hogy nem támogatott.

Ügyfél típusa Rendszer által hozzárendelt felügyelt identitás Felhasználó által hozzárendelt felügyelt identitás Titkos kód/kapcsolati sztring Szolgáltatásnév
.NET Igen Igen Igen Igen
Ugrás (pg) Igen Igen Igen Igen
Java (JDBC) Igen Igen Igen Igen
Java – Spring Boot (JDBC) Igen Igen Igen Igen
Node.js (pg) Igen Igen Igen Igen
PHP (natív) Igen Igen Igen Igen
Python (psycopg2) Igen Igen Igen Igen
Python-Django Igen Igen Igen Igen
Rubin (rubin-pg) Igen Igen Igen Igen
Egyik sem Igen Igen Igen Igen

Ez a táblázat azt jelzi, hogy a tábla ügyféltípusainak és hitelesítési módszereinek összes kombinációja támogatott. Minden ügyféltípus a hitelesítési módszerek bármelyikével csatlakozhat az Azure Database for PostgreSQL-hez a Service Connector használatával.

Feljegyzés

A rendszer által hozzárendelt felügyelt identitás, a felhasználó által hozzárendelt felügyelt identitás és a szolgáltatásnév csak az Azure CLI-n támogatott.

Alapértelmezett környezeti változónevek vagy alkalmazástulajdonságok és mintakód

A számítási szolgáltatások Azure Database for PostgreSQL-hez való csatlakoztatásához hivatkozzon a kapcsolat részleteire és a mintakódra az alábbi táblázatokban a kapcsolat hitelesítési típusának és ügyféltípusának megfelelően. Az elnevezési konvenciókról a Service Connector belsős cikkében talál további információt.

Rendszer által hozzárendelt felügyelt identitás

Alapértelmezett környezeti változó neve Leírás Példaérték
AZURE_POSTGRESQL_CONNECTIONSTRING .NET PostgreSQL kapcsolati sztring Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Mintakód

Az alábbi lépéseket és kódot követve csatlakozhat az Azure Database for PostgreSQL-hez egy rendszer által hozzárendelt felügyelt identitás használatával.

A .NET esetében nincs beépülő modul vagy tár a jelszó nélküli kapcsolatok támogatásához. A felügyelt identitáshoz vagy szolgáltatásnévhez hozzáférési jogkivonatot kérhet le az olyan ügyfélkódtárak használatával, mint az Azure.Identity. Ezután jelszóként használhatja a hozzáférési jogkivonatot az adatbázishoz való csatlakozáshoz. Az alábbi kód használatakor bontsa ki a kódrészlet azon részét, amely a használni kívánt hitelesítési típushoz tartozik.

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();
}

Ezután, ha a Service Connector használata előtt táblákat és szekvenciákat hozott létre a Rugalmas PostgreSQL-kiszolgálón, tulajdonosként kell csatlakoznia, és engedélyt kell adnia a Service Connector általi létrehozásra <aad-username> . A Service Connector által beállított kapcsolati sztring vagy konfigurációs csoport felhasználónevének a következőképpen aad_<connection name>kell kinéznie. Ha az Azure Portalt használja, válassza az oszlop melletti Service Type kibontás gombot, és kérje le az értéket. Ha az Azure CLI-t használja, ellenőrizze configurations a PARANCSSOR parancs kimenetét.

Ezután hajtsa végre a lekérdezést az engedély megadásához

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>\";"

A <owner-username> meglévő tábla tulajdonosa, <owner-password> amely engedélyeket adhat másoknak. <aad-username> a Service Connector által létrehozott felhasználó. Cserélje le őket a tényleges értékre.

Ellenőrizze az eredményt a következő paranccsal:

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

Felhasználó által hozzárendelt felügyelt identitás

Alapértelmezett környezeti változó neve Leírás Példaérték
AZURE_POSTGRESQL_CLIENTID Az ügyfél azonosítója <identity-client-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING .NET PostgreSQL kapcsolati sztring Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Mintakód

Tekintse meg az alábbi lépéseket és kódot az Azure Database for PostgreSQL-hez való csatlakozáshoz egy felhasználó által hozzárendelt felügyelt identitás használatával.

A .NET esetében nincs beépülő modul vagy tár a jelszó nélküli kapcsolatok támogatásához. A felügyelt identitáshoz vagy szolgáltatásnévhez hozzáférési jogkivonatot kérhet le az olyan ügyfélkódtárak használatával, mint az Azure.Identity. Ezután jelszóként használhatja a hozzáférési jogkivonatot az adatbázishoz való csatlakozáshoz. Az alábbi kód használatakor bontsa ki a kódrészlet azon részét, amely a használni kívánt hitelesítési típushoz tartozik.

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();
}

Ezután, ha a Service Connector használata előtt táblákat és szekvenciákat hozott létre a Rugalmas PostgreSQL-kiszolgálón, tulajdonosként kell csatlakoznia, és engedélyt kell adnia a Service Connector általi létrehozásra <aad-username> . A Service Connector által beállított kapcsolati sztring vagy konfigurációs csoport felhasználónevének a következőképpen aad_<connection name>kell kinéznie. Ha az Azure Portalt használja, válassza az oszlop melletti Service Type kibontás gombot, és kérje le az értéket. Ha az Azure CLI-t használja, ellenőrizze configurations a PARANCSSOR parancs kimenetét.

Ezután hajtsa végre a lekérdezést az engedély megadásához

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>\";"

A <owner-username> meglévő tábla tulajdonosa, <owner-password> amely engedélyeket adhat másoknak. <aad-username> a Service Connector által létrehozott felhasználó. Cserélje le őket a tényleges értékre.

Ellenőrizze az eredményt a következő paranccsal:

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

Kapcsolati sztring

Figyelmeztetés

A Microsoft azt javasolja, hogy a legbiztonságosabb hitelesítési folyamatot használja. Az ebben az eljárásban leírt hitelesítési folyamat nagyon nagy megbízhatóságot igényel az alkalmazásban, és olyan kockázatokat hordoz, amelyek más folyamatokban nem jelennek meg. Ezt a folyamatot csak akkor érdemes használni, ha más biztonságosabb folyamatok, például a felügyelt identitások nem életképesek.

Alapértelmezett környezeti változó neve Leírás Példaérték
AZURE_POSTGRESQL_CONNECTIONSTRING .NET PostgreSQL kapcsolati sztring Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Mintakód

Az Azure Database for PostgreSQL-hez való csatlakozáshoz tekintse meg az alábbi lépéseket és kódot egy kapcsolati sztring használatával.

  1. Telepítse a függőségeket. Kövesse az útmutatót az Npgsql telepítéséhez
  2. Kódban kérje le a PostgreSQL-kapcsolati sztring a Service Connector szolgáltatás által hozzáadott környezeti változókból. A PostgreSQL-kiszolgáló TSL-konfigurációinak beállításához tekintse meg ezeket a lépéseket.
    using System;
    using Npgsql;
    
    string connectionString = Environment.GetEnvironmentVariable("AZURE_POSTGRESQL_CONNECTIONSTRING");
    using (NpgsqlConnection connection = new NpgsqlConnection(connectionString))
    {
        connection.Open();
    }
    

Szolgáltatásnév

Alapértelmezett környezeti változó neve Leírás Példaérték
AZURE_POSTGRESQL_CLIENTID Az ügyfél azonosítója <client-ID>
AZURE_POSTGRESQL_CLIENTSECRET Az ügyfél titkos kódja <client-secret>
AZURE_POSTGRESQL_TENANTID A bérlő azonosítója <tenant-ID>
AZURE_POSTGRESQL_CONNECTIONSTRING .NET PostgreSQL kapcsolati sztring Server=<PostgreSQL-server-name>.postgres.database.azure.com;Database=<database-name>;Port=5432;Ssl Mode=Require;User Id=<username>;

Mintakód

Tekintse meg az alábbi lépéseket és kódot az Azure Database for PostgreSQL szolgáltatásnévvel való csatlakozásához.

A .NET esetében nincs beépülő modul vagy tár a jelszó nélküli kapcsolatok támogatásához. A felügyelt identitáshoz vagy szolgáltatásnévhez hozzáférési jogkivonatot kérhet le az olyan ügyfélkódtárak használatával, mint az Azure.Identity. Ezután jelszóként használhatja a hozzáférési jogkivonatot az adatbázishoz való csatlakozáshoz. Az alábbi kód használatakor bontsa ki a kódrészlet azon részét, amely a használni kívánt hitelesítési típushoz tartozik.

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();
}

Ezután, ha a Service Connector használata előtt táblákat és szekvenciákat hozott létre a Rugalmas PostgreSQL-kiszolgálón, tulajdonosként kell csatlakoznia, és engedélyt kell adnia a Service Connector általi létrehozásra <aad-username> . A Service Connector által beállított kapcsolati sztring vagy konfigurációs csoport felhasználónevének a következőképpen aad_<connection name>kell kinéznie. Ha az Azure Portalt használja, válassza az oszlop melletti Service Type kibontás gombot, és kérje le az értéket. Ha az Azure CLI-t használja, ellenőrizze configurations a PARANCSSOR parancs kimenetét.

Ezután hajtsa végre a lekérdezést az engedély megadásához

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>\";"

A <owner-username> meglévő tábla tulajdonosa, <owner-password> amely engedélyeket adhat másoknak. <aad-username> a Service Connector által létrehozott felhasználó. Cserélje le őket a tényleges értékre.

Ellenőrizze az eredményt a következő paranccsal:

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

Következő lépések

A Service Connectorról az alábbi oktatóanyagok alapján tájékozódhat.