Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo fornisce istruzioni dettagliate per determinare il tipo di autenticazione usato quando ci si connette a Microsoft SQL Server. Assicurarsi di eseguire i passaggi in un computer client, non nel server in cui è installata l'istanza di SQL Server di cui si esegue il test. In caso contrario, il valore auth_scheme nell'output sarà sempre NTLM, anche se Kerberos è configurato correttamente. Ciò si verifica a causa di una funzionalità di protezione avanzata SID per servizio aggiunta in Windows 2008. Questa funzionalità forza l'uso di NTLM da parte di tutte le connessioni locali indipendentemente dal fatto che Kerberos sia disponibile.
Usare SQL Server Management Studio
Aprire SQL Server Management Studio e connettersi all'istanza di SQL Server.
Eseguire la query riportata di seguito:
SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPID
In alternativa, per recuperare altri dettagli di connessione, eseguire la query seguente:
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
Esaminare la colonna auth_scheme nei risultati per determinare il tipo di autenticazione.
Usare la riga di comando
Aprire un prompt dei comandi.
Eseguire il comando seguente, sostituendo
<ServerName>
con il nome del server:sqlcmd -S <ServerName> -E -Q "SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPID"
Il risultato simile all'output seguente indicherà il tipo di autenticazione:
auth_scheme ---------------------------------------- NTLM (1 rows affected)
Usare VBScript
Copiare il codice VBScript seguente in un editor di testo, ad esempio Blocco note, e salvarlo come 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
Eseguire il comando seguente dal prompt dei comandi, sostituendo
<ServerName>
con il nome del server:cscript getAuthScheme.vbs <ServerName>
Il risultato simile all'output seguente indicherà il tipo di autenticazione:
Microsoft (R) Windows Script Host Version 5.812 Copyright (C) Microsoft Corporation. All rights reserved. Auth scheme: NTLM
Usare Windows PowerShell
È possibile usare Windows PowerShell per testare il provider .NET SqlClient per provare a isolare il problema dall'applicazione:
Copiare lo script di PowerShell seguente in un editor di testo, ad esempio Blocco note, e salvarlo come 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
Aprire Windows PowerShell, passare alla cartella contenente lo script ed eseguire il comando seguente:
.\get-sqlauthscheme <ServerName> # Replace "<ServerName>" with your server name.
Il risultato simile all'output seguente indicherà il tipo di autenticazione:
Elapsed time was 0 ms. Auth scheme for <ServerName>: NTLM