Aracılığıyla paylaş


Kimlik doğrulama türünün Kerberos olup olmadığını belirleme

Bu makalede, Microsoft SQL Server'a bağlanırken kullanılan kimlik doğrulama türünü belirlemenize yardımcı olacak adım adım yönergeler sağlanır. Test ettiğiniz SQL Server örneğinin yüklü olduğu sunucuda değil, istemci bilgisayarda adımları çalıştırdığınızdan emin olun. Aksi takdirde, Kerberos doğru yapılandırılmış olsa bile çıktıdaki auth_scheme değeri her zaman NTLM olur. Bunun nedeni, Windows 2008'de eklenen hizmet başına SID güvenlik sağlamlaştırma özelliğidir. Bu özellik, Kerberos'un kullanılabilir olup olmadığına bakılmaksızın tüm yerel bağlantıları NTLM kullanmaya zorlar.

SQL Server Management Studio'yu kullanma

  1. SQL Server Management Studio'yu açın ve SQL Server örneğine bağlanın.

  2. Aşağıdaki sorguyu çalıştırın:

    SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPID
    
  3. Alternatif olarak, ek bağlantı ayrıntılarını almak için aşağıdaki sorguyu çalıştırın:

    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. Kimlik doğrulama türünü belirlemek için sonuçlardaki auth_scheme sütununu gözden geçirin.

Komut satırını kullanma

  1. Komut istemi açın.

  2. aşağıdaki komutu çalıştırın ve yerine sunucunuzun adını yazın <ServerName> :

    sqlcmd -S <ServerName> -E -Q "SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@SPID"
    
  3. Aşağıdaki çıkışa benzer sonuç, kimlik doğrulama türünü gösterir:

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

VBScript kullanma

  1. Aşağıdaki VBScript kodunu Not Defteri gibi bir metin düzenleyicisine kopyalayın ve getAuthScheme.vbs olarak kaydedin:

    ' 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. Komut isteminden aşağıdaki komutu çalıştırın ve yerine sunucunuzun adını yazın <ServerName> :

    cscript getAuthScheme.vbs <ServerName>
    
  3. Aşağıdaki çıkışa benzer sonuç, kimlik doğrulama türünü gösterir:

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

Windows PowerShell kullanma

Windows PowerShell'i kullanarak SqlClient .NET sağlayıcısını test edip sorunu uygulamanızdan yalıtmaya çalışabilirsiniz:

  1. Aşağıdaki PowerShell betiğini Not Defteri gibi bir metin düzenleyicisine kopyalayın ve get-SqlAuthScheme.ps1olarak kaydedin.

    #-------------------------------
    #
    # 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. Windows PowerShell'i açın, betiği içeren klasöre gidin ve aşağıdaki komutu çalıştırın:

    .\get-sqlauthscheme <ServerName>  # Replace "<ServerName>" with your server name.
    
  3. Aşağıdaki çıkışa benzer sonuç, kimlik doğrulama türünü gösterir:

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

Daha Fazla Bilgi