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


Csatlakozás Microsoft Entra-hitelesítéssel

JDBC-illesztőprogram letöltése

Ez a cikk bemutatja, hogyan fejleszthet olyan Java-alkalmazásokat, amelyek a Microsoft Entra hitelesítési funkciót használják az SQL Serverhez készült Microsoft JDBC-illesztőprogrammal.

A Microsoft Entra-hitelesítéssel csatlakozhat az Azure SQL Database-hez, az Azure SQL Manged-példányhoz és az Azure Synapse Analyticshez a Microsoft Entra ID-identitások használatával. A Microsoft Entra-hitelesítéssel központilag kezelheti az adatbázis-felhasználók identitásait, és alternatívaként használhatja az SQL Server-hitelesítést. A JDBC-illesztő lehetővé teszi a Microsoft Entra hitelesítő adatainak megadását a JDBC kapcsolati sztringben az Azure SQL-hez való csatlakozáshoz. A Microsoft Entra-hitelesítés konfigurálásáról további információt Csatlakozás az Azure SQL-hez Microsoft Entra-hitelesítésihasználatával című témakörben talál.

A Microsoft Entra-hitelesítést támogató kapcsolati tulajdonságok az SQL ServerHez készült Microsoft JDBC-illesztőprogramban a következők:

  • hitelesítési: Ezzel a tulajdonságtal jelezheti, hogy melyik SQL-hitelesítési módszert használja a kapcsolathoz. A lehetséges értékek a következők:
    • Active Directory Kezelt Identitás

      • A 8.3.1-es illesztőprogram-verzió óta authentication=ActiveDirectoryMSI használható azure SQL Database-adatbázishoz/Synapse Analyticshez való csatlakozáshoz egy Olyan Azure-erőforrásból, amelyen engedélyezve van az "Identitás" támogatás. Opcionálisan msiClientId is megadható a Connection/DataSource tulajdonságokban ezzel a hitelesítési móddal együtt. A msiClientId mezőnek tartalmaznia kell a kapcsolat létesítéséhez használandó átvételi token (accessToken) megszerzéséhez szükséges felügyelt identitás ügyfélazonosítóját. A 12.2-es illesztőprogram-verzió óta authentication=ActiveDirectoryManagedIdentity is használható azure SQL Database-hez/Synapse Analytics-hez való csatlakozáshoz egy Olyan Azure-erőforrásból, amelyen engedélyezve van az "Identitás" támogatás. A felügyelt identitás ügyfélazonosítója is beállítható a user tulajdonságban. További információ: Csatlakozás ActiveDirectoryManagedIdentity hitelesítési móddal.
    • Active Directory alapértelmezés

      • A 12.2-es illesztőprogram-verzió óta authentication=ActiveDirectoryDefault használható az Azure SQL/Synapse Analyticshez való csatlakozáshoz az Azure Identity-ügyfélkódtárból származó DefaultAzureCredential keresztül. További információ: Csatlakozás ActiveDirectoryDefault hitelesítési móddal.
    • Active Directory-vel integrált

      • A 6.0-s illesztőprogram-verzió óta authentication=ActiveDirectoryIntegrated használható az Azure SQL/Synapse Analyticshez való csatlakozáshoz integrált hitelesítéssel. A hitelesítési mód használatához össze kell vonni a helyszíni Active Directory összevonási szolgáltatásokat (ADFS) a felhőbeli Microsoft Entra ID-vel. A beállítás után csatlakozhat úgy, hogy hozzáadja a natív könyvtár mssql-jdbc_auth-<version>-<arch>.dll-t a Windows alkalmazás osztályútvonalához, vagy egy Kerberos-jegyet állít be a platformfüggetlen hitelesítési támogatás érdekében. Az Azure SQL/Azure Synapse Analytics szolgáltatáshoz anélkül férhet hozzá, hogy a rendszer hitelesítő adatokat kér a tartományhoz csatlakoztatott gépre való bejelentkezéskor. További információért lásd: Csatlakozás "ActiveDirectoryIntegrated" hitelesítési mód használatával.
    • ActiveDirectoryPassword

    • Active Directory Interaktív

      • A 9.2-es illesztőprogram-verzió óta authentication=ActiveDirectoryInteractive interaktív hitelesítési folyamaton (többtényezős hitelesítésen) keresztül csatlakozhat egy Azure SQL/Synapse Analytics szolgáltatáshoz. További információ: Csatlakozás ActiveDirectoryInteractive hitelesítési móddal.
    • Active Directory Szolgáltatás Főszereplő

      • A 9.2-es illesztőprogram-verzió óta authentication=ActiveDirectoryServicePrincipal az Azure SQL/Synapse Analyticshez való csatlakozáshoz használható az alkalmazás/ügyfél azonosító megadásával a userName tulajdonságban, valamint egy szolgáltatásnév-identitás titkos kulcsának megadásával a jelszótulajdonságban. További információért lásd: Csatlakozás ActiveDirectoryServicePrincipal hitelesítési móddal.
    • ActiveDirectorySzolgáltatásiFőtanúsítvány

      • A 12.4-es illesztőprogram-verzió óta az Azure SQL Database-hez/Synapse Analyticshez történő csatlakozáshoz a authentication=ActiveDirectoryServicePrincipalCertificate használható az alkalmazás/ügyfélazonosító megadásával a userName tulajdonságban, és a szolgáltatásnév tanúsítványának helyét a clientCertificate tulajdonságban megjelölve. További információért lásd: Csatlakozás ActiveDirectoryServicePrincipalCertificate hitelesítési móddal.
    • SqlPassword

      • A authentication=SqlPassword használatával userName/felhasználó- és jelszótulajdonságok használatával csatlakozhat egy SQL Serverhez.
    • Nem meghatározott

      • Használja authentication=NotSpecified, vagy hagyja meg alapértelmezettként, ha egyik hitelesítési módszer sem szükséges.
    • accessToken: Ezzel a kapcsolati tulajdonsággal csatlakozhat egy hozzáférési jogkivonattal rendelkező SQL Database-adatbázishoz. accessToken csak a DriverManager osztályban lévő getConnection() metódus Tulajdonságok paraméterével állítható be. A kapcsolat URL-címében nem használható.

További információkért tekintse meg a hitelesítési tulajdonságot a Kapcsolat tulajdonságainak beállítása lapon.

Ügyfélbeállítási követelmények

Az alapvető illesztőprogram-rendszerkövetelményekmellett az alábbi hitelesítési módok több követelményt is támasztanak.

Az alábbi táblázat az egyes hitelesítési módokhoz és illesztőprogram-verziókhoz szükséges kódtár-függőségeket sorolja fel. A függőségek függőségei is szükségesek.

Jegyzet

Azokban az esetekben, amikor egy fő kiadás gyorsjavítása a fő kiadástól eltérő függőségi verzióval rendelkezik, a gyorsjavítás is megjelenik.

Hitelesítési lehetőség Illesztőprogram-verziók Könyvtárfüggőségek
ActiveDirectoryPassword
ActiveDirectoryIntegrated
6,0 Adal4j 1.3.0
ActiveDirectoryPassword
ActiveDirectoryIntegrated
6.2.2 - 6.4 Adal4j 1.4.0
ActiveDirectoryPassword
ActiveDirectoryIntegrated
7.0 Adal4j 1.6.0
ActiveDirectoryPassword
ActiveDirectoryIntegrated
7.2 Adal4j 1.6.3
Client-Runtime-for-AutoRest 1.6.5
ActiveDirectoryPassword
ActiveDirectoryIntegrated
7.4 - 8.2 Adal4j 1.6.4
Client-Runtime-for-AutoRest 1.7.0
ActiveDirectoryPassword
ActiveDirectoryIntegrated
8.4 Adal4j 1.6.5
Client-Runtime-for-AutoRest 1.7.4
ActiveDirectoryPassword
ActiveDirectoryIntegrated
ActiveDirectoryInteractive
ActiveDirectoryServicePrincipal
9,2 msal4j 1.7.1
ActiveDirectoryPassword
ActiveDirectoryIntegrated
ActiveDirectoryInteractive
ActiveDirectoryServicePrincipal
9,4 msal4j 1.10.1
ActiveDirectoryPassword
ActiveDirectoryIntegrated
ActiveDirectoryInteractive
ActiveDirectoryServicePrincipal
10,2 msal4j 1.11.0
ActiveDirectoryPassword
ActiveDirectoryIntegrated
ActiveDirectoryInteractive
ActiveDirectoryServicePrincipal
11.2 msal4j 1.11.3
ActiveDirectoryPassword
ActiveDirectoryIntegrated
ActiveDirectoryInteractive
ActiveDirectoryServicePrincipal
11.2.3 msal4j 1.13.0
ActiveDirectoryPassword
ActiveDirectoryIntegrated
ActiveDirectoryInteractive
ActiveDirectoryServicePrincipal
12.2 msal4j 1.13.3
ActiveDirectoryManagedIdentity
ActiveDirectoryMSI
ActiveDirectoryDefault
12.2 azure-identity 1.7.0
ActiveDirectoryPassword
ActiveDirectoryIntegrated
ActiveDirectoryInteractive
ActiveDirectoryServicePrincipal
ActiveDirectoryServicePrincipalCertificate
12.4 msal4j 1.13.8
ActiveDirectoryManagedIdentity
ActiveDirectoryMSI
ActiveDirectoryDefault
12.4 azure-identity 1.9.0
ActiveDirectoryPassword
ActiveDirectoryIntegrated
ActiveDirectoryInteractive
ActiveDirectoryServicePrincipal
ActiveDirectoryServicePrincipalCertificate
12,6 msal4j 1.14.1
ActiveDirectoryManagedIdentity
ActiveDirectoryMSI
ActiveDirectoryDefault
12,6 azure-identity 1.11.1
ActiveDirectoryPassword
ActiveDirectoryIntegrated
ActiveDirectoryInteractive
ActiveDirectoryServicePrincipal
ActiveDirectoryServicePrincipalCertificate
12.6.3 msal4j 1.15.1
ActiveDirectoryManagedIdentity
ActiveDirectoryMSI
ActiveDirectoryDefault
12.6.3 azure-identity 1.12.2
ActiveDirectoryPassword
ActiveDirectoryIntegrated
ActiveDirectoryInteractive
ActiveDirectoryServicePrincipal
ActiveDirectoryServicePrincipalCertificate
12.6.4 msal4j 1.15.1
ActiveDirectoryManagedIdentity
ActiveDirectoryMSI
ActiveDirectoryDefault
12.6.4 azure-identity 1.12.2
ActiveDirectoryPassword
ActiveDirectoryIntegrated
ActiveDirectoryInteractive
ActiveDirectoryServicePrincipal
ActiveDirectoryServicePrincipalCertificate
12.8 msal4j 1.15.1
ActiveDirectoryManagedIdentity
ActiveDirectoryMSI
ActiveDirectoryDefault
12.8 azure-identity 1.12.2
ActiveDirectoryPassword
ActiveDirectoryIntegrated
ActiveDirectoryInteractive
ActiveDirectoryServicePrincipal
ActiveDirectoryServicePrincipalCertificate
ActiveDirectoryManagedIdentity
ActiveDirectoryMSI
ActiveDirectoryDefault
12.10 azure-identity 1.15.3

Csatlakozás ActiveDirectoryManagedIdentity hitelesítési móddal

Ez a hitelesítési mód a 7.2-es verziótól kezdve támogatott. A használatához adja meg a authentication=ActiveDirectoryMSIértéket. A 12.2-es verziótól kezdve authentication=ActiveDirectoryManagedIdentity is megadható.

Az ügyfélbeállítási követelményeifelsorolt könyvtárfüggőség-követelmények mellett ez a funkció a következő követelményekkel rendelkezik:

Az alábbi példa bemutatja, hogyan használható authentication=ActiveDirectoryManagedIdentity mód. Futtassa ezt a példát egy felügyelt identitáshoz konfigurált Azure-erőforrásból.

A példa futtatásához cserélje le a kiszolgáló/adatbázis nevét az ön kiszolgálója/adatbázisának a nevére a következő sorokban:

ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name
ds.setDatabaseName("demo"); // replace with your database name
//Optional
ds.setMSIClientId("<managed_identity_client>"); // Replace with Client ID of user-assigned managed identity to be used

Példa ActiveDirectoryMSI hitelesítési mód használatára:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import com.microsoft.sqlserver.jdbc.SQLServerDataSource;

public class MsEntraMSI {
    public static void main(String[] args) throws Exception {

        SQLServerDataSource ds = new SQLServerDataSource();
        ds.setServerName("msentra-managed-demo.database.windows.net"); // Replace with your server name
        ds.setDatabaseName("demo"); // Replace with your database name
        ds.setAuthentication("ActiveDirectoryMSI");
        // Optional
        ds.setMSIClientId("<managed_identity_client_guid>"); // Replace with Client ID of user-assigned managed identity to be used

        try (Connection connection = ds.getConnection();
                Statement stmt = connection.createStatement();
                ResultSet rs = stmt.executeQuery("SELECT SUSER_SNAME()")) {
            if (rs.next()) {
                System.out.println("You have successfully logged on as: " + rs.getString(1));
            }
        }
    }
}

Az alábbi példa bemutatja, hogyan használható authentication=ActiveDirectoryManagedIdentity mód.

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import com.microsoft.sqlserver.jdbc.SQLServerDataSource;

public class MSEntraManagedIdentity {
    public static void main(String[] args) throws Exception {

        SQLServerDataSource ds = new SQLServerDataSource();
        ds.setServerName("msentra-managed-demo.database.windows.net"); // Replace with your server name
        ds.setDatabaseName("demo"); // Replace with your database name
        ds.setAuthentication("ActiveDirectoryManagedIdentity"); // ActiveDirectoryManagedIdentity for JDBC driver version v12.2.0+
        // Optional
        ds.setUser("<managed_identity_client>"); // Replace with Client ID of User-Assigned Managed Identity to be used

        try (Connection connection = ds.getConnection();
                Statement stmt = connection.createStatement();
                ResultSet rs = stmt.executeQuery("SELECT SUSER_SNAME()")) {
            if (rs.next()) {
                System.out.println("You have successfully logged on as: " + rs.getString(1));
            }
        }
    }
}

Ezek az Azure-beli virtuális gépeken található példák lekérnek egy hozzáférési jogkivonatot rendszer által hozzárendelt felügyelt identitásból vagy felhasználó által hozzárendelt felügyelt identitás (ha msiClientId vagy user van megadva egy felügyelt identitás ügyfélazonosítójával), és kapcsolatot hoz létre a lekért hozzáférési jogkivonat használatával. Ha létrejött a kapcsolat, a következő üzenetnek kell megjelennie:

You have successfully logged on as: <your Managed Identity username>

Csatlakozás ActiveDirectoryDefault hitelesítési móddal

A ActiveDirectoryDefault hitelesítési lehetőség az Azure Identity-ügyfélkódtár DefaultAzureCredential láncolt TokenCredential implementációját használja. A hitelesítési adat egyesíti a gyakran használt hitelesítési módszereket.

ActiveDirectoryDefault hitelesítés futásidejű függőséget igényel a felügyelt identitáshoz szükséges Azure Identity ügyfélkönyvtárra. A kódtár verziójának részleteiért lásd ügyfélbeállítási követelményeket.

Az alábbi táblázat az egyes JDBC-illesztőprogram-verziókhoz tartozó DefaultAzureCredential hitelesítőadat-láncot sorolja fel.

Illesztőprogram verziója azure-identity verzió DefaultAzureCredential lánc
12.2 azure-identity 1.7.0 Környezet
Felügyelt identitás
IntelliJ
Azure CLI (Az Azure parancssori felülete)
Azure PowerShell
12.4 azure-identity 1.9.0 Környezet
Munkaterhelés identitás
Felügyelt identitás
Azure Developer CLI
IntelliJ
Azure CLI (Az Azure parancssori felülete)
Azure PowerShell
12,6 azure-identity 1.11.1 Környezet
Munkaterhelés identitás
Felügyelt identitás
Azure Developer CLI
IntelliJ
Azure CLI (Az Azure parancssori felülete)
Azure PowerShell
12.8 azure-identity 1.12.2 Környezet
Munkaterhelés identitás
Felügyelt identitás
Azure Developer CLI
IntelliJ
Azure CLI (Az Azure parancssori felülete)
Azure PowerShell
12.10 azure-identity 1.15.3 Környezet
Munkaterhelés identitás
Felügyelt identitás
Azure Developer CLI
IntelliJ
Azure CLI (Az Azure parancssori felülete)
Azure PowerShell

Számos változó állítható be a Environment hitelesítő adatok konfigurálásához. A DefaultAzureCredential lánc konfigurálásával kapcsolatos részletekért, beleértve a Environment hitelesítő adatokat is, tekintse meg az előző táblázatban csatolt Azure-Identity-dokumentumok megfelelő verzióját.

A windowsos IntellijCredential használatához állítsa a INTELLIJ_KEEPASS_PATH környezeti változót a keepass fájl helyére. Például INTELLIJ_KEEPASS_PATH=C:\user\your\path\to\the\keepass\file.

Ha több bérlőt szeretne hozzáadni a DefaultAzureCredentialszámára, használja a ADDITIONALLY_ALLOWED_TENANTS környezeti változót. Ez a változó vesszővel tagolt listát használ. Például ADDITIONALLY_ALLOWED_TENANTS=<your-tenant-id-0>,<your-tenant-id-1>,<your-tenant-id-2>,...

Az alábbi példa bemutatja, hogyan használható a authentication=ActiveDirectoryDefault mód az AzureCliCredential keretein belül DefaultAzureCredential.

  1. Először jelentkezzen be az Azure CLI-be a következő paranccsal.

    az login
    
  2. Miután sikeresen bejelentkezett az Azure CLI-be, futtassa a következő kódot.

    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Statement;
    
    import com.microsoft.sqlserver.jdbc.SQLServerDataSource;
    
    public class MSEntraDefault {
        public static void main(String[] args) throws Exception {
    
            SQLServerDataSource ds = new SQLServerDataSource();
            ds.setServerName("msentra-managed-demo.database.windows.net"); // Replace with your server name
            ds.setDatabaseName("demo"); // Replace with your database name
            ds.setAuthentication("ActiveDirectoryDefault");
    
            try (Connection connection = ds.getConnection();
                    Statement stmt = connection.createStatement();
                    ResultSet rs = stmt.executeQuery("SELECT SUSER_SNAME()")) {
                if (rs.next()) {
                    System.out.println("You have successfully logged on as: " + rs.getString(1));
                }
            }
        }
    }
    

Csatlakozás ActiveDirectoryIntegrated hitelesítési móddal

A ActiveDirectoryIntegrated-hitelesítés kétféleképpen használható az SQL Serverhez készült Microsoft JDBC-illesztőprogramban:

Győződjön meg arról, hogy rendelkezik a kliens beállítási követelményekszerint szükséges függőségi könyvtárakkal.

Az alábbi példa bemutatja, hogyan használható authentication=ActiveDirectoryIntegrated mód. Ez a példa egy Microsoft Entra ID-val federált, tartományhoz csatolt gépen fut. A Windows-felhasználót képviselő adatbázis-felhasználónak léteznie kell az adatbázisban, és rendelkeznie kell a CONNECT engedéllyel.

Az alábbi példa futtatása előtt cserélje le a kiszolgáló/adatbázis nevét a saját kiszolgáló/adatbázis nevére a következő sorokban:

ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name
ds.setDatabaseName("demo"); // replace with your database name

Az ActiveDirectoryIntegrated hitelesítési mód használatára szolgáló példa:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import com.microsoft.sqlserver.jdbc.SQLServerDataSource;

public class MSEntraIntegrated {
    public static void main(String[] args) throws Exception {

        SQLServerDataSource ds = new SQLServerDataSource();
        ds.setServerName("msentra-managed-demo.database.windows.net"); // Replace with your server name
        ds.setDatabaseName("demo"); // Replace with your database name
        ds.setAuthentication("ActiveDirectoryIntegrated");

        try (Connection connection = ds.getConnection();
                Statement stmt = connection.createStatement();
                ResultSet rs = stmt.executeQuery("SELECT SUSER_SNAME()")) {
            if (rs.next()) {
                System.out.println("You have successfully logged on as: " + rs.getString(1));
            }
        }
    }
}

A példa futtatása automatikusan a Kerberos-jegyet használja az ügyfélplatformról, és nincs szükség jelszóra. Ha létrejött a kapcsolat, a következő üzenetnek kell megjelennie:

You have successfully logged on as: <your domain user name>

Kerberos-jegy beállítása Windows, Linux és macOS rendszeren

Létre kell hoznia egy Kerberos-jegyet annak érdekében, hogy összekapcsolja az aktuális felhasználót egy Windows-tartományi fiókkal. Az alábbiakban összefoglaljuk a legfontosabb lépéseket.

Windows

Jegyzet

Windows rendszeren a mssql-jdbc_auth-<version>-<arch>.dll a letöltött csomagból használható a Kerberos-konfigurációs lépések helyett. Ezek a lépések csak akkor szükségesek, ha nem tudja használni a DLL-t.

A JDK kinittartalmaz, amellyel TGT-t kérhet le a Key Distribution Centerből (KDC) egy, a Microsoft Entra-azonosítóval összevont tartományhoz csatlakoztatott gépen.

1. lépés: Jegyet kiadó jegy lekérése
  • Futtatás: Windows

  • művelet:

    • Használja a kinit username@DOMAIN.COMPANY.COM parancsot a TGT lekéréséhez a KDC-ből, majd a rendszer megkéri a tartomány jelszavát.
    • A klist használatával megtekintheti az elérhető jegyeket. Ha a kinit sikeres volt, akkor látnia kell egy jegyet krbtgt/DOMAIN.COMPANY.COM@ DOMAIN.COMPANY.COM.

    Jegyzet

    Előfordulhat, hogy meg kell adnia egy .ini fájlt, amelyet a -Djava.security.krb5.conf használ majd az alkalmazás a KDC megkereséséhez.

Linux és macOS

Követelmények

Hozzáférés egy Windows tartományhoz csatlakoztatott géphez a Kerberos-tartományvezérlő lekérdezéséhez.

1. lépés: Kerberos KDC keresése
  • Futtatás: a Windows parancssorban

  • művelet: nltest /dsgetdc:DOMAIN.COMPANY.COM (ahol DOMAIN.COMPANY.COM a tartomány nevére van leképzve)

  • mintakimeneti

    DC: \\co1-red-dc-33.domain.company.com
    Address: \\2111:4444:2111:33:1111:ecff:ffff:3333
    ...
    The command completed successfully
    
  • A tartományvezérlő neve kinyerésére vonatkozó információk, ebben az esetben co1-red-dc-33.domain.company.com

2. lépés: A KDC konfigurálása a krb5.conf-ban
  • FuttatásLinuxon/macOS-en

  • Művelet: Szerkessze a /etc/krb5.conf egy tetszőleges szerkesztőben. Az alábbi kulcsok konfigurálása

    [libdefaults]
      default_realm = DOMAIN.COMPANY.COM
    
    [realms]
    DOMAIN.COMPANY.COM = {
       kdc = co1-red-dc-28.domain.company.com
    }
    

    Ezután mentse a krb5.conf fájlt, és lépjen ki

    Jegyzet

    A tartománynak MINDEN CAPS-ben kell lennie.

3. lépés: A jegylekérést engedélyező jegy tesztelése
  • FuttatásLinuxon/macOS-en
  • művelet:
    • Használja a kinit username@DOMAIN.COMPANY.COM parancsot a TGT lekéréséhez a KDC-ből, majd a rendszer megkéri a tartomány jelszavát.
    • A klist használatával megtekintheti az elérhető jegyeket. Ha a kinit sikeres volt, akkor látnia kell egy jegyet krbtgt/DOMAIN.COMPANY.COM@ DOMAIN.COMPANY.COM.

Csatlakozás ActiveDirectoryPassword hitelesítési móddal

Az alábbi példa bemutatja, hogyan használható authentication=ActiveDirectoryPassword mód.

A példa létrehozása és futtatása:

  1. Győződjön meg arról, hogy rendelkezik a kliens beállítási követelményekszerint szükséges függőségi könyvtárakkal.

  2. Keresse meg a következő kódsorokat, és cserélje le a kiszolgáló/adatbázis nevét a saját kiszolgáló/adatbázis nevére.

    ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name
    ds.setDatabaseName("demo"); // replace with your database name
    
  3. Keresse meg a következő kódsorokat. Cserélje le a felhasználónevet annak a Microsoft Entra-felhasználónak a nevére, akihez csatlakozni szeretne.

    ds.setUser("bob@example.com"); // replace with your username
    ds.setPassword("password");     // replace with your password
    

Példa ActiveDirectoryPassword hitelesítési mód használatára:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import com.microsoft.sqlserver.jdbc.SQLServerDataSource;

public class MSEntraUserPassword {

    public static void main(String[] args) throws Exception{

        SQLServerDataSource ds = new SQLServerDataSource();
        ds.setServerName("msentra-managed-demo.database.windows.net"); // Replace with your server name
        ds.setDatabaseName("demo"); // Replace with your database
        ds.setUser("bob@example.com"); // Replace with your username
        ds.setPassword("password"); // Replace with your password
        ds.setAuthentication("ActiveDirectoryPassword");

        try (Connection connection = ds.getConnection();
                Statement stmt = connection.createStatement();
                ResultSet rs = stmt.executeQuery("SELECT SUSER_SNAME()")) {
            if (rs.next()) {
                System.out.println("You have successfully logged on as: " + rs.getString(1));
            }
        }
    }
}

Ha létrejött a kapcsolat, a következő üzenetnek kell megjelennie kimenetként:

You have successfully logged on as: <your user name>

Csatlakozás ActiveDirectoryInteractive hitelesítési móddal

Az alábbi példa bemutatja, hogyan használható authentication=ActiveDirectoryInteractive mód.

A példa létrehozása és futtatása:

  1. Győződjön meg arról, hogy rendelkezik a kliens beállítási követelményekszerint szükséges függőségi könyvtárakkal.

  2. Keresse meg a következő kódsorokat, és cserélje le a kiszolgáló/adatbázis nevét a saját kiszolgáló/adatbázis nevére.

    ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name
    ds.setDatabaseName("demo"); // replace with your database name
    
  3. Keresse meg a következő kódsorokat. Cserélje le a felhasználónevet annak a Microsoft Entra-felhasználónak a nevére, akihez csatlakozni szeretne.

    ds.setUser("bob@example.com"); // replace with your username
    

Példa ActiveDirectoryInteractive hitelesítési mód használatára:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import com.microsoft.sqlserver.jdbc.SQLServerDataSource;

public class MSEntraInteractive {
    public static void main(String[] args) throws Exception{

        SQLServerDataSource ds = new SQLServerDataSource();
        ds.setServerName("msentra-managed-demo.database.windows.net"); // Replace with your server name
        ds.setDatabaseName("demo"); // Replace with your database
        ds.setAuthentication("ActiveDirectoryInteractive");

        // Optional login hint
        ds.setUser("bob@example.com"); // Replace with your user name

        try (Connection connection = ds.getConnection();
                Statement stmt = connection.createStatement();
                ResultSet rs = stmt.executeQuery("SELECT SUSER_SNAME()")) {
            if (rs.next()) {
                System.out.println("You have successfully logged on as: " + rs.getString(1));
            }
        }
    }
}

A program futtatásakor megjelenik egy böngésző a felhasználó hitelesítéséhez. Az, hogy pontosan mit lát, attól függ, hogyan konfigurálja a Microsoft Entra-azonosítóját. Elképzelhető, hogy a többtényezős hitelesítés magában foglalja a felhasználónév, a jelszó, a PIN-kód vagy a második eszköz hitelesítésének kérését telefonon keresztül, de ez nem biztos. Ha ugyanabban a programban több interaktív hitelesítési kérés is történik, előfordulhat, hogy a későbbi kérések esetében a hitelesítési könyvtár nem is jelzi, hogy újra felhasználja-e a korábban gyorsítótárazott hitelesítési tokent.

A Microsoft Entra ID többtényezős hitelesítésre való konfigurálásáról további információt A Microsoft Entra többtényezős hitelesítés használatának első lépései a felhőbelicímű témakörben talál.

A párbeszédpanelek képernyőképeit A Microsoft Entra többtényezős hitelesítés használatacímű témakörben talál.

Ha a felhasználói hitelesítés sikeresen befejeződött, a böngészőben a következő üzenetnek kell megjelennie:

Authentication complete. You can close the browser and return to the application.

Ez az üzenet csak azt jelzi, hogy a felhasználói hitelesítés sikeres volt, de nem feltétlenül sikeres kapcsolat a kiszolgálóval. Az alkalmazáshoz való visszatéréskor, ha kapcsolat jön létre a kiszolgálóval, a következő üzenetnek kell megjelennie kimenetként:

You have successfully logged on as: <your user name>

Csatlakozás ActiveDirectoryServicePrincipal hitelesítési móddal

Az alábbi példa bemutatja, hogyan használható authentication=ActiveDirectoryServicePrincipal mód.

A példa létrehozása és futtatása:

  1. Győződjön meg arról, hogy rendelkezik a kliens beállítási követelményekszerint szükséges függőségi könyvtárakkal.

  2. Keresse meg a következő kódsorokat, és cserélje le a kiszolgáló/adatbázis nevét a saját kiszolgáló/adatbázis nevére.

    ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name
    ds.setDatabaseName("demo"); // replace with your database name
    
  3. Keresse meg a következő kódsorokat. Cserélje le a principalId értékét annak a Microsoft Entra szolgáltatásnévnek az alkalmazásazonosítójára/ügyfélazonosítójára, amelyhez csatlakozni szeretne. Cserélje le a principalSecret értékét a titkos kódra.

    String principalId = "<service_principal_guid>"; // Replace with your Microsoft Entra service principal ID.
    String principalSecret = "..."; // Replace with your Microsoft Entra principal secret.
    
  4. Állítsa be a főazonosítót és a fő titkos kódot a 10.2-es és újabb verziókban setUser és setPassword segítségével, valamint setAADSecurePrincipalId és setAADSecurePrincipalSecret a 9.4-es vagy régebbi verziókban.

Példa ActiveDirectoryServicePrincipal hitelesítési mód használatára:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import com.microsoft.sqlserver.jdbc.SQLServerDataSource;

public class MSEntraServicePrincipal {
    public static void main(String[] args) throws Exception{
        String principalId = "<service_principal_guid>"; // Replace with your Microsoft Entra service principal ID.
        String principalSecret = "..."; // Replace with your Microsoft Entra principal secret.

        SQLServerDataSource ds = new SQLServerDataSource();
        ds.setServerName("msentra-managed-demo.database.windows.net"); // Replace with your server name
        ds.setDatabaseName("demo"); // Replace with your database
        ds.setAuthentication("ActiveDirectoryServicePrincipal");
        ds.setUser(principalId); // setAADSecurePrincipalId for JDBC Driver 9.4 and below
        ds.setPassword(principalSecret); // setAADSecurePrincipalSecret for JDBC Driver 9.4 and below 

        try (Connection connection = ds.getConnection();
                Statement stmt = connection.createStatement();
                ResultSet rs = stmt.executeQuery("SELECT SUSER_SNAME()")) {
            if (rs.next()) {
                System.out.println("You have successfully logged on as: " + rs.getString(1));
            }
        }
    }
}

Ha létrejött a kapcsolat, a következő üzenetnek kell megjelennie kimenetként:

You have successfully logged on as: <your app/client ID>

Csatlakozás ActiveDirectoryServicePrincipalCertificate hitelesítési móddal

Az alábbi példa bemutatja, hogyan használható authentication=ActiveDirectoryServicePrincipalCertificate mód.

A példa létrehozása és futtatása:

  1. Győződjön meg arról, hogy rendelkezik a kliens beállítási követelményekszerint szükséges függőségi könyvtárakkal.

  2. Keresse meg a következő kódsorokat, és cserélje le a kiszolgáló/adatbázis nevét a saját kiszolgáló/adatbázis nevére.

    ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name
    ds.setDatabaseName("demo"); // replace with your database name
    
  3. Keresse meg a következő kódsorokat. Cserélje le a principalId értékét annak a Microsoft Entra szolgáltatásnévnek az alkalmazásazonosítójára/ügyfélazonosítójára, amelyhez csatlakozni szeretne. Cserélje le a szolgáltatásnév tanúsítványának clientCertificate fájl elérési útjának értékét.

    String principalId = "<service_principal_guid>"; // Replace with your Microsoft Entra service principal ID.
    
    String clientCertificate = "..."; // Replace with the path to your Microsoft Entra service principal certificate.
    
  4. Ha a korábban említett tanúsítványnak jelszóra van szüksége, állítsa be a fő Titkot a 10.2-es vagy újabb verzióban a setPassword, vagy a 9.4-es és régebbi verziókban a setAADSecurePrincipalSecret használatával.

  5. Ha a tanúsítványhoz társított titkos kulcs van, állítsa be a titkos kulcsot a setClientKeyhasználatával. Ha ehhez a kulcshoz jelszó szükséges, állítsa be a titkos kulcs jelszavát a setClientKeyPasswordhasználatával.

Példa ActiveDirectoryServicePrincipalCertificate hitelesítési mód használatára:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

import com.microsoft.sqlserver.jdbc.SQLServerDataSource;

public class MSEntraServicePrincipalCertificate {
    public static void main(String[] args) throws Exception{
        String principalId = "<service_principal_guid>"; // Replace with your Microsoft Entra service principal ID.
        String clientCertificate = "..."; // Replace with the path to your service principal certificate.

        SQLServerDataSource ds = new SQLServerDataSource();
        ds.setServerName("msentra-managed-demo.database.windows.net"); // Replace with your server name
        ds.setDatabaseName("demo"); // Replace with your database
        ds.setAuthentication("ActiveDirectoryServicePrincipalCertificate");
        ds.setUser(principalId); // setAADSecurePrincipalId for JDBC Driver 9.4 and below
        ds.setClientCertificate(clientCertificate);

        try (Connection connection = ds.getConnection();
             Statement stmt = connection.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT SUSER_SNAME()")) {
            if (rs.next()) {
                System.out.println("You have successfully logged on as: " + rs.getString(1));
            }
        }
    }
}

Ha létrejött a kapcsolat, a következő üzenetnek kell megjelennie kimenetként:

You have successfully logged on as: <your app/client ID>

Csatlakozás hozzáférési jogkivonat használatával

Az alkalmazások/szolgáltatások lekérhetnek egy hozzáférési jogkivonatot a Microsoft Entra-azonosítóból, és ezzel csatlakozhatnak az Azure SQL Database-hez, az Azure SQL Managed Instance-hez és az Azure Synapse Analyticshez.

Jegyzet

accessToken csak a DriverManager osztályban lévő getConnection() metódus Tulajdonságok paraméterével állítható be. A kapcsolati sztringben nem használható. Az illesztőprogram 12.2-es verziójától kezdve a felhasználók implementálhatják és accessToken visszahívást biztosíthatnak az illesztőprogramnak a jogkivonatok megújításához a kapcsolatkészletezési forgatókönyvekben. A kapcsolatkészletezési forgatókönyvek megkövetelik, hogy a kapcsolatkészlet implementációja a szabványos JDBC-kapcsolatkészletezési osztályokat használja.

Az alábbi példa egy egyszerű Java-alkalmazást tartalmaz, amely hozzáférési jogkivonat-alapú hitelesítéssel csatlakozik az Azure-hoz.

A példa létrehozása és futtatása:

  1. Hozzon létre egy alkalmazásfiókot a szolgáltatásához a Microsoft Entra ID-ben.

    1. Jelentkezzen be az Azure Portalra.
    2. Lépjen a(z) Microsoft Entra ID elemhez a bal oldali navigációs sávon.
    3. Válassza alkalmazás-regisztrációklehetőséget.
    4. Válassza a Új regisztrációlehetőséget.
    5. Írja be mytokentest az alkalmazás barátságos névként.
    6. Hagyja meg az alapértelmezett beállítást a támogatott fióktípusoknál, amelyek használhatják az alkalmazást.
    7. Válassza a regisztert a alatt.
    8. Nincs szükség SIGN-ON URL-címre. Adjon meg bármilyen adatot: https://mytokentest.
    9. Válassza a legalján található Create-t.
    10. Amikor a Regiszterkiválasztásra kerül, az alkalmazás azonnal létrejön, és Ön az erőforrásoldalára kerül.
    11. Az Essentials mezőben keresse meg az alkalmazás (ügyfél) azonosítóját, és másolja ki. Az alkalmazás konfigurálásához később szüksége lesz erre az értékre.
    12. Válassza a Tanúsítványok, a & Titkok és a lehetőséget a navigációs panelen. Az Ügyfélkódok (0) lapon válassza Új titkos ügyfélkódlehetőséget. Adja meg a titkos kód leírását, és válasszon ki egy lejáratot (az alapértelmezett beállítás rendben van). Válassza ki a elemet, majd adja hozzá alul a-et. Fontos a lap elhagyása előtt másolja ki a létrehozott Érték az ügyfél titkos kódjához. Ez az érték nem tekinthető meg a lap elhagyása után. Ez az érték az ügyfél titkos kódja.
    13. Térjen vissza a Microsoft Entra-azonosító alkalmazásregisztrációk paneljére, és keresse meg a Végpontok lapot. Másolja az URL-címet a OAuth 2.0 token endpointalatt. Ez az STS URL-címe.
  2. Csatlakozzon az adatbázishoz Microsoft Entra-rendszergazdaként, és egy T-SQL-paranccsal építsen ki egy tartalmazott adatbázis-felhasználót az alkalmazásnévhez. A Microsoft Entra rendszergazda és egy zárt adatbázis-felhasználó létrehozásáról további információt a Microsoft Entra hitelesítés használatával történő csatlakozáscímű témakörben talál.

    CREATE USER [mytokentest] FROM EXTERNAL PROVIDER
    
  3. Azon az ügyfélszámítógépen, amelyen a példát futtatja, töltse le a Microsoft Authentication Library (MSAL) for Java könyvtárat és annak függőségeit. Az MSAL csak az adott példa futtatásához szükséges. A példa a kódtár API-jait használja a hozzáférési jogkivonat Microsoft Entra-azonosítóból való lekéréséhez. Ha már rendelkezik hozzáférési jogkivonattal, kihagyhatja ezt a lépést, és eltávolíthatja a példa egy hozzáférési jogkivonatot lekérő szakaszát.

Az alábbi példában cserélje le az STS URL-címét, ügyfélazonosítóját, titkos ügyfélkulcsát, kiszolgálóját és adatbázisnevét az értékeire.

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import com.microsoft.sqlserver.jdbc.SQLServerDataSource;

// The microsoft-authentication-library-for-java is needed to retrieve the access token in this example.
import com.microsoft.aad.msal4j.ClientCredentialFactory;
import com.microsoft.aad.msal4j.ClientCredentialParameters;
import com.microsoft.aad.msal4j.ConfidentialClientApplication;
import com.microsoft.aad.msal4j.IAuthenticationResult;
import com.microsoft.aad.msal4j.IClientCredential;

public class MSEntraTokenBased {

    public static void main(String[] args) throws Exception {

        // Retrieve the access token from Microsoft Entra ID.
        String spn = "https://database.windows.net/";
        String stsurl = "https://login.microsoftonline.com/..."; // Replace with your STS URL.
        String clientId = "<service_principal_guid>"; // Replace with your client ID.
        String clientSecret = "..."; // Replace with your client secret.

        String scope = spn +  "/.default";
        Set<String> scopes = new HashSet<>();
        scopes.add(scope);

        ExecutorService executorService = Executors.newSingleThreadExecutor();
        IClientCredential credential = ClientCredentialFactory.createFromSecret(clientSecret);
        ConfidentialClientApplication clientApplication = ConfidentialClientApplication
            .builder(clientId, credential).executorService(executorService).authority(stsurl).build();
        CompletableFuture<IAuthenticationResult> future = clientApplication
            .acquireToken(ClientCredentialParameters.builder(scopes).build());

        IAuthenticationResult authenticationResult = future.get();
        String accessToken = authenticationResult.accessToken();

        System.out.println("Access Token: " + accessToken);

        // Connect with the access token.
        SQLServerDataSource ds = new SQLServerDataSource();

        ds.setServerName("msentra-managed-demo.database.windows.net"); // Replace with your server name.
        ds.setDatabaseName("demo"); // Replace with your database name.
        ds.setAccessToken(accessToken);

        try (Connection connection = ds.getConnection();
                Statement stmt = connection.createStatement();
                ResultSet rs = stmt.executeQuery("SELECT SUSER_SNAME()")) {
            if (rs.next()) {
                System.out.println("You have successfully logged on as: " + rs.getString(1));
            }
        }
    }
}

Ha a kapcsolat sikeres, a következő üzenetnek kell megjelennie kimenetként:

Access Token: <your access token>
You have successfully logged on as: <your client ID>

Csatlakozás hozzáférési jogkivonat visszahívásával

A hozzáférési jogkivonat tulajdonságához hasonlóan a hozzáférési jogkivonat visszahívásával is regisztrálhat egy metódust, amely hozzáférési jogkivonatot biztosít az illesztőprogramnak. Ennek a visszahívásnak a tulajdonságon keresztüli előnye, hogy a visszahívás lehetővé teszi, hogy az illesztőprogram új hozzáférési jogkivonatot kérjen a jogkivonat lejártakor. Egy új kapcsolatot létrehozó kapcsolatkészlet például új jogkivonatot kérhet új lejárati dátummal. További információért lásd: Kapcsolatkészletezés használata.

Az alábbi példa az accessToken visszahívás implementálását és beállítását mutatja be.

import com.microsoft.aad.msal4j.IClientCredential;
import com.microsoft.aad.msal4j.ClientCredentialFactory;
import com.microsoft.aad.msal4j.ConfidentialClientApplication;
import com.microsoft.aad.msal4j.IAuthenticationResult;
import com.microsoft.aad.msal4j.ClientCredentialParameters;
import java.sql.Connection;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class MSEntraAccessTokenCallback {

    public static void main(String[] args) {

        SQLServerAccessTokenCallback callback = new SQLServerAccessTokenCallback() {
            @Override
            public SqlAuthenticationToken getAccessToken(String spn, String stsurl) {

                String clientSecret = "..."; // Replace with your client secret.
                String clientId = "<service_principal_guid>"; // Replace with your client ID.

                String scope = spn + "/.default";
                Set<String> scopes = new HashSet<>();
                scopes.add(scope);

                try {
                    ExecutorService executorService = Executors.newSingleThreadExecutor();
                    IClientCredential credential = ClientCredentialFactory.createFromSecret(clientSecret);
                    ConfidentialClientApplication clientApplication = ConfidentialClientApplication
                            .builder(clientId, credential).executorService(executorService).authority(stsurl).build();
                    CompletableFuture<IAuthenticationResult> future = clientApplication
                            .acquireToken(ClientCredentialParameters.builder(scopes).build());

                    IAuthenticationResult authenticationResult = future.get();
                    String accessToken = authenticationResult.accessToken();

                    return new SqlAuthenticationToken(accessToken, authenticationResult.expiresOnDate().getTime());
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }
        };

        SQLServerDataSource ds = new SQLServerDataSource();
        ds.setServerName("msentra-managed-demo.database.windows.net"); // Replaces with your server name.
        ds.setDatabaseName("demo"); // Replace with your database name.
        ds.setAccessTokenCallback(callback);

        try (Connection connection = ds.getConnection();
                Statement stmt = connection.createStatement();
                ResultSet rs = stmt.executeQuery("SELECT SUSER_SNAME()")) {
            if (rs.next()) {
                System.out.println("You have successfully logged on as: " + rs.getString(1));
            }
        }
    }
}

Ha a kapcsolat sikeres, a következő üzenetnek kell megjelennie kimenetként:

You have successfully logged on as: <your client ID>

A 12.4-es verziótól kezdve a accessToken visszahívás a accessTokenCallbackClass kapcsolati karakterlánc tulajdonságon keresztül állítható be. Az alábbi példa bemutatja, hogyan állíthatja be a accessToken visszahívást ezzel a tulajdonságtal:

import com.microsoft.aad.msal4j.IClientCredential;
import com.microsoft.aad.msal4j.ClientCredentialFactory;
import com.microsoft.aad.msal4j.ConfidentialClientApplication;
import com.microsoft.aad.msal4j.IAuthenticationResult;
import com.microsoft.aad.msal4j.ClientCredentialParameters;
import java.sql.Connection;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

 

public class MSEntraAccessTokenCallbackClass {
    public static class AccessTokenCallbackClass implements SQLServerAccessTokenCallback {
        @Override
        public SqlAuthenticationToken getAccessToken(String spn, String stsurl) {
            String clientSecret = "..."; // Replace with your client secret.
            String clientId = "<service_principal_guid>"; // Replace with your client ID.
            
            String scope = spn + "/.default";
            Set<String> scopes = new HashSet<>();
            scopes.add(scope);
            
            try {
                ExecutorService executorService = Executors.newSingleThreadExecutor();
                IClientCredential credential = ClientCredentialFactory.createFromSecret(clientSecret);
                ConfidentialClientApplication clientApplication = ConfidentialClientApplication

                        .builder(clientId, credential).executorService(executorService).authority(stsurl).build();
                
                CompletableFuture<IAuthenticationResult> future = clientApplication
                        .acquireToken(ClientCredentialParameters.builder(scopes).build());
                
                IAuthenticationResult authenticationResult = future.get();
                String accessToken = authenticationResult.accessToken();
                
                return new SqlAuthenticationToken(accessToken, authenticationResult.expiresOnDate().getTime());
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    
    public static void main(String[] args) throws Exception {
        
        SQLServerDataSource ds = new SQLServerDataSource();
        ds.setServerName("msentra-managed-demo.database.windows.net"); // Replaces with your server name.
        ds.setDatabaseName("demo"); // Replace with your database name.
        ds.setAccessTokenCallbackClass(AccessTokenCallbackClass.class.getName());
        
        try (Connection connection = ds.getConnection();
             Statement stmt = connection.createStatement();
             ResultSet rs = stmt.executeQuery("SELECT SUSER_SNAME()")) {
            if (rs.next()) {
                System.out.println("You have successfully logged on as: " + rs.getString(1));
            }
        }
    }
}

Ha a kapcsolat sikeres, a következő üzenetnek kell megjelennie kimenetként:

You have successfully logged on as: <your client ID>

Következő lépések

További információ a kapcsolódó fogalmakról az alábbi cikkekben: