Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten artykuł zawiera instrukcje krok po kroku ułatwiające określenie typu uwierzytelniania używanego podczas nawiązywania połączenia z programem Microsoft SQL Server. Upewnij się, że zostały uruchomione kroki na komputerze klienckim, a nie na serwerze, na którym jest zainstalowane testowane wystąpienie programu SQL Server. W przeciwnym razie wartość auth_scheme w danych wyjściowych będzie zawsze mieć wartość NTLM, nawet jeśli protokół Kerberos jest poprawnie skonfigurowany. Dzieje się tak z powodu funkcji wzmacniania zabezpieczeń identyfikatora SID dla usługi, która została dodana w systemie Windows 2008. Ta funkcja wymusza, aby wszystkie połączenia lokalne używały protokołu NTLM niezależnie od tego, czy protokół Kerberos jest dostępny.
Korzystanie z programu SQL Server Management Studio
Otwórz SQL Server Management Studio i połącz się z wystąpieniem SQL Server.
Uruchom następujące zapytanie:
SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPIDAlternatywnie, aby pobrać dodatkowe szczegóły połączenia, uruchom następujące zapytanie:
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 = @@SPIDPrzejrzyj kolumnę auth_scheme w wynikach, aby określić typ uwierzytelniania.
Korzystanie z wiersza polecenia
Otwórz wiersz polecenia.
Uruchom następujące polecenie, zastępując
<ServerName>nazwą swojego serwera.sqlcmd -S <ServerName> -E -Q "SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPID"Wynik podobny do następujących danych wyjściowych będzie wskazywać typ uwierzytelniania:
auth_scheme ---------------------------------------- NTLM (1 rows affected)
Korzystanie z języka VBScript
Skopiuj następujący kod VBScript do edytora tekstów, takiego jak Notatnik, i zapisz go jako 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.closeUruchom następujące polecenie w wierszu polecenia, zastępując
<ServerName>nazwą swojego serwera.cscript getAuthScheme.vbs <ServerName>Wynik podobny do następujących danych wyjściowych będzie wskazywać typ uwierzytelniania:
Microsoft (R) Windows Script Host Version 5.812 Copyright (C) Microsoft Corporation. All rights reserved. Auth scheme: NTLM
Korzystanie z programu Windows PowerShell
Za pomocą programu Windows PowerShell możesz przetestować dostawcę sqlClient .NET, aby spróbować odizolować problem od aplikacji:
Skopiuj następujący skrypt programu PowerShell do edytora tekstów, takiego jak Notatnik, i zapisz go jako 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 serverOtwórz program Windows PowerShell, przejdź do folderu zawierającego skrypt i uruchom następujące polecenie:
.\get-sqlauthscheme <ServerName> # Replace "<ServerName>" with your server name.Wynik podobny do następujących danych wyjściowych będzie wskazywać typ uwierzytelniania:
Elapsed time was 0 ms. Auth scheme for <ServerName>: NTLM