Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
              
              
              
              JDBC-stuurprogramma downloaden
Dit artikel bevat informatie over het ontwikkelen van Java-toepassingen die gebruikmaken van de Microsoft Entra-verificatiefunctie met het Microsoft JDBC-stuurprogramma voor SQL Server.
U kunt Microsoft Entra-verificatie gebruiken. Dit is een mechanisme om verbinding te maken met Azure SQL Database, Azure SQL Manged Instance en Azure Synapse Analytics met behulp van identiteiten in Microsoft Entra ID. Gebruik Microsoft Entra-verificatie om identiteiten van databasegebruikers centraal te beheren en als alternatief voor SQL Server-verificatie. Met het JDBC-stuurprogramma kunt u uw Microsoft Entra-referenties opgeven in de JDBC-verbindingsreeks om verbinding te maken met Azure SQL. Voor meer informatie over het configureren van Microsoft Entra-verificatie gaat u naar Verbinding maken met Azure SQL met behulp van Microsoft Entra-verificatie.
Verbindingseigenschappen ter ondersteuning van Microsoft Entra-verificatie in het Microsoft JDBC-stuurprogramma voor SQL Server zijn:
- 
              verificatie: Gebruik deze eigenschap om aan te geven welke SQL-verificatiemethode moet worden gebruikt voor de verbinding.
Mogelijke waarden zijn: 
ActiveDirectoryManagedIdentity
- Sinds stuurprogrammaversie 8.3.1 kan men 
authentication=ActiveDirectoryMSIgebruiken om vanuit een Azure-resource, waar de ondersteuning voor identiteit is ingeschakeld, verbinding te maken met een Azure SQL Database/Synapse Analytics. MsiClientId kan eventueel worden opgegeven in de eigenschappen Connection/DataSource, samen met deze verificatiemodus.msiClientIdmoet de client-id van een beheerde identiteit bevatten die moet worden gebruikt om het accessToken te verkrijgen voor het tot stand brengen van de verbinding. Vanaf stuurprogrammaversie v12.2 kanauthentication=ActiveDirectoryManagedIdentityook worden gebruikt om verbinding te maken met een Azure SQL Database/Synapse Analytics vanaf een Azure-resource met ingeschakelde ondersteuning voor identiteiten. Desgewenst kan de client-id van een beheerde identiteit ook worden ingesteld in deusereigenschap. Zie Verbinding maken met de verificatiemodus ActiveDirectoryManagedIdentity voor meer informatie. 
- Sinds stuurprogrammaversie 8.3.1 kan men 
 ActiveDirectoryDefault
- Vanaf stuurprogrammaversie 12.2 kan 
authentication=ActiveDirectoryDefaultworden gebruikt om verbinding te maken met Azure SQL/Synapse Analytics via de DefaultAzureCredential vanuit de Azure Identity-clientbibliotheek. Zie Verbinding maken met de ActiveDirectoryDefault-verificatiemodus voor meer informatie. 
- Vanaf stuurprogrammaversie 12.2 kan 
 ActiveDirectoryIntegrated
- Sinds stuurprogrammaversie 6.0 kan 
authentication=ActiveDirectoryIntegratedworden gebruikt om via geïntegreerde verificatie verbinding te maken met Azure SQL/Synapse Analytics. Als u deze verificatiemodus wilt gebruiken, moet u de on-premises Active Directory Federation Services (ADFS) federeren met Microsoft Entra-id in de cloud. Zodra u deze hebt ingesteld, kunt u verbinding maken door de systeemeigen bibliotheekmssql-jdbc_auth-<version>-<arch>.dlltoe te voegen aan het pad naar de toepassingsklasse in Windows of door een Kerberos-ticket in te stellen voor ondersteuning voor platformoverschrijdende verificatie. U hebt toegang tot Azure SQL/Azure Synapse Analytics zonder dat u om referenties wordt gevraagd wanneer u bent aangemeld bij een computer die lid is van een domein. Zie Verbinding maken met activeDirectoryIntegrated-verificatiemodus voor meer informatie. 
- Sinds stuurprogrammaversie 6.0 kan 
 ActiveDirectoryPassword
- Sinds stuurprogrammaversie 6.0 kan 
authentication=ActiveDirectoryPasswordworden gebruikt om verbinding te maken met Azure SQL/Synapse Analytics met een Microsoft Entra-gebruikersnaam en -wachtwoord. Zie Verbinding maken met de activeDirectoryPassword-verificatiemodus voor meer informatie. 
- Sinds stuurprogrammaversie 6.0 kan 
 ActiveDirectoryInteractive
- Sinds stuurprogrammaversie 9.2 kan 
authentication=ActiveDirectoryInteractiveworden gebruikt om verbinding te maken met een Azure SQL/Synapse Analytics via een interactieve verificatiestroom (meervoudige verificatie). Zie Verbinding maken met de ActiveDirectoryInteractive-verificatiemodus voor meer informatie. 
- Sinds stuurprogrammaversie 9.2 kan 
 ActiveDirectoryServicePrincipal
- Sinds stuurprogrammaversie 9.2 kan 
authentication=ActiveDirectoryServicePrincipalworden gebruikt om verbinding te maken met een Azure SQL/Synapse Analytics door de toepassings-/client-id op te geven in de eigenschap UserName en het geheim van een service-principal-identiteit in de wachtwoordeigenschap. Zie Verbinding maken met de ActiveDirectoryServicePrincipal-verificatiemodus voor meer informatie. 
- Sinds stuurprogrammaversie 9.2 kan 
 Active Directory-servicehoofdcertificaat
- Sinds stuurprogrammaversie 12.4 kan 
authentication=ActiveDirectoryServicePrincipalCertificateworden gebruikt om verbinding te maken met een Azure SQL Database/Synapse Analytics door de toepassing/client-id op te geven in de eigenschap UserName en de locatie van het Service Principal-certificaat in declientCertificateeigenschap. Zie Connect using ActiveDirectoryServicePrincipalCertificate authentication mode (Verbinding maken met activeDirectoryServicePrincipalCertificate) voor meer informatie. 
- Sinds stuurprogrammaversie 12.4 kan 
 SqlPassword
- Gebruik 
authentication=SqlPasswordom verbinding te maken met een SQL Server met de eigenschappen username/user en password. 
- Gebruik 
 Niet opgegeven
- Gebruik 
authentication=NotSpecifiedof laat deze staan als de standaardinstelling wanneer geen van deze verificatiemethoden nodig is. 
- Gebruik 
 accessToken: Gebruik deze verbindingseigenschap om verbinding te maken met een SQL Database met een toegangstoken.
accessTokenkan alleen worden ingesteld met behulp van de parameter Properties van degetConnection()methode in de klasse DriverManager. Deze kan niet worden gebruikt in de verbindings-URL.
 
Zie de verificatie-eigenschap op de pagina Verbindingseigenschappen instellen voor meer informatie.
Vereisten voor clientinstallatie
Naast de basisvereisten voor het stuurprogramma zijn er voor de volgende verificatiemodi meer vereisten.
De volgende tabel bevat de vereiste bibliotheekafhankelijkheden voor elke verificatiemodus en stuurprogrammaversie. Afhankelijkheden van afhankelijkheden zijn ook vereist.
Opmerking
In gevallen waarin de hotfix voor een primaire release een andere afhankelijkheidsversie heeft dan de primaire release, wordt de hotfix ook vermeld.
| Verificatieoptie | Stuurprogrammaversies | Bibliotheekafhankelijkheden | 
|---|---|---|
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 | 
Verbinding maken met de verificatiemodus ActiveDirectoryManagedIdentity
Deze verificatiemodus wordt ondersteund vanaf versie 7.2. Als u deze wilt gebruiken, geeft u op authentication=ActiveDirectoryMSI. Vanaf versie 12.2 kan authentication=ActiveDirectoryManagedIdentity ook opgegeven worden.
Naast de bibliotheekafhankelijkheidsvereisten die worden vermeld in clientinstallatievereisten, heeft deze functie de volgende vereisten:
De doeldatabase moet een ingesloten databasegebruiker hebben, met de machtiging CONNECT. De ingesloten gebruiker moet de door het systeem toegewezen beheerde identiteit of door de gebruiker toegewezen beheerde identiteit van uw Azure-resource vertegenwoordigen, of een van de groepen waartoe uw beheerde identiteit behoort.
De clientomgeving moet een Azure-resource zijn en moet ondersteuning voor identiteitsfuncties zijn ingeschakeld. De volgende tabel bevat Azure-services die worden ondersteund door elke JDBC-stuurprogrammaversie:
Versie van het stuurprogramma Vereiste afhankelijkheden Ondersteunde Azure-services 7.2 - 11.2 Geen Azure App Service en Azure Functions 
Virtuele Azure-machines12.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 en Azure Functions 
Azure Arc
Azure Cloud Shell
Azure Kubernetes Service
Azure Service Fabric
Virtuele Azure-machines
virtuele-machineschaalsets van Azure
In het volgende voorbeeld ziet u hoe u de modus gebruikt authentication=ActiveDirectoryManagedIdentity . Voer dit voorbeeld uit vanuit een Azure-resource die is geconfigureerd voor beheerde identiteit.
Om het voorbeeld te laten werken, moet u de server-/databasenaam vervangen door uw eigen server-/databasenaam in de volgende regels.
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
Het voorbeeld om ActiveDirectoryMSI authenticatiemodus te gebruiken:
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));
            }
        }
    }
}
In het volgende voorbeeld ziet u hoe u de modus gebruikt 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));
            }
        }
    }
}
Deze voorbeelden op een virtuele Azure-machine halen een toegangstoken op uit Systeemtoegewezen Beheerde Identiteit of Gebruikerstoegewezen Beheerde Identiteit (als msiClientId of user is opgegeven met een client-id van een Beheerde Identiteit) en brengt een verbinding tot stand met behulp van het opgehaalde toegangstoken. Als er een verbinding tot stand is gebracht, ziet u het volgende bericht:
You have successfully logged on as: <your Managed Identity username>
Verbinding maken met de ActiveDirectoryDefault-verificatiemodus
De ActiveDirectoryDefault verificatieoptie maakt gebruik van de gekoppelde DefaultAzureCredential implementatie van TokenCredential de Azure Identity-clientbibliotheek. De credential combineert veelgebruikte verificatiemethoden die aan elkaar zijn gekoppeld.
              ActiveDirectoryDefault verificatie vereist een runtime-afhankelijkheid van de Azure Identity-clientbibliotheek voor beheerde identiteit. Zie Client-installatievereisten voor informatie over bibliotheekversies.
De volgende tabel bevat de DefaultAzureCredential referentieketen voor elke JDBC-stuurprogrammaversie.
| Versie van het stuurprogramma | azure-identity-versie | 
              DefaultAzureCredential ketting | 
|---|---|---|
| 12.2 | 
              azure-identity 1.7.0 | 
Milieu Beheerde identiteit IntelliJ Azure-opdrachtregelinterface (CLI) Azure PowerShell  | 
| 12.4 | 
              azure-identity 1.9.0 | 
Milieu Workloadidentiteit Beheerde identiteit Azure-ontwikkelaars-CLI IntelliJ Azure-opdrachtregelinterface (CLI) Azure PowerShell  | 
| 12,6 | 
              azure-identity 1.11.1 | 
Milieu Workloadidentiteit Beheerde identiteit Azure-ontwikkelaars-CLI IntelliJ Azure-opdrachtregelinterface (CLI) Azure PowerShell  | 
| 12.8 | 
              azure-identity 1.12.2 | 
Milieu Workloadidentiteit Beheerde identiteit Azure-ontwikkelaars-CLI IntelliJ Azure-opdrachtregelinterface (CLI) Azure PowerShell  | 
| 12.10 | 
              azure-identity 1.15.3 | 
Milieu Workloadidentiteit Beheerde identiteit Azure-ontwikkelaars-CLI IntelliJ Azure-opdrachtregelinterface (CLI) Azure PowerShell  | 
Er zijn veel variabelen die kunnen worden ingesteld om de Environment referentie te configureren. Zie de relevante versie van de azure-identity-documenten die zijn gekoppeld in de vorige tabel voor meer informatie over het configureren van de DefaultAzureCredential keten, inclusief de Environment referentie.
Als u de IntellijCredential omgevingsvariabele in Windows wilt gebruiken, stelt u de omgevingsvariabele INTELLIJ_KEEPASS_PATH in op de locatie van uw keepass bestand. Bijvoorbeeld: INTELLIJ_KEEPASS_PATH=C:\user\your\path\to\the\keepass\file.
Gebruik de omgevingsvariabele DefaultAzureCredential om meer tenants aan de ADDITIONALLY_ALLOWED_TENANTS toe te voegen. Deze variabele maakt een door komma's gescheiden lijst. Bijvoorbeeld ADDITIONALLY_ALLOWED_TENANTS=<your-tenant-id-0>,<your-tenant-id-1>,<your-tenant-id-2>,...
In het volgende voorbeeld ziet u hoe authentication=ActiveDirectoryDefault modus wordt gebruikt met AzureCliCredential binnen DefaultAzureCredential.
Meld u eerst aan bij de Azure CLI met de volgende opdracht.
az loginNadat u zich hebt aangemeld bij de Azure CLI, voert u de volgende code uit.
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)); } } } }
Verbind met de ActiveDirectoryIntegrated-authenticatiemodus.
Er zijn twee manieren om verificatie te gebruiken ActiveDirectoryIntegrated in het Microsoft JDBC-stuurprogramma voor SQL Server:
- In Windows 
mssql-jdbc_auth-<version>-<arch>.dllkan vanuit het gedownloade pakket worden gekopieerd naar een locatie in het systeempad. - Als u de DLL niet kunt gebruiken, vanaf versie 6.4, kunt u een Kerberos-ticket configureren. Deze methode wordt ondersteund op verschillende platforms (Windows, Linux en macOS). Zie Kerberos-ticket instellen voor Windows, Linux en macOS voor meer informatie.
 
Zorg ervoor dat u beschikt over de vereiste afhankelijke bibliotheken van de clientinstallatievereisten.
In het volgende voorbeeld ziet u hoe u de modus gebruikt authentication=ActiveDirectoryIntegrated . Dit voorbeeld wordt uitgevoerd op een computer die lid is van een domein dat is gefedereerd met Microsoft Entra-id. Een databasegebruiker die uw Windows-gebruiker vertegenwoordigt, moet aanwezig zijn in de database en moet de machtiging CONNECT hebben.
Vervang de server-/databasenaam door uw eigen server-/databasenaam in de volgende regels voordat u het voorbeeld uitvoert.
ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name
ds.setDatabaseName("demo"); // replace with your database name
Het voorbeeld voor het gebruik van de ActiveDirectoryIntegrated-verificatiemodus:
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));
            }
        }
    }
}
Als u dit voorbeeld uitvoert, wordt automatisch uw Kerberos-ticket van het clientplatform gebruikt en is er geen wachtwoord vereist. Als er een verbinding tot stand is gebracht, ziet u het volgende bericht:
You have successfully logged on as: <your domain user name>
Kerberos-ticket instellen in Windows, Linux en macOS
U moet een Kerberos-ticket instellen om uw huidige gebruiker te koppelen aan een Windows-domeinaccount. Hieronder volgt een samenvatting van de belangrijkste stappen.
Ramen
Opmerking
In Windows mssql-jdbc_auth-<version>-<arch>.dll kan vanuit het gedownloade pakket worden gebruikt in plaats van deze Kerberos-configuratiestappen. Deze stappen zijn alleen vereist als u het DLL-bestand niet kunt gebruiken.
JDK wordt geleverd met kinit, waarmee u een TGT kunt verkrijgen van het Key Distribution Center (KDC) op een machine die lid is van een domein dat is gefedereerd met Microsoft Entra ID.
Stap 1: Ticket verlenen van ticket ophalen
Draait op: Windows
actie:
- Gebruik de opdracht 
kinit username@DOMAIN.COMPANY.COMom een TGT van KDC op te halen en vervolgens wordt u gevraagd om uw domeinwachtwoord. - Gebruik 
klistdit om de beschikbare tickets te bekijken. Als de kinit succesvol voltooid is, zou u een ticket vankrbtgt/DOMAIN.COMPANY.COM@ DOMAIN.COMPANY.COMmoeten zien. 
Opmerking
Mogelijk moet u een
.inibestand opgeven waarmee-Djava.security.krb5.confuw toepassing KDC kan vinden.- Gebruik de opdracht 
 
Linux en macOS
Behoeften
Toegang tot een Windows-computer die lid is van een domein om een query uit te voeren op uw Kerberos-domeincontroller.
Stap 1: Kerberos KDC zoeken
Uitvoeren op: Windows opdrachtprompt
Actie:
nltest /dsgetdc:DOMAIN.COMPANY.COM(waar wordtDOMAIN.COMPANY.COMtoegewezen aan de naam van uw domein)Voorbeelduitvoer
DC: \\co1-red-dc-33.domain.company.com Address: \\2111:4444:2111:33:1111:ecff:ffff:3333 ... The command completed successfullyInformatie die moet worden geëxtraheerd De DC-naam, in dit geval
co1-red-dc-33.domain.company.com
Stap 2: KDC configureren in krb5.conf
Uitvoeren op: Linux/macOS
Actie: Bewerk de
/etc/krb5.confin een editor van uw keuze. De volgende sleutels configureren[libdefaults] default_realm = DOMAIN.COMPANY.COM [realms] DOMAIN.COMPANY.COM = { kdc = co1-red-dc-28.domain.company.com }Sla het
krb5.confbestand vervolgens op en sluit het af.Opmerking
Het domein moet in ALL CAPS staan.
Stap 3: Het ticket testen dat ticket ophalen verleent
- Uitvoeren op: Linux/macOS
 - 
              Actie: 
- Gebruik de opdracht 
kinit username@DOMAIN.COMPANY.COMom een TGT van KDC op te halen en vervolgens wordt u gevraagd om uw domeinwachtwoord. - Gebruik 
klistdit om de beschikbare tickets te bekijken. Als de kinit succesvol voltooid is, zou u een ticket vankrbtgt/DOMAIN.COMPANY.COM@ DOMAIN.COMPANY.COMmoeten zien. 
 - Gebruik de opdracht 
 
Verbinding maken met de verificatiemodus ActiveDirectoryPassword
In het volgende voorbeeld ziet u hoe u de modus gebruikt authentication=ActiveDirectoryPassword .
Ga als volgt te werk om het voorbeeld te bouwen en uit te voeren:
Zorg ervoor dat u beschikt over de vereiste afhankelijke bibliotheken van de clientinstallatievereisten.
Zoek de volgende regels code en vervang de server-/databasenaam door de naam van uw server/database.
ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name ds.setDatabaseName("demo"); // replace with your database nameZoek de volgende regels van de code. Vervang de gebruikersnaam door de naam van de Microsoft Entra-gebruiker die u als verbinding wilt maken.
ds.setUser("bob@example.com"); // replace with your username ds.setPassword("password"); // replace with your password
Het voorbeeld om ActiveDirectoryPassword authenticatiemodus te gebruiken:
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));
            }
        }
    }
}
Als de verbinding tot stand is gebracht, ziet u het volgende bericht als uitvoer:
You have successfully logged on as: <your user name>
Verbinding maken met de activeDirectoryInteractive-verificatiemodus
In het volgende voorbeeld ziet u hoe u de modus gebruikt authentication=ActiveDirectoryInteractive .
Ga als volgt te werk om het voorbeeld te bouwen en uit te voeren:
Zorg ervoor dat u beschikt over de vereiste afhankelijke bibliotheken van de clientinstallatievereisten.
Zoek de volgende regels code en vervang de server-/databasenaam door de naam van uw server/database.
ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name ds.setDatabaseName("demo"); // replace with your database nameZoek de volgende regels van de code. Vervang de gebruikersnaam door de naam van de Microsoft Entra-gebruiker die u als verbinding wilt maken.
ds.setUser("bob@example.com"); // replace with your username
Het voorbeeld om ActiveDirectoryInteractive authenticatiemodus te gebruiken:
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));
            }
        }
    }
}
Wanneer u het programma uitvoert, wordt er een browser weergegeven om de gebruiker te verifiëren. Precies wat u ziet, is afhankelijk van hoe u uw Microsoft Entra-id configureert. Het kan al dan niet meervoudige verificatieprompts bevatten voor gebruikersnaam, wachtwoord, pincode of tweede apparaatverificatie via een telefoon. Als er meerdere interactieve verificatieaanvragen worden uitgevoerd in hetzelfde programma, wordt u in latere aanvragen mogelijk niet eens gevraagd of de verificatiebibliotheek een eerder in de cache opgeslagen verificatietoken opnieuw kan gebruiken.
Zie Aan de slag met Microsoft Entra-verificatie in de cloudvoor meer informatie over het configureren van Microsoft Entra-id voor meervoudige verificatie.
Zie voor schermafbeeldingen van deze dialoogvensters Microsoft Entra multifactor authentication gebruiken.
Als gebruikersverificatie is voltooid, ziet u het volgende bericht in de browser:
Authentication complete. You can close the browser and return to the application.
Dit bericht geeft alleen aan dat gebruikersverificatie is geslaagd, maar niet noodzakelijkerwijs een geslaagde verbinding met de server. Als er een verbinding met de server tot stand is gebracht, ziet u het volgende bericht als uitvoer wanneer u terugkeert naar de toepassing:
You have successfully logged on as: <your user name>
Verbind met de verificatiemodus ActiveDirectoryServicePrincipal
In het volgende voorbeeld ziet u hoe u de modus gebruikt authentication=ActiveDirectoryServicePrincipal .
Ga als volgt te werk om het voorbeeld te bouwen en uit te voeren:
Zorg ervoor dat u beschikt over de vereiste afhankelijke bibliotheken van de clientinstallatievereisten.
Zoek de volgende regels code en vervang de server-/databasenaam door de naam van uw server/database.
ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name ds.setDatabaseName("demo"); // replace with your database nameZoek de volgende regels van de code. Vervang de waarde van
principalIddoor de toepassings-id/client-id van de service-principal van Microsoft Entra waarmee u verbinding wilt maken. Vervang de waarde vanprincipalSecretdoor het geheim.String principalId = "<service_principal_guid>"; // Replace with your Microsoft Entra service principal ID. String principalSecret = "..."; // Replace with your Microsoft Entra principal secret.Stel het principal-ID en de principal-secreet in met behulp van
setUserensetPasswordin versie 10.2 en hoger, ensetAADSecurePrincipalIdensetAADSecurePrincipalSecretin versie 9.4 en lager.
Het voorbeeld om ActiveDirectoryServicePrincipal authenticatiemodus te gebruiken:
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));
            }
        }
    }
}
Als er een verbinding tot stand is gebracht, ziet u het volgende bericht als uitvoer:
You have successfully logged on as: <your app/client ID>
Verbinding maken met de verificatiemodus ActiveDirectoryServicePrincipalCertificate
In het volgende voorbeeld ziet u hoe u de modus gebruikt authentication=ActiveDirectoryServicePrincipalCertificate .
Ga als volgt te werk om het voorbeeld te bouwen en uit te voeren:
Zorg ervoor dat u beschikt over de vereiste afhankelijke bibliotheken van de clientinstallatievereisten.
Zoek de volgende regels code en vervang de server-/databasenaam door de naam van uw server/database.
ds.setServerName("msentra-managed-demo.database.windows.net"); // replace 'msentra-managed-demo' with your server name ds.setDatabaseName("demo"); // replace with your database nameZoek de volgende regels van de code. Vervang de waarde van
principalIddoor de toepassings-id/client-id van de service-principal van Microsoft Entra waarmee u verbinding wilt maken. Vervang de waarde doorclientCertificatehet bestandspad naar het service-principal-certificaat.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.Als het eerder genoemde certificaat een wachtwoord nodig heeft, stelt u het hoofdzakelijke geheim in met
setPasswordin versie 10.2 en hoger ofsetAADSecurePrincipalSecretin versie 9.4 en lager.Als het certificaat een bijbehorende persoonlijke sleutel heeft, stelt u de persoonlijke sleutel in met behulp van
setClientKey. Als voor deze sleutel een wachtwoord is vereist, stelt u het wachtwoord voor de persoonlijke sleutel in met behulp vansetClientKeyPassword.
Het voorbeeld om ActiveDirectoryServicePrincipalCertificate authenticatiemodus te gebruiken:
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));
            }
        }
    }
}
Als er een verbinding tot stand is gebracht, ziet u het volgende bericht als uitvoer:
You have successfully logged on as: <your app/client ID>
Verbinding maken met behulp van toegangstoken
Toepassingen/services kunnen een toegangstoken ophalen uit Microsoft Entra ID en deze gebruiken om verbinding te maken met Azure SQL Database, Azure SQL Managed Instance en Azure Synapse Analytics.
Opmerking
              accessToken kan alleen worden ingesteld met behulp van de parameter Properties van de getConnection() methode in de klasse DriverManager. Deze kan niet worden gebruikt in de verbindingsreeks. Vanaf stuurprogrammaversie 12.2 kunnen gebruikers een accessToken callback naar het stuurprogramma implementeren en bieden voor het vernieuwen van tokens in verbindingspoolscenario's. Scenario's voor groepsgewijze verbindingen vereisen dat de implementatie van de verbindingsgroep gebruikmaakt van de standaard JDBC-verbindingspoolklassen.
Het volgende voorbeeld bevat een eenvoudige Java-toepassing die verbinding maakt met Azure met behulp van verificatie op basis van toegangstokens.
Ga als volgt te werk om het voorbeeld te bouwen en uit te voeren:
Maak een toepassingsaccount in Microsoft Entra-id voor uw service.
- Meld u aan bij het Azure-portaal.
 - Ga in de linkernavigatiebalk naar Microsoft Entra-id .
 - Selecteer App-registratie.
 - Selecteer Nieuwe registratie.
 - Voer 
mytokentesteen vriendelijke naam in voor de toepassing. - Laat de standaardselectie staan voor ondersteunde accounttypen, die de toepassing kunnen gebruiken.
 - Selecteer Registreren onderaan.
 - U hebt geen SIGN-ON URL nodig. Geef alles op: 
https://mytokentest. - Selecteer 
Createonderaan. - Wanneer u Registreren selecteert, wordt de app onmiddellijk gemaakt en gaat u naar de resourcepagina.
 - Zoek in het vak Essentials de toepassings-id (client) en kopieer deze. U hebt deze waarde later nodig om uw toepassing te configureren.
 - Selecteer Certificaten en geheimen in het navigatiedeelvenster. Selecteer Op het tabblad Clientgeheimen (0)de optie Nieuw clientgeheim. Voer een beschrijving in voor het geheim en selecteer een vervaldatum (de standaardwaarde is prima). Selecteer Toevoegen onderaan. Belangrijk voordat u deze pagina verlaat, kopieert u de gegenereerde waarde voor uw clientgeheim. Deze waarde kan niet worden weergegeven nadat u de pagina hebt verlaten. Deze waarde is het clientgeheim.
 - Ga terug naar het deelvenster App-registraties voor Microsoft Entra-id en zoek het tabblad Eindpunten . Kopieer de URL onder 
OAuth 2.0 token endpoint. Deze URL is uw STS-URL. 
Maak verbinding met uw database als Microsoft Entra-beheerder en gebruik een T-SQL-opdracht om een ingesloten databasegebruiker in te richten voor uw toepassingsprincipaal. Zie voor meer informatie over het maken van een Microsoft Entra-beheerder en een ingesloten databasegebruiker de verbinding maken met behulp van Microsoft Entra-verificatie.
CREATE USER [mytokentest] FROM EXTERNAL PROVIDERDownload op de clientcomputer waarop u het voorbeeld uitvoert de MICROSOFT Authentication Library (MSAL) voor Java-bibliotheek en de bijbehorende afhankelijkheden. MSAL is alleen nodig voor het uitvoeren van dit specifieke voorbeeld. In het voorbeeld worden de API's uit deze bibliotheek gebruikt om het toegangstoken op te halen uit de Microsoft Entra-id. Als u al een toegangstoken hebt, kunt u deze stap overslaan en de sectie in het voorbeeld verwijderen waarmee een toegangstoken wordt opgehaald.
Vervang in het volgende voorbeeld de STS-URL, client-id, clientgeheim, server- en databasenaam door uw waarden.
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));
            }
        }
    }
}
Als de verbinding is geslaagd, ziet u het volgende bericht als uitvoer:
Access Token: <your access token>
You have successfully logged on as: <your client ID>
Verbinding maken met behulp van callback van toegangstokens
Net als bij de eigenschap van het toegangstoken, stelt de callback voor toegangstoken u in staat een methode te registreren die een toegangstoken aan de driver verstrekt. Het voordeel van deze callback boven de eigenschap is dat het stuurprogramma een nieuw toegangstoken kan aanvragen wanneer het token is verlopen. Een verbindingsgroep die een nieuwe verbinding maakt, kan bijvoorbeeld een nieuw token aanvragen met een nieuwe vervaldatum. Zie Groepsgewijze verbindingen gebruiken voor meer informatie.
In het volgende voorbeeld ziet u hoe u de callback van accessToken implementeert en instelt.
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));
            }
        }
    }
}
Als de verbinding is geslaagd, ziet u het volgende bericht als uitvoer:
You have successfully logged on as: <your client ID>
Vanaf versie 12.4 kan de accessToken callback worden ingesteld via de accessTokenCallbackClass eigenschap verbindingsreeks. In het volgende voorbeeld ziet u hoe u de accessToken callback instelt met behulp van deze eigenschap:
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));
            }
        }
    }
}
Als de verbinding is geslaagd, ziet u het volgende bericht als uitvoer:
You have successfully logged on as: <your client ID>
Volgende stappen
Meer informatie over gerelateerde concepten vindt u in de volgende artikelen: