Freigeben über


Ermitteln, ob der Authentifizierungstyp Kerberos ist

Dieser Artikel enthält schrittweise Anleitungen, mit denen Sie den Authentifizierungstyp ermitteln können, der beim Herstellen einer Verbindung mit Microsoft SQL Server verwendet wird. Stellen Sie sicher, dass Sie die Schritte auf einem Clientcomputer ausführen, nicht auf dem Server, auf dem die SQL Server-Instanz installiert ist, die Sie testen. Andernfalls ist der auth_scheme Wert in der Ausgabe immer NTLM, auch wenn Kerberos ordnungsgemäß konfiguriert ist. Dies geschieht aufgrund eines dienstspezifischen SID-Sicherheitshärtungsmerkmals, das in Windows 2008 hinzugefügt wurde. Dieses Feature erzwingt, dass alle lokalen Verbindungen NTLM verwenden, unabhängig davon, ob Kerberos verfügbar ist.

Verwenden von SQL Server Management Studio

  1. Öffnen Sie SQL Server Management Studio, und stellen Sie eine Verbindung mit der SQL Server-Instanz her.

  2. Führen Sie die folgende Abfrage aus:

    SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPID
    
  3. Führen Sie alternativ zum Abrufen zusätzlicher Verbindungsdetails die folgende Abfrage aus:

    SELECT c.session_id, c.net_transport, c.encrypt_option,
           c.auth_scheme, s.host_name, @@SERVERNAME AS "remote_name",
           s.program_name, s.client_interface_name, s.login_name,
           s.nt_domain, s.nt_user_name, s.original_login_name,
           c.connect_time, s.login_time
    FROM sys.dm_exec_connections AS c
    JOIN sys.dm_exec_sessions AS s ON c.session_id = s.session_id
    WHERE c.session_id = @@SPID
    
  4. Überprüfen Sie die Spalte auth_scheme in den Ergebnissen, um den Authentifizierungstyp zu bestimmen.

Verwenden Sie die Befehlszeile

  1. Öffnen Sie eine Eingabeaufforderung.

  2. Führen Sie den folgenden Befehl aus, und ersetzen <ServerName> Sie den Namen Des Servers:

    sqlcmd -S <ServerName> -E -Q "SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPID"
    
  3. Das Ergebnis, das der folgenden Ausgabe ähnelt, gibt den Authentifizierungstyp an:

    auth_scheme
    ----------------------------------------
    NTLM
    
    (1 rows affected)
    

Verwenden von VBScript

  1. Kopieren Sie den folgenden VBScript-Code in einen Text-Editor, z. B. Editor, und speichern Sie ihn unter "getAuthScheme.vbs":

    ' Auth scheme VB script.
    ' Run on a client machine, not the server.
    ' If you run locally, you will always get NTLM even if Kerberos is properly enabled.
    '
    ' USAGE:  CSCRIPT getAuthScheme.vbs tcp:SQLProd01.contoso.com,1433   ' explicitly specify DNS suffix, protocol, and port # ('tcp' must be lower case)
    ' USAGE:  CSCRIPT getAuthScheme.vbs SQLProd01                        ' let the driver figure out the DNS suffix, protocol, and port #
    '
    Dim cn, rs, s
    s = WScript.Arguments.Item(0)              ' get the server name from the command-line
    Set cn = createobject("adodb.connection")
    '
    ' Various connection strings depending on the driver/Provider installed on your machine
    ' SQLOLEDB is selected as it is on all windows machines, but may have limitations, such as lack of TLS 1.2 support
    ' Choose a newer provider or driver if you have it installed.
    '
    cn.open "Provider=SQLOLEDB;Data Source=" & s & ";Initial Catalog=master;Integrated Security=SSPI"          ' On all Windows machines
    'cn.open "Provider=SQLNCLI11;Data Source=" & s & ";Initial Catalog=master;Integrated Security=SSPI"        ' Newer
    'cn.open "Provider=MSOLEDBSQL;Data Source=" & s & ";Initial Catalog=master;Integrated Security=SSPI"       ' Latest, good for SQL 2012 and newer
    'cn.open "Driver={ODBC Driver 17 for SQL Server};Server=" & s & ";Database=master;Trusted_Connection=Yes"  ' Latest
    '
    ' Run the query and display the results
    '
    set rs = cn.Execute("SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPID")
    WScript.Echo "Auth scheme: " & rs(0)
    rs.close
    cn.close
    
  2. Führen Sie den folgenden Befehl an der Eingabeaufforderung aus, wobei Sie <ServerName> durch den Namen Ihres Servers ersetzen:

    cscript getAuthScheme.vbs <ServerName>
    
  3. Das Ergebnis, das der folgenden Ausgabe ähnelt, gibt den Authentifizierungstyp an:

    Microsoft (R) Windows Script Host Version 5.812
    Copyright (C) Microsoft Corporation. All rights reserved.
    Auth scheme: NTLM
    

Verwenden von Windows PowerShell

Sie können Windows PowerShell verwenden, um den SqlClient .NET-Anbieter zu testen, um das Problem von Ihrer Anwendung zu isolieren:

  1. Kopieren Sie das folgende PowerShell-Skript in einen Text-Editor, z. B. Editor, und speichern Sie es als get-SqlAuthScheme.ps1.

    #-------------------------------
    #
    # get-SqlAuthScheme.ps1
    #
    # PowerShell script to test a System.Data.SqlClient database connection
    #
    # USAGE: 
    #   .\get-SqlAuthScheme tcp:SQLProd01.contoso.com,1433   # Explicitly specify DNS suffix, protocol, and port ('tcp' must be lowercase)
    #   .\get-SqlAuthScheme SQLProd01                        # Let the driver figure out the DNS suffix, protocol, and port
    #
    #-------------------------------
    # Define a parameter for the server name, defaulting to "localhost" if not provided
    param ([string]$server = "localhost")
    
    # Set the execution policy for the current user to Unrestricted
    Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Scope CurrentUser -Force
    
    # Build the connection string for the SQL Server connection
    $connstr = "Server=$($server);Database=master;Integrated Security=SSPI"
    
    # Create a new SQL connection object
    $conn = New-Object System.Data.SqlClient.SqlConnection
    $conn.ConnectionString = $connstr
    
    # Record the start time of the operation
    $start = Get-Date
    
    # Open the SQL connection
    $conn.Open()
    
    # Create a new SQL command object
    $cmd = $conn.CreateCommand()
    $cmd.CommandText = "SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPID" # Query to get the authentication scheme
    
    # Execute the query and retrieve the result
    $dr = $cmd.ExecuteReader()
    $dr.Read() | Out-Null # Read the first row of the result set
    $auth_scheme = $dr.GetString(0) # Get the authentication scheme from the first column
    
    # Close and dispose of the SQL connection
    $conn.Close()
    $conn.Dispose()
    
    # Record the end time of the operation
    $end = Get-Date
    
    # Calculate the elapsed time
    $span = $end - $start
    
    # Output the results
    Write-Output "Elapsed time was $($span.TotalMilliseconds) ms."    # Display the elapsed time in milliseconds
    Write-Output "Auth scheme for $($server): $auth_scheme"   # Display the authentication scheme for the server
    
  2. Öffnen Sie Windows PowerShell, navigieren Sie zu dem Ordner, der das Skript enthält, und führen Sie den folgenden Befehl aus:

    .\get-sqlauthscheme <ServerName>  # Replace "<ServerName>" with your server name.
    
  3. Das Ergebnis, das der folgenden Ausgabe ähnelt, gibt den Authentifizierungstyp an:

    Elapsed time was 0 ms.
    Auth scheme for <ServerName>: NTLM
    

Weitere Informationen