Compartilhar via


Como determinar se o tipo de autenticação é Kerberos

Este artigo fornece instruções passo a passo para ajudá-lo a determinar o tipo de autenticação que é usado quando você se conecta ao Microsoft SQL Server. Verifique se você executa as etapas em um computador cliente, não no servidor em que a instância do SQL Server que você está testando está instalada. Caso contrário, o valor auth_scheme na saída sempre será NTLM, mesmo se Kerberos estiver configurado corretamente. Isso ocorre devido a um recurso de proteção de segurança SID por serviço que foi adicionado no Windows 2008. Esse recurso força todas as conexões locais a usar NTLM, independentemente de o Kerberos estar disponível.

Usar o SQL Server Management Studio

  1. Abra o SQL Server Management Studio e conecte-se à instância do SQL Server.

  2. Execute a seguinte consulta:

    SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPID
    
  3. Como alternativa, para recuperar detalhes adicionais da conexão, execute a seguinte consulta:

    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. Examine a coluna auth_scheme nos resultados para determinar o tipo de autenticação.

Usar a linha de comando

  1. Abra um prompt de comando.

  2. Execute o seguinte comando, substituindo <ServerName> pelo nome do servidor:

    sqlcmd -S <ServerName> -E -Q "SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPID"
    
  3. O resultado semelhante à seguinte saída indicará o tipo de autenticação:

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

Usar VBScript

  1. Copie o seguinte código VBScript em um editor de texto, como o Bloco de Notas, e salve-o como 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. Execute o seguinte comando no prompt de comando, substituindo <ServerName> pelo nome do servidor:

    cscript getAuthScheme.vbs <ServerName>
    
  3. O resultado semelhante à seguinte saída indicará o tipo de autenticação:

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

Usar o Windows PowerShell

Você pode usar o Windows PowerShell para testar o provedor .NET do SqlClient para tentar isolar o problema do seu aplicativo:

  1. Copie o script do PowerShell a seguir em um editor de texto, como o Bloco de Notas, e salve-o como 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. Abra o Windows PowerShell, navegue até a pasta que contém o script e execute o seguinte comando:

    .\get-sqlauthscheme <ServerName>  # Replace "<ServerName>" with your server name.
    
  3. O resultado semelhante à seguinte saída indicará o tipo de autenticação:

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

Mais informações