Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
JDBC sürücüsünü indirin
Bu makalede, SQL Server için Microsoft JDBC Sürücüsü ile Microsoft Entra kimlik doğrulama özelliğini kullanan Java uygulamaları geliştirme hakkında bilgi sağlanır.
Microsoft Entra ID kimliklerini kullanarak Azure SQL Veritabanı, Azure SQL Yönetilen Örneği ve Azure Synapse Analytics'e bağlanma mekanizması olarak Microsoft Entra kimlik doğrulamasını kullanabilirsiniz. Veritabanı kullanıcılarının kimliklerini merkezi olarak yönetmek ve SQL Server kimlik doğrulamasına alternatif olarak Microsoft Entra kimlik doğrulamasını kullanın. JDBC sürücüsü, Azure SQL'e bağlanmak için JDBC bağlantı dizesinde Microsoft Entra kimlik bilgilerinizi belirtmenize olanak tanır. Microsoft Entra kimlik doğrulamasını yapılandırma hakkında bilgi için Microsoft Entra kimlik doğrulamasını kullanarak Azure SQL'e bağlanmaadresini ziyaret edin.
SQL Server için Microsoft JDBC Sürücüsünde Microsoft Entra kimlik doğrulamasını destekleyecek bağlantı özellikleri şunlardır:
- kimlik doğrulaması : Bağlantı için hangi SQL kimlik doğrulama yönteminin kullanılacağını belirtmek için bu özelliği kullanın.
Olası değerler şunlardır:
ActiveDirectoryManagedIdentity
- Sürücü sürümü 8.3.1'den bu yana, "Kimlik" desteği etkinleştirilmiş bir Azure Kaynağından Azure SQL Veritabanı/Synapse Analytics'e bağlanmak için
authentication=ActiveDirectoryMSIkullanılabilir. İsteğe bağlı olarak, msiClientId bu kimlik doğrulama moduyla birlikte Connection/DataSource özelliklerinde belirtilebilir.msiClientId, bağlantı kurmak için accessToken almak üzere kullanılacak Yönetilen Kimliğin Müşteri Kimliğini içermelidir. Sürücü sürümü v12.2 olduğundanauthentication=ActiveDirectoryManagedIdentity, "Kimlik" desteği etkinleştirilmiş bir Azure Kaynağından Azure SQL Veritabanı/Synapse Analytics'e bağlanmak için de kullanılabilir. İsteğe bağlı olarak, Yönetilen Kimliğin İstemci Kimliği artıkuserözelliğinde de ayarlanabilir. Daha fazla bilgi için bkz: ActiveDirectoryManagedIdentity kimlik doğrulama modunu kullanarak bağlan.
- Sürücü sürümü 8.3.1'den bu yana, "Kimlik" desteği etkinleştirilmiş bir Azure Kaynağından Azure SQL Veritabanı/Synapse Analytics'e bağlanmak için
ActiveDirectoryDefault
- Sürücü sürümü 12.2'den bu yana
authentication=ActiveDirectoryDefault, Azure Identity istemci kitaplığındaki DefaultAzureCredential aracılığıyla Azure SQL/Synapse Analytics'e bağlanmak için kullanılabilir. Daha fazla bilgi için bkz. ActiveDirectoryDefault kimlik doğrulama modunu kullanarak bağlanma.
- Sürücü sürümü 12.2'den bu yana
Active Directory ile Entegre
- Sürücü sürümü 6.0'dan bu yana, tümleşik kimlik doğrulaması aracılığıyla Azure SQL/Synapse Analytics'e bağlanmak için
authentication=ActiveDirectoryIntegratedkullanılabilir. Bu kimlik doğrulama modunu kullanmak için şirket içi Active Directory Federasyon Hizmetleri'ni (ADFS) bulutta Microsoft Entra Kimliği ile federasyon gerekir. Bunu ayarladıktan sonra, ya yerel kütüphanemssql-jdbc_auth-<version>-<arch>.dll'ı Windows'ta uygulamanın sınıf yoluna ekleyerek ya da platformlar arası kimlik doğrulaması desteği için bir Kerberos bileti ayarlayarak bağlanabilirsiniz. Etki alanına katılmış bir makinede oturum açtığınızda kimlik bilgileri istenmeden Azure SQL/Azure Synapse Analytics'e erişebilirsiniz. Daha fazla bilgi için, ActiveDirectoryIntegrated kimlik doğrulama modunu kullanarak bağlanma hakkında 'e bakın.
- Sürücü sürümü 6.0'dan bu yana, tümleşik kimlik doğrulaması aracılığıyla Azure SQL/Synapse Analytics'e bağlanmak için
ActiveDirectoryPassword
- Sürücü sürümü 6.0'dan bu yana
authentication=ActiveDirectoryPasswordMicrosoft Entra kullanıcı adı ve parolası ile Azure SQL/Synapse Analytics'e bağlanmak için kullanılabilir. Daha fazla bilgi için bkz. ActiveDirectoryPassword kimlik doğrulama modunu kullanarak bağlanma.
- Sürücü sürümü 6.0'dan bu yana
ActiveDirectoryInteractive
- Sürücü sürümü 9.2'den bu yana
authentication=ActiveDirectoryInteractiveetkileşimli kimlik doğrulama akışı (çok faktörlü kimlik doğrulaması) aracılığıyla bir Azure SQL/Synapse Analytics'e bağlanmak için kullanılabilir. Daha fazla bilgi için, ActiveDirectoryInteractive kimlik doğrulama modunu kullanarak bağlanma hakkında bkz. .
- Sürücü sürümü 9.2'den bu yana
ActiveDirectoryServicePrincipal
- Sürücü sürümü 9.2'den bu yana, userName özelliğinde uygulama/istemci kimliğini ve parola özelliğinde bir hizmet sorumlusu kimliğinin gizlisini belirterek
authentication=ActiveDirectoryServicePrincipal, Azure SQL/Synapse Analytics'e bağlanmak için kullanılabilir. Daha fazla bilgi için, ActiveDirectoryServicePrincipal kimlik doğrulama modunu kullanarak bağlanmaya bakın.
- Sürücü sürümü 9.2'den bu yana, userName özelliğinde uygulama/istemci kimliğini ve parola özelliğinde bir hizmet sorumlusu kimliğinin gizlisini belirterek
ActiveDirectoryServicePrincipalCertificate
- Sürücü sürümü 12.4'ten bu yana, userName özelliğinde uygulama/istemci kimliği ve
authentication=ActiveDirectoryServicePrincipalCertificateözelliğindeki Hizmet Sorumlusu sertifikasının konumunu belirterek azure SQL Veritabanı/Synapse Analytics'e bağlanmak içinclientCertificatekullanılabilir. Daha fazla bilgi için ActiveDirectoryServicePrincipalCertificate kimlik doğrulama modunu kullanarak bağlanmaya bakın.
- Sürücü sürümü 12.4'ten bu yana, userName özelliğinde uygulama/istemci kimliği ve
SqlPassword
- userName/user ve parola özelliklerini kullanarak SQL Server'a bağlanmak için
authentication=SqlPasswordkullanın.
- userName/user ve parola özelliklerini kullanarak SQL Server'a bağlanmak için
Belirtilmemiş
-
authentication=NotSpecifiedkullanın veya bu kimlik doğrulama yöntemlerinden hiçbiri gerekli olmadığında varsayılan olarak bırakın.
-
accessToken : Erişim belirteci ile bir SQL Veritabanına bağlanmak için bu bağlantı özelliğini kullanın.
accessTokenyalnızca DriverManager sınıfındakigetConnection()yönteminin Properties parametresi kullanılarak ayarlanabilir. Bağlantı URL'sinde kullanılamaz.
Daha fazla bilgi için Bağlantı Özelliklerini Ayarlama sayfasındaki kimlik doğrulama özelliğine bakın.
İstemci kurulum gereksinimleri
Temel sürücü sistem gereksinimlerineek olarak, aşağıdaki kimlik doğrulama modlarının daha fazla gereksinimi vardır.
Aşağıdaki tabloda her kimlik doğrulama modu ve sürücü sürümü için gerekli kitaplık bağımlılıkları listeleniyor. Bağımlılıkların bağımlılıkları da gereklidir.
Not
Bir ana sürüme yönelik düzeltmenin ana sürümünden farklı bir bağımlılık sürümüne sahip olduğu durumlarda, düzeltme de listelenir.
| Kimlik doğrulama seçeneği | Sürücü sürümleri | Kitaplık bağımlılıkları |
|---|---|---|
ActiveDirectoryPasswordActiveDirectoryIntegrated |
6,0 |
Adal4j 1.3.0 |
ActiveDirectoryPasswordActiveDirectoryIntegrated |
6.2.2 - 6.4 |
Adal4j 1.4.0 |
ActiveDirectoryPasswordActiveDirectoryIntegrated |
7.0 |
Adal4j 1.6.0 |
ActiveDirectoryPasswordActiveDirectoryIntegrated |
7.2 |
Adal4j 1.6.3Client-Runtime-for-AutoRest 1.6.5 |
ActiveDirectoryPasswordActiveDirectoryIntegrated |
7.4 - 8.2 |
Adal4j 1.6.4Client-Runtime-for-AutoRest 1.7.0 |
ActiveDirectoryPasswordActiveDirectoryIntegrated |
8.4 |
Adal4j 1.6.5Client-Runtime-for-AutoRest 1.7.4 |
ActiveDirectoryPasswordActiveDirectoryIntegratedActiveDirectoryInteractiveActiveDirectoryServicePrincipal |
9.2 |
msal4j 1.7.1 |
ActiveDirectoryPasswordActiveDirectoryIntegratedActiveDirectoryInteractiveActiveDirectoryServicePrincipal |
9.4 |
msal4j 1.10.1 |
ActiveDirectoryPasswordActiveDirectoryIntegratedActiveDirectoryInteractiveActiveDirectoryServicePrincipal |
10,2 |
msal4j 1.11.0 |
ActiveDirectoryPasswordActiveDirectoryIntegratedActiveDirectoryInteractiveActiveDirectoryServicePrincipal |
11.2 |
msal4j 1.11.3 |
ActiveDirectoryPasswordActiveDirectoryIntegratedActiveDirectoryInteractiveActiveDirectoryServicePrincipal |
11.2.3 |
msal4j 1.13.0 |
ActiveDirectoryPasswordActiveDirectoryIntegratedActiveDirectoryInteractiveActiveDirectoryServicePrincipal |
12.2 |
msal4j 1.13.3 |
ActiveDirectoryManagedIdentityActiveDirectoryMSIActiveDirectoryDefault |
12.2 |
azure-identity 1.7.0 |
ActiveDirectoryPasswordActiveDirectoryIntegratedActiveDirectoryInteractiveActiveDirectoryServicePrincipalActiveDirectoryServicePrincipalCertificate |
12,4 |
msal4j 1.13.8 |
ActiveDirectoryManagedIdentityActiveDirectoryMSIActiveDirectoryDefault |
12,4 |
azure-identity 1.9.0 |
ActiveDirectoryPasswordActiveDirectoryIntegratedActiveDirectoryInteractiveActiveDirectoryServicePrincipalActiveDirectoryServicePrincipalCertificate |
12.6 |
msal4j 1.14.1 |
ActiveDirectoryManagedIdentityActiveDirectoryMSIActiveDirectoryDefault |
12.6 |
azure-identity 1.11.1 |
ActiveDirectoryPasswordActiveDirectoryIntegratedActiveDirectoryInteractiveActiveDirectoryServicePrincipalActiveDirectoryServicePrincipalCertificate |
12.6.3 |
msal4j 1.15.1 |
ActiveDirectoryManagedIdentityActiveDirectoryMSIActiveDirectoryDefault |
12.6.3 |
azure-identity 1.12.2 |
ActiveDirectoryPasswordActiveDirectoryIntegratedActiveDirectoryInteractiveActiveDirectoryServicePrincipalActiveDirectoryServicePrincipalCertificate |
12.6.4 |
msal4j 1.15.1 |
ActiveDirectoryManagedIdentityActiveDirectoryMSIActiveDirectoryDefault |
12.6.4 |
azure-identity 1.12.2 |
ActiveDirectoryPasswordActiveDirectoryIntegratedActiveDirectoryInteractiveActiveDirectoryServicePrincipalActiveDirectoryServicePrincipalCertificate |
12.8 |
msal4j 1.15.1 |
ActiveDirectoryManagedIdentityActiveDirectoryMSIActiveDirectoryDefault |
12.8 |
azure-identity 1.12.2 |
ActiveDirectoryPasswordActiveDirectoryIntegratedActiveDirectoryInteractiveActiveDirectoryServicePrincipalActiveDirectoryServicePrincipalCertificateActiveDirectoryManagedIdentityActiveDirectoryMSIActiveDirectoryDefault |
12.10 |
azure-identity 1.15.3 |
ActiveDirectoryManagedIdentity kimlik doğrulama modunu kullanarak bağlanma
Bu kimlik doğrulama modu sürüm 7.2'den itibaren desteklenir. Kullanmak için authentication=ActiveDirectoryMSIbelirtin. Sürüm 12.2'den başlayarak authentication=ActiveDirectoryManagedIdentity de belirtilebilir.
İstemci kurulum gereksinimlerilistelenen kitaplık bağımlılığı gereksinimlerine ek olarak, bu özellik aşağıdaki gereksinimlere sahiptir:
Hedef veritabanının, CONNECT iznine sahip bir bağımsız veritabanı kullanıcısı olmalıdır. Kapsanan kullanıcı, Azure Kaynağınızın Sistem Tarafından Atanan Yönetilen Kimliği'ni veya Kullanıcı Tarafından Atanan Yönetilen Kimlik'i ya da Yönetilen Kimliğinizin ait olduğu gruplardan birini temsil etmelidir.
İstemci ortamı bir Azure Kaynağı olmalı ve "Kimlik" özelliği desteği etkin olmalıdır. Aşağıdaki tabloda her JDBC sürücü sürümü tarafından desteklenen Azure hizmetleri listelenmektedir:
Sürücü sürümü Gerekli bağımlılıklar Desteklenen Azure hizmetleri 7.2 - 11.2 Hiç kimse Azure App Service ve Azure İşlevleri
Azure Sanal Makineler12.2
12,4
12.6
12.8
12.10azure-identity1.7.0
azure-identity1.9.0
azure-identity1.11.1
azure-identity1.12.2
azure-identity1.15.3Azure App Service ve Azure İşlevleri
Azure Arc
Azure Cloud Shell
Azure Kubernetes Service
Azure Service Fabric
Azure Sanal Makineler
Azure Sanal Makineler Ölçek Kümeleri
Aşağıdaki örnekte authentication=ActiveDirectoryManagedIdentity modunun nasıl kullanılacağı gösterilmektedir. Bu örneği Yönetilen Kimlik için yapılandırılmış bir Azure Kaynağının içinden çalıştırın.
Örneği çalıştırmak için sunucu/veritabanı adını aşağıdaki satırlarda sunucu/veritabanı adınızla değiştirin:
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
ActiveDirectoryMSI kimlik doğrulama modunu kullanma örneği:
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));
}
}
}
}
Aşağıdaki örnekte authentication=ActiveDirectoryManagedIdentity modunun nasıl kullanılacağı gösterilmektedir.
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));
}
}
}
}
Azure Sanal Makinesindeki bu örnekler, Sistem Tarafından Atanan Yönetilen Kimlik veya Kullanıcı Tarafından Atanan Yönetilen Kimlik (yönetilen kimliğin İstemci Kimliği msiClientId veya user olarak belirtilmişse) ile bir erişim belirteci alır ve alınan erişim belirteci kullanılarak bir bağlantı kurar. Bir bağlantı kurulursa aşağıdaki iletiyi görmeniz gerekir:
You have successfully logged on as: <your Managed Identity username>
ActiveDirectoryDefault kimlik doğrulama modunu kullanarak bağlanma
ActiveDirectoryDefault kimlik doğrulaması seçeneği, Azure Identity istemci kitaplığının DefaultAzureCredential zincirlenmiş TokenCredential uygulamasını kullanır. Kimlik bilgisi, sık kullanılan kimlik doğrulama yöntemlerini birbirine zincirlenmiş olarak birleştirir.
ActiveDirectoryDefault kimlik doğrulaması, Yönetilen Kimlik için Azure Identity istemci kitaplığına ihtiyaç duyan bir çalışma zamanı bağımlılığı gerektirir. Kütüphane sürümü ayrıntıları için bkz. İstemci kurulum gereksinimleri.
Aşağıdaki tabloda, her JDBC sürücüsü sürümü için DefaultAzureCredential kimlik bilgisi zinciri listelenir.
| Sürücü sürümü | azure-identity sürümü |
DefaultAzureCredential zinciri |
|---|---|---|
| 12.2 |
azure-identity 1.7.0 |
Çevre Yönetilen Kimlik IntelliJ Azure Komut Satırı Arayüzü (Azure CLI) Azure PowerShell |
| 12,4 |
azure-identity 1.9.0 |
Çevre İş Yükü Kimliği Yönetilen Kimlik Azure Geliştirici CLI'sı IntelliJ Azure Komut Satırı Arayüzü (Azure CLI) Azure PowerShell |
| 12.6 |
azure-identity 1.11.1 |
Çevre İş Yükü Kimliği Yönetilen Kimlik Azure Geliştirici CLI'sı IntelliJ Azure Komut Satırı Arayüzü (Azure CLI) Azure PowerShell |
| 12.8 |
azure-identity 1.12.2 |
Çevre İş Yükü Kimliği Yönetilen Kimlik Azure Geliştirici CLI'sı IntelliJ Azure Komut Satırı Arayüzü (Azure CLI) Azure PowerShell |
| 12.10 |
azure-identity 1.15.3 |
Çevre İş Yükü Kimliği Yönetilen Kimlik Azure Geliştirici CLI'sı IntelliJ Azure Komut Satırı Arayüzü (Azure CLI) Azure PowerShell |
Environment kimlik bilgilerini yapılandırmak için ayarlanabilen birçok değişken vardır.
DefaultAzureCredential kimlik bilgileri dahil olmak üzere Environment zincirini yapılandırmayla ilgili ayrıntılar için önceki tabloda bağlantılı azure-identity belgelerinin ilgili sürümüne bakın.
Windows'da IntellijCredential kullanmak için INTELLIJ_KEEPASS_PATH ortam değişkenini keepass dosyanızın konumuna ayarlayın. Örneğin, INTELLIJ_KEEPASS_PATH=C:\user\your\path\to\the\keepass\file.
DefaultAzureCredentialdaha fazla kiracı sağlamak için ADDITIONALLY_ALLOWED_TENANTS ortam değişkenini kullanın. Bu değişken virgülle ayrılmış bir liste alır. Örneğin, ADDITIONALLY_ALLOWED_TENANTS=<your-tenant-id-0>,<your-tenant-id-1>,<your-tenant-id-2>,...
Aşağıdaki örnekte, authentication=ActiveDirectoryDefaultiçinde AzureCliCredential ile DefaultAzureCredential modunun nasıl kullanılacağı gösterilmektedir.
İlk olarak aşağıdaki komutu kullanarak Azure CLI'da oturum açın.
az loginAzure CLI'da başarıyla oturum açtıktan sonra aşağıdaki kodu çalıştırın.
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)); } } } }
ActiveDirectoryIntegrated kimlik doğrulama modunu kullanarak bağlanma
SQL Server için Microsoft JDBC Sürücüsünde ActiveDirectoryIntegrated kimlik doğrulamasını kullanmanın iki yolu vardır:
- Windows'da, indirilen paketinden
mssql-jdbc_auth-<version>-<arch>.dllsistem yolundaki bir konuma kopyalanabilir. - 6.4 sürümünden başlayarak DLL'yi kullanamıyorsanız, bir Kerberos bileti yapılandırabilirsiniz. Bu yöntem platformlar (Windows, Linux ve macOS) genelinde desteklenir. Daha fazla bilgi için bkz. Windows, Linux ve macOS'ta Kerberos biletini ayarlama.
İstemci kurulum gereksinimlerigerekli bağımlı kitaplıklara sahip olduğunuzdan emin olun.
Aşağıdaki örnekte authentication=ActiveDirectoryIntegrated modunun nasıl kullanılacağı gösterilmektedir. Bu örnek, Microsoft Entra ID ile federe edilmiş etki alanına katılmış bir makinede çalışır. Windows kullanıcınızı temsil eden bir veritabanı kullanıcısının veritabanında mevcut olması ve CONNECT iznine sahip olması gerekir.
Örneği yürütmeden önce sunucu/veritabanı adını aşağıdaki satırlarda sunucu/veritabanı adınızla değiştirin:
ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name
ds.setDatabaseName("demo"); // replace with your database name
ActiveDirectoryIntegrated kimlik doğrulama modunu kullanma örneği:
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));
}
}
}
}
Bu örnek çalıştırılırken istemci platformundaki Kerberos biletiniz otomatik olarak kullanılır ve parola gerekmez. Bir bağlantı kurulursa aşağıdaki iletiyi görmeniz gerekir:
You have successfully logged on as: <your domain user name>
Windows, Linux ve macOS'ta Kerberos bileti ayarlama
Geçerli kullanıcınızı bir Windows etki alanı hesabına bağlamak için bir Kerberos bileti oluşturmanız gerekir. Aşağıda önemli adımların bir özeti yer alır.
Windows
Not
Windows'da, indirilen mssql-jdbc_auth-<version>-<arch>.dll içindeki , bu Kerberos yapılandırma adımları yerine kullanılabilir. Bu adımlar yalnızca DLL'yi kullanamıyorsanız gereklidir.
JDK, Microsoft Entra ID ile federe edilmiş etki alanına katılmış bir makinede Anahtar Dağıtım Merkezi'nden (KDC) TGT almak için kullanabileceğiniz kinitile birlikte gelir.
1. Adım: Bilet alma bileti verme
üzerinde çalıştır : Windows
Eylem:
- KDC'den TGT almak için
kinit username@DOMAIN.COMPANY.COMkomutunu kullanın, ardından sistem sizden etki alanı parolanızı ister. - Kullanılabilir biletleri görmek için
klistkullanın. Kinit başarılı olursa,krbtgt/DOMAIN.COMPANY.COM@ DOMAIN.COMPANY.COM'dan bir bilet görmeniz gerekir.
Not
Uygulamanızın KDC'yi bulması için
.iniiçeren bir-Djava.security.krb5.confdosyası belirtmeniz gerekebilir.- KDC'den TGT almak için
Linux ve macOS
Gereksinimler
Kerberos Etki Alanı Denetleyicinizi sorgulamak için Windows etki alanına katılmış bir makineye erişim.
1. Adım: Kerberos KDC'yi bulma
üzerinde çalıştır : Windows komut satırı
Eylem:
nltest /dsgetdc:DOMAIN.COMPANY.COM(DOMAIN.COMPANY.COMetki alanınızın adıyla eşleştiğinde)Örnek Çıktı
DC: \\co1-red-dc-33.domain.company.com Address: \\2111:4444:2111:33:1111:ecff:ffff:3333 ... The command completed successfullyAyıklamak için bilgi DC adı, bu örnekte
co1-red-dc-33.domain.company.com
2. Adım: Krb5.conf dosyasında KDC'yi yapılandırma
üzerinde çalıştır: Linux/macOS
Eylem:
/etc/krb5.confistediğiniz bir düzenleyicide düzenleyin. Aşağıdaki anahtarları yapılandırın[libdefaults] default_realm = DOMAIN.COMPANY.COM [realms] DOMAIN.COMPANY.COM = { kdc = co1-red-dc-28.domain.company.com }Ardından
krb5.confdosyasını kaydedin ve çıkınNot
Etki alanı BÜYÜK HARFLERLE yazılmalıdır.
3. Adım: Bilet alma biletini test etme
- üzerinde çalıştır: Linux/macOS
-
Eylem:
- KDC'den TGT almak için
kinit username@DOMAIN.COMPANY.COMkomutunu kullanın, ardından sistem sizden etki alanı parolanızı ister. - Kullanılabilir biletleri görmek için
klistkullanın. Kinit başarılı olursa,krbtgt/DOMAIN.COMPANY.COM@ DOMAIN.COMPANY.COM'dan bir bilet görmeniz gerekir.
- KDC'den TGT almak için
ActiveDirectoryPassword kimlik doğrulama modunu kullanarak bağlanma
Aşağıdaki örnekte authentication=ActiveDirectoryPassword modunun nasıl kullanılacağı gösterilmektedir.
Örneği derlemek ve çalıştırmak için:
İstemci kurulum gereksinimlerigerekli bağımlı kitaplıklara sahip olduğunuzdan emin olun.
Aşağıdaki kod satırlarını bulun ve sunucu/veritabanı adını sunucu/veritabanı adınızla değiştirin.
ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name ds.setDatabaseName("demo"); // replace with your database nameAşağıdaki kod satırlarını bulun. Kullanıcı adını, bağlanmak istediğiniz Microsoft Entra kullanıcısının adıyla değiştirin.
ds.setUser("bob@example.com"); // replace with your username ds.setPassword("password"); // replace with your password
ActiveDirectoryPassword kimlik doğrulama modunu kullanma örneği:
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));
}
}
}
}
Bağlantı kurulursa, çıktı olarak aşağıdaki iletiyi görmeniz gerekir:
You have successfully logged on as: <your user name>
ActiveDirectoryInteractive kimlik doğrulama modunu kullanarak bağlanma
Aşağıdaki örnekte authentication=ActiveDirectoryInteractive modunun nasıl kullanılacağı gösterilmektedir.
Örneği derlemek ve çalıştırmak için:
İstemci kurulum gereksinimlerigerekli bağımlı kitaplıklara sahip olduğunuzdan emin olun.
Aşağıdaki kod satırlarını bulun ve sunucu/veritabanı adını sunucu/veritabanı adınızla değiştirin.
ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name ds.setDatabaseName("demo"); // replace with your database nameAşağıdaki kod satırlarını bulun. kullanıcı adını, bağlanmak istediğiniz Microsoft Entra kullanıcısının adıyla değiştirin.
ds.setUser("bob@example.com"); // replace with your username
ActiveDirectoryInteractive kimlik doğrulama modunu kullanma örneği:
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));
}
}
}
}
Programı çalıştırdığınızda, kullanıcının kimliğini doğrulamak için bir tarayıcı görüntülenir. Tam olarak ne göreceğiniz, Microsoft Entra Kimliğinizi nasıl yapılandırdığınıza bağlıdır. Telefon aracılığıyla kullanıcı adı, parola, PIN veya ikinci cihaz kimlik doğrulaması için çok faktörlü kimlik doğrulaması istemleri içerebilir veya içermeyebilir. Aynı programda birden çok etkileşimli kimlik doğrulama isteği yapılırsa, daha sonraki istekler kimlik doğrulama kitaplığının önceden önbelleğe alınmış bir kimlik doğrulama belirtecini yeniden kullanılıp kullanılamadığını bile sormayabilir.
Microsoft Entra Id'yi çok faktörlü kimlik doğrulaması gerektirecek şekilde yapılandırma hakkında bilgi için bkz. Bulutta Microsoft Entra çok faktörlü kimlik doğrulamasını kullanmaya başlama.
Bu iletişim kutularının ekran görüntüleri için bkz. Microsoft Entra çok faktörlü kimlik doğrulamasını kullanma.
Kullanıcı kimlik doğrulaması başarıyla tamamlanırsa, tarayıcıda aşağıdaki iletiyi görmeniz gerekir:
Authentication complete. You can close the browser and return to the application.
Bu ileti yalnızca kullanıcı kimlik doğrulamasının başarılı olduğunu gösterir, ancak sunucuya başarılı bir bağlantı olması gerekmez. Uygulamaya geri döndüğünüzde, sunucuya bir bağlantı kurulursa, çıktı olarak aşağıdaki iletiyi görmeniz gerekir:
You have successfully logged on as: <your user name>
ActiveDirectoryServicePrincipal kimlik doğrulama modunu kullanarak bağlanma
Aşağıdaki örnekte authentication=ActiveDirectoryServicePrincipal modunun nasıl kullanılacağı gösterilmektedir.
Örneği derlemek ve çalıştırmak için:
İstemci kurulum gereksinimlerigerekli bağımlı kitaplıklara sahip olduğunuzdan emin olun.
Aşağıdaki kod satırlarını bulun ve sunucu/veritabanı adını sunucu/veritabanı adınızla değiştirin.
ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name ds.setDatabaseName("demo"); // replace with your database nameAşağıdaki kod satırlarını bulun.
principalIddeğerini, bağlanmak istediğiniz Microsoft Entra hizmet sorumlusunun Uygulama Kimliği / İstemci Kimliği ile değiştirin.principalSecretdeğerini gizli ile değiştirin.String principalId = "<service_principal_guid>"; // Replace with your Microsoft Entra service principal ID. String principalSecret = "..."; // Replace with your Microsoft Entra principal secret.Sürüm 10.2 ve sonrasında
setUservesetPasswordkullanarak, sürüm 9.4 ve altında isesetAADSecurePrincipalIdvesetAADSecurePrincipalSecretkullanarak ana kimliği ve anahtarını ayarlayın.
ActiveDirectoryServicePrincipal kimlik doğrulama modunu kullanma örneği:
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));
}
}
}
}
Bir bağlantı kurulursa, çıktı olarak aşağıdaki iletiyi görmeniz gerekir:
You have successfully logged on as: <your app/client ID>
ActiveDirectoryServicePrincipalCertificate kimlik doğrulama modunu kullanarak bağlanma
Aşağıdaki örnekte authentication=ActiveDirectoryServicePrincipalCertificate modunun nasıl kullanılacağı gösterilmektedir.
Örneği derlemek ve çalıştırmak için:
İstemci kurulum gereksinimlerigerekli bağımlı kitaplıklara sahip olduğunuzdan emin olun.
Aşağıdaki kod satırlarını bulun ve sunucu/veritabanı adını sunucu/veritabanı adınızla değiştirin.
ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name ds.setDatabaseName("demo"); // replace with your database nameAşağıdaki kod satırlarını bulun.
principalIddeğerini, bağlanmak istediğiniz Microsoft Entra hizmet sorumlusunun Uygulama Kimliği / İstemci Kimliği ile değiştirin. değeriniclientCertificatehizmet sorumlusu sertifikasının dosya yolu ile değiştirin.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.Daha önce bahsedilen sertifikanın bir parolaya ihtiyacı varsa, sürüm 10.2 ve üstünde
setPasswordveya sürüm 9.4 ve altındaysasetAADSecurePrincipalSecretkullanarak ana Gizliyi ayarlayın.Sertifikanın ilişkili bir özel anahtarı varsa,
setClientKeykullanarak özel anahtarı ayarlayın. Bu anahtar parola gerektiriyorsa,setClientKeyPasswordkullanarak özel anahtarın parolasını ayarlayın.
ActiveDirectoryServicePrincipalCertificate kimlik doğrulama modunu kullanma örneği:
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));
}
}
}
}
Bir bağlantı kurulursa, çıktı olarak aşağıdaki iletiyi görmeniz gerekir:
You have successfully logged on as: <your app/client ID>
Erişim belirteci kullanarak bağlanma
Uygulamalar/hizmetler Microsoft Entra Id'den bir erişim belirteci alabilir ve bunu Kullanarak Azure SQL Veritabanı, Azure SQL Yönetilen Örneği ve Azure Synapse Analytics'e bağlanabilir.
Not
accessToken yalnızca DriverManager sınıfındaki getConnection() yönteminin Properties parametresi kullanılarak ayarlanabilir. Bağlantı dizesinde kullanılamaz. Sürücü sürümü 12.2'den başlayarak, kullanıcılar bağlantı havuzu senaryolarında belirteç yenilemesi için sürücüye accessToken bir geri çağırma uygulayabilir ve sağlayabilir. Bağlantı havuzu senaryoları, bağlantı havuzu uygulamasının standartJDBC bağlantı havuzu sınıflarını kullanmasını gerektirir.
Aşağıdaki örnek, erişim belirteci tabanlı kimlik doğrulaması kullanarak Azure'a bağlanan basit bir Java uygulaması içerir.
Örneği derlemek ve çalıştırmak için:
Hizmetiniz için Microsoft Entra Id'de bir uygulama hesabı oluşturun.
- Azure portalında oturum açın.
- Sol gezinti bölmesinde Microsoft Entra ID gidin.
- Uygulama kayıtları seçin.
- Seçin yeni kayıt.
- Uygulama için kolay ad olarak
mytokentestgirin. - Uygulamayı kullanabilen desteklenen hesap türleri için varsayılan seçimi değiştirmeyin.
- Alttaki kaydet'i seçin.
- SIGN-ON URL'si gerekmez. Herhangi bir şeyi sağlayabilirsiniz:
https://mytokentest. - Alttaki
Createseçin. - kaydetseçildiğinde uygulama hemen oluşturulur ve kaynak sayfasına yönlendirilirsiniz.
- Temel Bilgiler kutusunda Uygulama (istemci) kimliğini bulun ve kopyalayın. Uygulamanızı yapılandırmak için daha sonra bu değere ihtiyacınız vardır.
- Gezinti bölmesinden Sertifikalar & gizlileri seçin. İstemci sırları (0) sekmesinde, Yeni istemci gizli anahtarı oluştur'u seçin. Gizli için bir açıklama girin ve bir süre sonu seçin (varsayılanı kullanabilirsiniz). Alttaki 'ı seçin, ardından'i ekleyin. Önemli: Bu sayfadan ayrılmadan önce, müşteri gizli bilgisi için oluşturulan Değer kopyalayın. Bu değer sayfadan çıktıktan sonra görüntülenemez. Bu değer istemci sırrıdır.
- Microsoft Entra Id için Uygulama kayıtları bölmesine dönün ve Uç Noktaları sekmesini bulun.
OAuth 2.0 token endpointaltındaki URL'yi kopyalayın. Bu URL, STS URL'nizdir.
Veritabanınıza Microsoft Entra yöneticisi olarak bağlanın ve uygulama sorumlunuz için bağımsız veritabanı kullanıcısı sağlamak üzere bir T-SQL komutu kullanın. Microsoft Entra kimlik doğrulamasını kullanarak nasıl bağlanılacağı ve Microsoft Entra yöneticisi ile bağımsız bir veritabanı kullanıcısı oluşturma hakkında daha fazla bilgi için bkz. Bağlanma.
CREATE USER [mytokentest] FROM EXTERNAL PROVIDERÖrneği çalıştırdığınız istemci makinesinde Java kitaplığı ve bağımlılıkları için Microsoft Kimlik Doğrulama Kitaplığı'nı (MSAL) indirin. MSAL yalnızca bu özel örneği çalıştırmak için gereklidir. Örnek, Microsoft Entra Id'den erişim belirtecini almak için bu kitaplıktan API'leri kullanır. Zaten bir erişim belirteciniz varsa, bu adımı atlayabilir ve örnekteki erişim belirtecini alan bölümü kaldırabilirsiniz.
Aşağıdaki örnekte STS URL'si, İstemci Kimliği, gizli dizi, sunucu ve veritabanı adını değerlerinizle değiştirin.
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));
}
}
}
}
Bağlantı başarılı olursa, çıktı olarak aşağıdaki iletiyi görmeniz gerekir:
Access Token: <your access token>
You have successfully logged on as: <your client ID>
Erişim belirteci geri çağırma kullanarak bağlanma
Erişim belirteci özelliği gibi erişim belirteci geri çağırması da sürücüye erişim belirteci sağlayan bir yöntem kaydetmenizi sağlar. Bu geri çağırmanın özelliğe göre avantajı, belirtecin süresi dolduğunda geri çağırmanın sürücünün yeni bir erişim belirteci talep etmesine izin vermesidir. Örneğin, yeni bağlantı oluşturan bir bağlantı havuzu yeni bir son kullanma tarihiyle yeni bir belirteç isteyebilir. Daha fazla bilgi için bkz. Bağlantı havuzu kullanımı.
Aşağıdaki örnekte accessToken geri çağırmasının uygulanması ve ayarlanması gösterilmektedir.
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));
}
}
}
}
Bağlantı başarılı olursa, çıktı olarak aşağıdaki iletiyi görmeniz gerekir:
You have successfully logged on as: <your client ID>
Sürüm 12.4'ten başlayarak, accessToken geri çağırma accessTokenCallbackClass bağlantı dizesi özelliği aracılığıyla ayarlanabilir. Aşağıdaki örnekte, bu özelliği kullanarak accessToken geri çağırmanın nasıl ayarlanacağı gösterilmektedir:
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));
}
}
}
}
Bağlantı başarılı olursa, çıktı olarak aşağıdaki iletiyi görmeniz gerekir:
You have successfully logged on as: <your client ID>
Sonraki adımlar
aşağıdaki makalelerde ilgili kavramlar hakkında daha fazla bilgi edinin:
- Microsoft Entra kimlik doğrulaması kullanarak Azure SQL'e bağlanma
- Java için Microsoft Authentication Library(MSAL)
- Java için Microsoft Azure Active Directory Kimlik Doğrulama Kitaplığı(ADAL)
- Azure SQL Veritabanı bağlantı sorunlarını giderme