Połącz przy użyciu uwierzytelniania Microsoft Entra
Ten artykuł zawiera informacje na temat tworzenia aplikacji Java korzystających z funkcji uwierzytelniania Microsoft Entra za pomocą sterownika JDBC firmy Microsoft dla programu SQL Server.
Uwierzytelnianie Entra firmy Microsoft jest mechanizmem umożliwiającym połączenie z Azure SQL Database, Azure SQL Managed Instance i Azure Synapse Analytics przy użyciu tożsamości w Microsoft Entra ID. Uwierzytelnianie Microsoft Entra umożliwia centralne zarządzanie tożsamościami użytkowników bazy danych i stanowi alternatywę dla uwierzytelniania w programie SQL Server. Sterownik JDBC umożliwia określenie poświadczeń usługi Microsoft Entra w parametrach połączenia JDBC w celu nawiązania połączenia z usługą Azure SQL. Aby uzyskać informacje na temat konfigurowania uwierzytelniania w usłudze Microsoft Entra, odwiedź stronę Connecting to Azure SQL By Using Microsoft Entra authentication.
Właściwości połączenia do obsługi uwierzytelniania firmy Microsoft Entra w sterowniku JDBC firmy Microsoft dla programu SQL Server są następujące:
-
uwierzytelnianie: Użyj tej właściwości, aby określić, która metoda uwierzytelniania SQL ma być używana dla połączenia.
Możliwe wartości to:
ActiveDirectoryManagedIdentity
- Od wersji sterownika 8.3.1,
authentication=ActiveDirectoryMSI
można użyć do połączenia z usługą Azure SQL Database/Synapse Analytics z zasobu Azure z włączoną obsługą tożsamości. Opcjonalnie msiClientId można określić we właściwościach Connection/DataSource wraz z tym trybem uwierzytelniania.msiClientId
musi zawierać identyfikator klienta tożsamości zarządzanej, który ma być używany do uzyskiwania accessToken na potrzeby nawiązywania połączenia. Od wersji sterownika 12.2 można również użyćauthentication=ActiveDirectoryManagedIdentity
do nawiązania połączenia z bazą danych Azure SQL Database/Synapse Analytics z zasobu Azure, który obsługuje włączoną funkcję "Identity". Opcjonalnie identyfikator klienta tożsamości zarządzanej można również ustawić we właściwościuser
. Aby uzyskać więcej informacji, zobacz Połącz przy użyciu trybu uwierzytelniania za pomocą zarządzanej tożsamości ActiveDirectory.
- Od wersji sterownika 8.3.1,
ActiveDirectoryDefault
- Od wersji sterownika 12.2,
authentication=ActiveDirectoryDefault
można użyć do nawiązania połączenia z usługą Azure SQL/Synapse Analytics za pośrednictwem DefaultAzureCredential z biblioteki klienta Azure Identity. Aby uzyskać więcej informacji, zobacz Połącz, używając trybu uwierzytelniania ActiveDirectoryDefault.
- Od wersji sterownika 12.2,
ActiveDirectoryIntegrated
- Od wersji sterownika 6.0,
authentication=ActiveDirectoryIntegrated
można używać do połączenia z usługą Azure SQL/Synapse Analytics przez zintegrowane uwierzytelnianie. Aby użyć tego trybu uwierzytelniania, należy powiązać lokalne usługi Active Directory Federation Services (ADFS) z usługą Microsoft Entra ID w chmurze. Po skonfigurowaniu można nawiązać połączenie, dodając bibliotekę natywnąmssql-jdbc_auth-<version>-<arch>.dll
do ścieżki klasy aplikacji w systemie Windows lub konfigurując bilet Protokołu Kerberos na potrzeby obsługi uwierzytelniania międzyplatformowego. Możesz uzyskać dostęp do Azure SQL/Azure Synapse Analytics bez konieczności podawania poświadczeń, po zalogowaniu się na komputerze podłączonym do domeny. Aby uzyskać więcej informacji, zobacz Połącz się, używając trybu uwierzytelniania ActiveDirectoryIntegrated.
- Od wersji sterownika 6.0,
ActiveDirectoryPassword
- Od wersji 6.0 sterownika
authentication=ActiveDirectoryPassword
można używać do nawiązywania połączeń z Azure SQL/Synapse Analytics przy użyciu nazwy użytkownika i hasła Microsoft Entra. Aby uzyskać więcej informacji, zobacz Połącz za pomocą trybu uwierzytelniania ActiveDirectoryPassword.
- Od wersji 6.0 sterownika
ActiveDirectoryInteractive
- Od wersji sterownika 9.2,
authentication=ActiveDirectoryInteractive
może być używany do łączenia się z usługą Azure SQL/Synapse Analytics za pomocą przepływu uwierzytelniania interaktywnego (uwierzytelnianie wieloskładnikowe). Aby uzyskać więcej informacji, zobacz Połącz się, używając trybu uwierzytelniania ActiveDirectoryInteractive.
- Od wersji sterownika 9.2,
ActiveDirectoryServicePrincipal
- Od wersji sterownika 9.2,
authentication=ActiveDirectoryServicePrincipal
może być używany do nawiązywania połączenia z Azure SQL/Synapse Analytics, określając identyfikator aplikacji/klienta w polu userName i sekretny klucz tożsamości jednostki usługi w polu password. Aby uzyskać więcej informacji, zobacz Połącz za pomocą trybu uwierzytelniania ActiveDirectoryServicePrincipal.
- Od wersji sterownika 9.2,
ActiveDirectoryServicePrincipalCertificate
- Od wersji 12.4 sterownika,
authentication=ActiveDirectoryServicePrincipalCertificate
można użyć do nawiązania połączenia z usługą Azure SQL Database/Synapse Analytics, określając identyfikator aplikacji/klienta we właściwości userName i lokalizację certyfikatu podmiotu usługi we właściwościclientCertificate
. Aby uzyskać więcej informacji, zobacz Podłącz używając trybu uwierzytelniania ActiveDirectoryServicePrincipalCertificate.
- Od wersji 12.4 sterownika,
SqlPassword
- Użyj
authentication=SqlPassword
, aby nawiązać połączenie z programem SQL Server przy użyciu właściwości userName/user i password.
- Użyj
Nieokreślone
- Użyj
authentication=NotSpecified
lub pozostaw ją jako domyślną, gdy żadna z tych metod uwierzytelniania nie jest wymagana.
- Użyj
accessToken: użyj tej właściwości połączenia, aby nawiązać połączenie z usługą SQL Database przy użyciu tokenu dostępu.
accessToken
można ustawić tylko przy użyciu parametru Properties metodygetConnection()
w klasie DriverManager. Nie można jej używać w adresie URL połączenia.
Aby uzyskać więcej informacji, zobacz właściwość uwierzytelniania na stronie Ustawianie właściwości połączenia.
Wymagania dotyczące konfiguracji klienta
Oprócz podstawowego sterownika wymagania systemowe, następujące tryby uwierzytelniania mają więcej wymagań.
W poniższej tabeli wymieniono wymagane zależności biblioteki dla każdego trybu uwierzytelniania i wersji sterownika. Potrzebne są również zależności do zależności.
Uwaga
W przypadkach, gdy poprawka dla wersji głównej ma inną wersję zależności niż wersja główna, poprawka jest również wymieniona.
Opcja uwierzytelniania | Wersje sterowników | Zależności biblioteki |
---|---|---|
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.3Client-Runtime-for-AutoRest 1.6.5 |
ActiveDirectoryPassword ActiveDirectoryIntegrated |
7.4 - 8.2 |
Adal4j l4j 1.6.4Client-Runtime-for-AutoRest 1.7.0 |
ActiveDirectoryPassword ActiveDirectoryIntegrated |
8.4 |
Adal4j 1.6.5Client-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 |
Nawiązywanie połączenia przy użyciu trybu uwierzytelniania ActiveDirectoryManagedIdentity
Ten tryb uwierzytelniania jest obsługiwany od wersji 7.2. Aby go użyć, określ authentication=ActiveDirectoryMSI
. Począwszy od wersji 12.2, można również określić authentication=ActiveDirectoryManagedIdentity
.
Oprócz wymagań dotyczących zależności biblioteki wymienionych w Wymagania dotyczące konfiguracji klientata funkcja ma następujące wymagania:
Docelowa baza danych musi mieć zawartego użytkownika bazy danych z uprawnieniem CONNECT. Zawarty użytkownik musi reprezentować tożsamość zarządzaną przypisaną przez system usługi Azure Resource lub tożsamość zarządzaną przypisaną przez użytkownika albo jedną z grup, do których należy Tożsamość zarządzana.
Środowisko klienta musi być zasobem platformy Azure i musi mieć włączoną obsługę funkcji "Tożsamość". W poniższej tabeli wymieniono usługi platformy Azure obsługiwane przez każdą wersję sterownika JDBC:
Wersja sterownika Wymagane zależności Obsługiwane usługi platformy Azure 7.2 - 11.2 Żaden Usługi Azure App Service i Azure Functions
Azure Virtual Machines12.2
12.4
12.6
12.8
12.10azure-identity
1.7.0
azure-identity
1.9.0
azure-identity
1.11.1
azure-identity
1.12.2
azure-identity
1.15.3Azure App Service oraz Azure Functions
Azure Arc
Azure Cloud Shell
Azure Kubernetes Service
usługi Azure Service Fabric
Azure Virtual Machines
Zestawy Skalowania Maszyn Wirtualnych Azure
W poniższym przykładzie pokazano, jak używać trybu authentication=ActiveDirectoryManagedIdentity
. Uruchom ten przykład z poziomu zasobu platformy Azure skonfigurowanego pod kątem tożsamości zarządzanej.
Aby uruchomić przykład, zastąp nazwę serwera/bazy danych nazwą serwera/bazy danych w następujących wierszach:
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
Przykład użycia trybu uwierzytelniania ActiveDirectoryMSI
:
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));
}
}
}
}
W poniższym przykładzie pokazano, jak używać trybu authentication=ActiveDirectoryManagedIdentity
.
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));
}
}
}
}
Te przykłady na maszynie wirtualnej Azure pobierają token dostępu z tożsamości zarządzanej przypisanej systemowo lub tożsamości zarządzanej przypisanej użytkownikowi (jeśli msiClientId
lub user
jest określone z identyfikatorem klienta tożsamości zarządzanej) i ustanawiają połączenie przy użyciu pobranego tokenu dostępu. Jeśli połączenie zostanie nawiązane, powinien zostać wyświetlony następujący komunikat:
You have successfully logged on as: <your Managed Identity username>
Nawiązywanie połączenia przy użyciu trybu uwierzytelniania ActiveDirectoryDefault
Opcja uwierzytelniania ActiveDirectoryDefault
używa DefaultAzureCredential
TokenCredential
implementacji DefaultAzureCredential
biblioteki klienta tożsamości platformy Azure. Poświadczenie łączy często używane metody uwierzytelniania połączone w łańcuch.
ActiveDirectoryDefault
uwierzytelnianie wymaga zależności czasu wykonywania od biblioteki klienta tożsamości platformy Azure dla tożsamości zarządzanej. Aby uzyskać szczegółowe informacje o wersji biblioteki, zobacz wymagania dotyczące konfiguracji klienta .
W poniższej tabeli wymieniono łańcuch poświadczeń DefaultAzureCredential
dla każdej wersji sterownika JDBC.
Wersja sterownika | wersja usługi azure-identity | łańcuch DefaultAzureCredential |
---|---|---|
12.2 |
azure-identity 1.7.0 |
Środowisko Tożsamość zarządzana IntelliJ Azure CLI Azure PowerShell |
12.4 |
azure-identity 1.9.0 |
Środowisko Tożsamość obciążenia roboczego Tożsamość zarządzana Azure CLI dla deweloperów IntelliJ Interfejs wiersza polecenia platformy Azure Azure PowerShell |
12.6 |
azure-identity 1.11.1 |
Środowisko Tożsamość roboczego obciążenia Tożsamość zarządzana Interfejs wiersza polecenia dla deweloperów platformy Azure IntelliJ Azure CLI Azure PowerShell |
12.8 |
azure-identity 1.12.2 |
Środowisko Tożsamość obciążenia roboczego Tożsamość zarządzana Azure Developer CLI IntelliJ Azure CLI Azure PowerShell |
12.10 |
azure-identity 1.15.3 |
Środowisko Tożsamość zadania Tożsamość zarządzana Interfejs wiersza poleceń Azure dla deweloperów IntelliJ Azure CLI Azure PowerShell |
Istnieje wiele zmiennych, które można ustawić w celu skonfigurowania poświadczeń Environment
. Aby uzyskać szczegółowe informacje na temat konfigurowania łańcucha DefaultAzureCredential
, w tym poświadczeń Environment
, zobacz odpowiednią wersję dokumentacji tożsamości platformy Azure połączoną w poprzedniej tabeli.
Aby użyć IntellijCredential
w systemie Windows, ustaw zmienną środowiskową INTELLIJ_KEEPASS_PATH
na lokalizację pliku keepass
. Na przykład INTELLIJ_KEEPASS_PATH=C:\user\your\path\to\the\keepass\file
.
Aby udostępnić więcej klientów w DefaultAzureCredential
, użyj zmiennej środowiskowej ADDITIONALLY_ALLOWED_TENANTS
. Ta zmienna przyjmuje listę rozdzielaną przecinkami. Na przykład ADDITIONALLY_ALLOWED_TENANTS=<your-tenant-id-0>,<your-tenant-id-1>,<your-tenant-id-2>,...
W poniższym przykładzie pokazano, jak używać trybu authentication=ActiveDirectoryDefault
z AzureCliCredential w DefaultAzureCredential
.
Najpierw zaloguj się do interfejsu wiersza polecenia platformy Azure przy użyciu następującego polecenia.
az login
Po pomyślnym zalogowaniu się do interfejsu wiersza polecenia platformy Azure uruchom następujący kod.
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)); } } } }
Połącz się, używając trybu uwierzytelniania Active-Directory-Integrated
Istnieją dwa sposoby używania uwierzytelniania ActiveDirectoryIntegrated
w sterowniku JDBC firmy Microsoft dla programu SQL Server:
- W systemie Windows
mssql-jdbc_auth-<version>-<arch>.dll
z pobranego pakietu można skopiować do lokalizacji znajdującej się w ścieżce systemowej. - Jeśli nie możesz użyć biblioteki DLL, od wersji 6.4 możesz skonfigurować bilet Kerberos. Ta metoda jest obsługiwana na różnych platformach (Windows, Linux i macOS). Aby uzyskać więcej informacji, zobacz Konfigurowanie biletu Kerberos w systemach Windows, Linux i macOS.
Upewnij się, że masz wymagane biblioteki zależne od wymagań dotyczących konfiguracji klienta .
W poniższym przykładzie pokazano, jak używać trybu authentication=ActiveDirectoryIntegrated
. Ten przykład działa na maszynie przyłączonej do domeny, która jest sfederowana z identyfikatorem Entra firmy Microsoft. Użytkownik bazy danych reprezentujący użytkownika systemu Windows musi istnieć w bazie danych i musi mieć uprawnienie CONNECT.
Przed wykonaniem przykładu zastąp nazwę serwera/bazy danych nazwą serwera/bazy danych w następujących wierszach:
ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name
ds.setDatabaseName("demo"); // replace with your database name
Przykład użycia trybu uwierzytelniania ActiveDirectoryIntegrated:
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));
}
}
}
}
Uruchomienie tego przykładu automatycznie wykorzystuje bilet Kerberos na platformie klienta i nie jest wymagane żadne hasło. Jeśli połączenie zostanie nawiązane, powinien zostać wyświetlony następujący komunikat:
You have successfully logged on as: <your domain user name>
Ustaw bilet Kerberos w systemach Windows, Linux i macOS
Aby połączyć bieżącego użytkownika z kontem domeny systemu Windows, musisz utworzyć bilet protokołu Kerberos. Poniżej przedstawiono podsumowanie kluczowych kroków.
Windows
Notatka
W systemie Windows można użyć mssql-jdbc_auth-<version>-<arch>.dll
z pobranego pakietu zamiast tych kroków konfiguracji protokołu Kerberos. Te kroki są wymagane tylko wtedy, gdy nie można użyć biblioteki DLL.
Zestaw JDK jest dostarczany z kinit
, którego można użyć do pobrania biletu TGT z centrum dystrybucji kluczy (KDC) na maszynie przyłączonej do domeny, która jest sfederowana z identyfikatorem Entra firmy Microsoft.
Krok 1. Pobieranie biletu udzielania biletu
Uruchom w: Windows
Akcja:
- Użyj polecenia
kinit username@DOMAIN.COMPANY.COM
, aby uzyskać bilet TGT z centrum dystrybucji kluczy (KDC), a następnie zostaniesz poproszony o podanie hasła do domeny. - Użyj
klist
, aby wyświetlić dostępne bilety. Jeśli kinit zakończył się pomyślnie, powinien zostać wyświetlony bilet zkrbtgt/DOMAIN.COMPANY.COM@ DOMAIN.COMPANY.COM
.
Notatka
Może być konieczne określenie pliku
.ini
za pomocą-Djava.security.krb5.conf
, aby aplikacja mogła zlokalizować centrum dystrybucji kluczy (KDC).- Użyj polecenia
Linux i macOS
Wymagania
Dostęp do maszyny przyłączonej do domeny systemu Windows w celu wykonywania zapytań do kontrolera domeny Kerberos.
Krok 1: Znajdź serwer KDC Kerberos
Uruchom w: wiersz polecenia systemu Windows
akcja:
nltest /dsgetdc:DOMAIN.COMPANY.COM
(gdzieDOMAIN.COMPANY.COM
jest mapowane do nazwy domeny)Przykładowe wyjście
DC: \\co1-red-dc-33.domain.company.com Address: \\2111:4444:2111:33:1111:ecff:ffff:3333 ... The command completed successfully
Informacje dotyczące wyodrębniania nazwy kontrolera domeny, w tym przypadku
co1-red-dc-33.domain.company.com
Krok 2. Konfigurowanie KDC w pliku krb5.conf
Uruchom w: Linux/macOS
Akcja: edytuj
/etc/krb5.conf
w wybranym edytorze. Konfigurowanie następujących kluczy[libdefaults] default_realm = DOMAIN.COMPANY.COM [realms] DOMAIN.COMPANY.COM = { kdc = co1-red-dc-28.domain.company.com }
Następnie zapisz plik
krb5.conf
i zamknijNotatka
Domena musi być zapisana WIELKIMI LITERAMI.
Krok 3: Testowanie pobierania biletu przyznającego uprawnienia
- Działaj na: Linux/macOS
-
Akcja:
- Użyj polecenia
kinit username@DOMAIN.COMPANY.COM
, aby uzyskać bilet TGT z KDC, a następnie zostaniesz poproszony o podanie hasła domeny. - Użyj
klist
, aby wyświetlić dostępne bilety. Jeśli kinit zakończył się pomyślnie, powinien zostać wyświetlony bilet zkrbtgt/DOMAIN.COMPANY.COM@ DOMAIN.COMPANY.COM
.
- Użyj polecenia
Nawiązywanie połączenia przy użyciu trybu uwierzytelniania ActiveDirectoryPassword
W poniższym przykładzie pokazano, jak używać trybu authentication=ActiveDirectoryPassword
.
Aby skompilować i uruchomić przykład:
Upewnij się, że masz wymagane biblioteki zależne od wymagań dotyczących konfiguracji klienta .
Znajdź następujące wiersze kodu i zastąp nazwę serwera/bazy danych nazwą serwera/bazy danych.
ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name ds.setDatabaseName("demo"); // replace with your database name
Znajdź następujące wiersze kodu. Zastąp nazwę użytkownika nazwą użytkownika Microsoft Entra, z którym chcesz się połączyć.
ds.setUser("bob@example.com"); // replace with your username ds.setPassword("password"); // replace with your password
Przykład użycia trybu uwierzytelniania ActiveDirectoryPassword
:
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));
}
}
}
}
Jeśli połączenie zostanie nawiązane, powinien zostać wyświetlony następujący komunikat jako dane wyjściowe:
You have successfully logged on as: <your user name>
Nawiązywanie połączenia przy użyciu trybu uwierzytelniania ActiveDirectoryInteractive
W poniższym przykładzie pokazano, jak używać trybu authentication=ActiveDirectoryInteractive
.
Aby skompilować i uruchomić przykład:
Upewnij się, że masz wymagane biblioteki zależne od wymagań dotyczących konfiguracji klienta .
Znajdź następujące wiersze kodu i zastąp nazwę serwera/bazy danych nazwą serwera/bazy danych.
ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name ds.setDatabaseName("demo"); // replace with your database name
Znajdź następujące wiersze kodu. Zastąp nazwę użytkownika nazwą użytkownika Microsoft Entra, jako którego chcesz się połączyć.
ds.setUser("bob@example.com"); // replace with your username
Przykład użycia trybu uwierzytelniania ActiveDirectoryInteractive
:
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));
}
}
}
}
Po uruchomieniu programu zostanie wyświetlona przeglądarka w celu uwierzytelnienia użytkownika. Dokładnie to, co widzisz, zależy od sposobu konfigurowania identyfikatora Entra firmy Microsoft. Może to lub nie zawierać monity uwierzytelniania wieloskładnikowego dotyczące nazwy użytkownika, hasła, numeru PIN lub drugiego uwierzytelniania urządzenia za pośrednictwem telefonu. Jeśli wiele interakcyjnych żądań uwierzytelniania odbywa się w tym samym programie, późniejsze żądania mogą nawet nie monitować, czy biblioteka uwierzytelniania może ponownie użyć wcześniej buforowanego tokenu uwierzytelniania.
Aby uzyskać informacje o sposobie konfigurowania Microsoft Entra ID w celu wymagania uwierzytelniania wieloskładnikowego, zobacz Wprowadzenie do uwierzytelniania wieloskładnikowego w chmurze Microsoft Entra.
Aby uzyskać zrzuty ekranu tych okien dialogowych, zobacz Używanie wielopoziomowego uwierzytelniania Microsoft Entra.
Jeśli uwierzytelnianie użytkownika zostało ukończone pomyślnie, w przeglądarce powinien zostać wyświetlony następujący komunikat:
Authentication complete. You can close the browser and return to the application.
Ten komunikat wskazuje tylko, że uwierzytelnianie użytkownika zakończyło się pomyślnie, ale niekoniecznie pomyślne połączenie z serwerem. Po powrocie do aplikacji, jeśli połączenie zostanie nawiązane z serwerem, powinien zostać wyświetlony następujący komunikat jako dane wyjściowe:
You have successfully logged on as: <your user name>
Nawiązywanie połączenia przy użyciu trybu uwierzytelniania ActiveDirectoryServicePrincipal
W poniższym przykładzie pokazano, jak używać trybu authentication=ActiveDirectoryServicePrincipal
.
Aby skompilować i uruchomić przykład:
Upewnij się, że masz wymagane biblioteki zależne od wymagań dotyczących konfiguracji klienta .
Znajdź następujące wiersze kodu i zastąp nazwę serwera/bazy danych nazwą serwera/bazy danych.
ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name ds.setDatabaseName("demo"); // replace with your database name
Znajdź następujące wiersze kodu. Zastąp wartość
principalId
identyfikatorem aplikacji/identyfikatorem klienta jednostki usługi Microsoft Entra, z którą chcesz nawiązać połączenie. Zastąp wartośćprincipalSecret
sekretem.String principalId = "<service_principal_guid>"; // Replace with your Microsoft Entra service principal ID. String principalSecret = "..."; // Replace with your Microsoft Entra principal secret.
Ustaw identyfikator podmiotu zabezpieczeń i klucz tajny podmiotu zabezpieczeń przy użyciu
setUser
isetPassword
w wersji 10.2 i nowszej orazsetAADSecurePrincipalId
isetAADSecurePrincipalSecret
w wersji 9.4 i nowszej.
Przykład użycia trybu uwierzytelniania ActiveDirectoryServicePrincipal
:
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));
}
}
}
}
Jeśli połączenie zostanie nawiązane, powinien zostać wyświetlony następujący komunikat jako dane wyjściowe:
You have successfully logged on as: <your app/client ID>
Połącz przy użyciu trybu uwierzytelniania ActiveDirectoryServicePrincipalCertificate
W poniższym przykładzie pokazano, jak używać trybu authentication=ActiveDirectoryServicePrincipalCertificate
.
Aby skompilować i uruchomić program:
Upewnij się, że masz wymagane biblioteki zależne od wymagań dotyczących konfiguracji klienta .
Znajdź następujące wiersze kodu i zastąp nazwę serwera/bazy danych nazwą serwera/bazy danych.
ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name ds.setDatabaseName("demo"); // replace with your database name
Znajdź następujące wiersze kodu. Zastąp wartość
principalId
identyfikatorem aplikacji/identyfikatorem klienta jednostki usługi Microsoft Entra, z którą chcesz nawiązać połączenie. Zastąp wartośćclientCertificate
lokalizacją certyfikatu usługi głównej.String principalId = "<service_principal_guid>"; // Replace with your Microsoft Entra service principal ID. String clientCertificate = "..."; // Replace with the location for your Microsoft Entra service principal certificate.
Jeśli wcześniej wymieniony certyfikat wymaga hasła, ustaw główny klucz tajny przy użyciu
setPassword
w wersji 10.2 i nowszej lubsetAADSecurePrincipalSecret
w wersji 9.4 lub nowszej.Jeśli certyfikat ma skojarzony klucz prywatny, ustaw klucz prywatny przy użyciu
setClientKey
. Jeśli ten klucz wymaga hasła, ustaw hasło dla klucza prywatnego przy użyciusetClientKeyPassword
.
Przykład użycia trybu uwierzytelniania ActiveDirectoryServicePrincipalCertificate
:
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 location of 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));
}
}
}
}
Jeśli połączenie zostanie nawiązane, powinien zostać wyświetlony następujący komunikat jako dane wyjściowe:
You have successfully logged on as: <your app/client ID>
Nawiązywanie połączenia przy użyciu tokenu dostępu
Aplikacje/usługi mogą pobierać token dostępu z identyfikatora Entra firmy Microsoft i używać go do łączenia się z usługami Azure SQL Database, Azure SQL Managed Instance i Azure Synapse Analytics.
Notatka
accessToken
można ustawić tylko przy użyciu parametru Properties metody getConnection()
w klasie DriverManager. Nie można go używać w parametrach połączenia. Począwszy od wersji 12.2 sterownika, użytkownicy mogą implementować i dostarczać wywołanie zwrotne accessToken
do sterownika w celu odnowienia tokena w scenariuszach puli połączeń. Scenariusze zarządzania pulą połączeń wymagają, aby implementacja puli połączeń używała standardowych klas JDBC do zarządzania pulami .
Poniższy przykład zawiera prostą aplikację Java, która łączy się z platformą Azure przy użyciu uwierzytelniania opartego na tokenach dostępu.
Aby skompilować i uruchomić przykład:
Utwórz konto aplikacji w usłudze Microsoft Entra ID dla swojej usługi.
- Zaloguj się do witryny Azure Portal.
- Przejdź do pozycji Microsoft Entra ID w lewym pasku nawigacyjnym.
- Wybierz : Rejestracje aplikacji.
- Wybierz pozycję Nowa rejestracja.
- Wprowadź
mytokentest
jako przyjazną nazwę aplikacji. - Pozostaw wybór domyślny dla obsługiwanych typów kont, które mogą używać aplikacji.
- Wybierz pozycję Zarejestruj u dołu.
- Nie potrzeba SIGN-ON adresu URL. Dostarcz cokolwiek:
https://mytokentest
. - Wybierz
Create
u dołu. - Po wybraniu Zarejestrujaplikacja zostanie natychmiast utworzona i zostanie wyświetlona strona zasobu.
- W polu Essentials znajdź identyfikator aplikacji (klienta) i skopiuj go. Ta wartość będzie potrzebna później do skonfigurowania aplikacji.
- Wybierz pozycję Certyfikaty tajemnice & w okienku nawigacji. Na karcie Sekrety klienta (0) wybierz opcję Nowy sekret klienta. Wprowadź opis sekretu i wybierz datę wygaśnięcia (wartość domyślna jest odpowiednia). Wybierz pozycję Dodaj u dołu. Ważne przed opuszczeniem tej strony skopiuj wygenerowaną wartość dla tajnego klucza klienta. Tej wartości nie można wyświetlić po opuszczeniu strony. Ta wartość jest kluczem tajnym klienta.
- Wróć do okienka Rejestracje aplikacji dla identyfikatora Entra firmy Microsoft i znajdź kartę punktów końcowych. Skopiuj adres URL w obszarze
OAuth 2.0 token endpoint
. Ten adres to Twój adres URL usługi STS.
Połącz się z bazą danych jako administrator Microsoft Entra i użyj polecenia T-SQL, aby utworzyć użytkownika bazy danych z ograniczeniami dla głównego obiektu aplikacji. Aby uzyskać więcej informacji na temat tworzenia administratora Microsoft Entra i użytkownika bazy danych zawartej, zobacz Łączenie przy użyciu uwierzytelniania Microsoft Entra.
CREATE USER [mytokentest] FROM EXTERNAL PROVIDER
Na komputerze klienckim, na którym uruchomiono przykład, pobierz bibliotekę Microsoft Authentication Library (MSAL) dla języka Java i jej zależności. Do uruchomienia tego konkretnego przykładu wymagana jest tylko MSAL. W przykładzie użyto interfejsów API z tej biblioteki do pobrania tokenu dostępu z identyfikatora Entra firmy Microsoft. Jeśli masz już token dostępu, możesz pominąć ten krok i usunąć sekcję w przykładzie, który pobiera token dostępu.
W poniższym przykładzie zastąp wartościami adres URL usługi STS, identyfikator klienta, klucz tajny klienta, serwer i nazwę bazy danych.
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));
}
}
}
}
Jeśli połączenie zakończy się pomyślnie, powinien zostać wyświetlony następujący komunikat jako dane wyjściowe:
Access Token: <your access token>
You have successfully logged on as: <your client ID>
Nawiązywanie połączenia za pomocą wywołania zwrotnego tokenu dostępu
Podobnie jak właściwość tokenu dostępu, wywołanie zwrotne tokenu dostępu umożliwia zarejestrowanie metody, która zapewnia token dostępu do sterownika. Zaletą tego wywołania zwrotnego w porównaniu z właściwością jest to, że umożliwia sterownikowi żądanie nowego tokenu dostępu, gdy tymczasowy token wygaśnie. Na przykład pula połączeń tworząca nowe połączenie może zażądać nowego tokenu z nową datą wygaśnięcia. Aby uzyskać więcej informacji, zobacz Korzystanie z puli połączeń.
W poniższym przykładzie pokazano implementację i ustawienie wywołania zwrotnego accessToken.
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));
}
}
}
}
Jeśli połączenie zakończy się pomyślnie, powinien zostać wyświetlony następujący komunikat jako dane wyjściowe:
You have successfully logged on as: <your client ID>
Począwszy od wersji 12.4, wywołanie zwrotne accessToken
można ustawić za pomocą właściwości parametrów połączenia accessTokenCallbackClass
. W poniższym przykładzie pokazano, jak ustawić wywołanie zwrotne accessToken
przy użyciu tej właściwości:
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));
}
}
}
}
Jeśli połączenie zakończy się pomyślnie, powinien zostać wyświetlony następujący komunikat jako dane wyjściowe:
You have successfully logged on as: <your client ID>
Następne kroki
Dowiedz się więcej o powiązanych pojęciach w następujących artykułach:
- Nawiązywanie połączenia z usługą Azure SQL przy użyciu uwierzytelniania Entra firmy Microsoft
- Biblioteka Uwierzytelniania Microsoft (MSAL) dla Javy
- Biblioteka uwierzytelniania usługi Microsoft Azure Active Directory (ADAL) dla języka Java
- Rozwiązywanie problemów z połączeniem z usługą Azure SQL Database