Freigeben über


Ermitteln, ob der Authentifizierungstyp Kerberos ist

Dieser Artikel enthält eine Abfrage, mit der Sie den Authentifizierungstyp bestimmen können, der beim Herstellen einer Verbindung mit Microsoft SQL Server verwendet wird. Stellen Sie sicher, dass Sie die Abfrage auf einem Clientcomputer ausführen, nicht auf dem SQL Server, den Sie testen. Andernfalls wird die Abfrage als NTLM zurückgegebenauth_scheme, auch wenn Kerberos ordnungsgemäß konfiguriert ist. Dies geschieht aufgrund eines Sicherheitshärtungsfeatures pro Dienst, das in Windows 2008 hinzugefügt wurde. Dieses Feature erzwingt, dass alle lokalen Verbindungen NTLM verwenden, unabhängig davon, ob Kerberos verfügbar ist.

 SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id=@@SPID

Verwenden von SQL Server Management Studio

Führen Sie in SQL Server Management Studio 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

Über die Befehlszeile

Führen Sie an einer Eingabeaufforderung die folgende Abfrage aus:

C:\Temp>sqlcmd -S SQLProd01 -E -Q "select auth_scheme from sys.dm_exec_connections where session_id=@@SPID"
auth_scheme
----------------------------------------
NTLM

(1 rows affected)

Alternative Methode

Wenn eine der vorherigen Optionen nicht verfügbar ist, sollten Sie das folgende alternative Verfahren verwenden:

  1. Kopieren Sie das folgende Skript in einen Text-Editor, z. B. Editor, und speichern Sie es 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 das PowerShell-Skript "getAuthScheme.vbs " an einer Eingabeaufforderung aus:

    C:\Temp>cscript getAuthScheme.vbs SQLProd01
    

    Die folgende Ausgabe wird angezeigt.

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

Verwenden von PowerShell

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

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

  2. Führen Sie das folgende Skript an einer Eingabeaufforderung aus:

    #-------------------------------
    #
    # 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 lower case)
    # USAGE: .\get-SqlAuthScheme SQLProd01                        ' let the driver figure out the DNS suffix, protocol, and port #
    #
    #-------------------------------
    param ([string]$server = "localhost")
    Set-ExecutionPolicy Unrestricted-Scope CurrentUser
    $connstr = "Server=$server;Database=master;Integrated Security=SSPI"
    [System.Data.SqlClient.SqlConnection] $conn = New-Object System.Data.SqlClient.SqlConnection
    $conn.ConnectionString = $connstr
    [System.DateTime] $start = Get-Date
    $conn.Open()
    [System.Data.SqlClient.SqlCommand] $cmd = New-Object System.Data.SqlClient.SqlCommand
    $cmd.CommandText = "select auth_scheme from sys.dm_exec_connections where session_id=@@spid"
    $cmd.Connection = $conn
    $dr = $cmd.ExecuteReader()
    $result = $dr.Read()
    $auth_scheme = $dr.GetString(0)
    $conn.Close()
    $conn.Dispose()
    [System.DateTime] $end = Get-Date
    [System.Timespan] $span = ($end - $start)
    "End time: " + $end.ToString("M/d/yyyy HH:mm:ss.fff")
    "Elapsed time was " + $span.Milliseconds + " ms."
    "Auth scheme for " + $server + ": " + $auth_scheme
    

Die folgende Ausgabe wird angezeigt.

C:\temp> .\get-sqlauthscheme sqlprod01
End time: 10/26/2020 18:00:24.753
Elapsed time was 0 ms.
Auth scheme for sqlprod01: NTLM

Weitere Informationen

Konsistente Authentifizierungsprobleme in SQL Server