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.
Dit artikel bevat stapsgewijze instructies voor het bepalen van het type verificatie dat wordt gebruikt wanneer u verbinding maakt met Microsoft SQL Server. Zorg ervoor dat u de stappen uitvoert op een clientcomputer, niet op de server waarop het SQL Server-exemplaar dat u test, is geïnstalleerd. Anders is de auth_scheme waarde in de uitvoer altijd NTLM, zelfs als Kerberos correct is geconfigureerd. Dit gebeurt vanwege een service-specifieke SID-beveiligingsfunctie die is toegevoegd in Windows 2008. Met deze functie worden alle lokale verbindingen gedwongen om NTLM te gebruiken, ongeacht of Kerberos beschikbaar is.
SQL Server Management Studio gebruiken
Open SQL Server Management Studio en maak verbinding met het SQL Server-exemplaar.
Voer de volgende query uit.
SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPIDAls u aanvullende verbindingsgegevens wilt ophalen, voert u de volgende query uit:
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 = @@SPIDControleer de kolom auth_scheme in de resultaten om het verificatietype te bepalen.
De opdrachtregel gebruiken
Open een opdrachtprompt.
Voer de volgende opdracht uit en vervang deze
<ServerName>door de naam van uw server:sqlcmd -S <ServerName> -E -Q "SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPID"Het resultaat dat lijkt op de volgende uitvoer geeft het verificatietype aan:
auth_scheme ---------------------------------------- NTLM (1 rows affected)
VBScript gebruiken
Kopieer de volgende VBScript-code naar een teksteditor, zoals Kladblok, en sla deze op als 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.closeVoer de volgende opdracht uit vanaf de opdrachtprompt en vervang deze
<ServerName>door de naam van uw server:cscript getAuthScheme.vbs <ServerName>Het resultaat dat lijkt op de volgende uitvoer geeft het verificatietype aan:
Microsoft (R) Windows Script Host Version 5.812 Copyright (C) Microsoft Corporation. All rights reserved. Auth scheme: NTLM
Windows PowerShell gebruiken
U kunt Windows PowerShell gebruiken om de SqlClient .NET-provider te testen om het probleem te isoleren van uw toepassing:
Kopieer het volgende PowerShell-script naar een teksteditor, zoals Kladblok, en sla het op 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 serverOpen Windows PowerShell, navigeer naar de map met het script en voer de volgende opdracht uit:
.\get-sqlauthscheme <ServerName> # Replace "<ServerName>" with your server name.Het resultaat dat lijkt op de volgende uitvoer geeft het verificatietype aan:
Elapsed time was 0 ms. Auth scheme for <ServerName>: NTLM