Risoluzione degli errori di connettività SQL Server

Questo articolo consente di risolvere vari problemi di connettività SQL server.

Nota

Per una guida all'esperienza di questo articolo, vedere Risoluzione deglierrori di connettività SQL Server .

Versione originale del prodotto:   Microsoft SQL Server
Numero KB originale:   4009936

Prerequisito

Per utilizzare in modo efficace questo strumento di risoluzione dei problemi, è possibile raccogliere le informazioni seguenti.

  1. Il testo completo del messaggio di errore insieme ai codici di errore e se l'errore è intermittente (si verifica solo a volte) o coerente (si verifica sempre).

  2. Errorlogs from SQL Server from which you can note the following:

    1. Nome di dominio completo (FQDN) del computer SQL Server o, in caso di installazioni in cluster, il nome virtuale FQDN. Se si utilizza un'istanza denominata, annotare il nome dell'istanza.

      Nota

      Puoi cercare la stringa "Il nome del server è" per ottenere queste informazioni nel log degli errori.

    2. Librerie di rete e porte su cui SQL'istanza è in attesa. Messaggi di esempio:

      Named pipe: il provider di connessioni locale del server è pronto per accettare la connessione in [ \ \ .\pipe\sql\query ]. TCP/IP e numero di porta: il server è in attesa su [ ::1 1433].

  3. Registri eventi applicazioni e di sistema SQL Server e sistemi client.

  4. Se le connessioni non riescono da un'applicazione, la stringa di connessione dall'app. Questi file si trovano in genere neiWeb.config per ASP.NET applicazioni.

Elenco di controllo

  • Verificare SQL server sia avviato e che nel log degli errori SQL Server visualizzato il messaggio seguente:

    SQL Server è ora pronto per le connessioni client. Si tratta di un messaggio informativo. non è necessaria alcuna azione da parte dell'utente.

  • Verificare la connettività di base sull'indirizzo IP e verificare eventuali anomalie: ping -a <SQL Server machine>, ping -a <SQL Server IP address> . Se si verificano problemi, contattare l'amministratore di rete per risolvere lo stesso problema.

  • Controllare se SQL è in ascolto su protocolli appropriati esaminando ErrorLog.

  • Verificare se si è in grado di connettersi SQL server utilizzando un file UDL. Se funziona, potrebbe verificarsi un problema con la stringa di connessione. Per istruzioni sulla procedura relativa al test UDL, passare alla sezione Connect to SQL server by using a UDL file.

  • Controlla se sei in grado di connetterti a SQL Server da altri sistemi client e account di accesso utente diversi. Se è possibile, il problema potrebbe essere specifico del client o dell'account di accesso in cui si è verificato il problema. Controllare i registri eventi di Windows nel client problematico per ulteriori puntatori. Verificare inoltre se i driver di rete sono aggiornati.

  • Se si verificano errori di accesso, verificare che l'utente abbia un account di accesso a livello di server e le autorizzazioni appropriate per connettersi al database a cui l'utente sta tentando di connettersi.

Per ulteriori informazioni sull'errore pertinente, vedere la sezione Verifica errori di connessione seguente.

Verificare gli errori di connessione

Si è verificato un errore correlato alla rete o specifico dell'istanza durante la connessione a un SQL Server rappresenta uno o più dei seguenti messaggi di errore:

  • Si è verificato un errore correlato alla rete o specifico dell'istanza durante la connessione a SQL Server. Il server non è stato trovato o non è accessibile. Verificare che il nome dell'istanza sia corretto e SQL Server configurato per consentire le connessioni remote.

    provider: SQL interfacce di rete, errore: 26 - Errore durante l'individuazione del server/istanza specificata

  • SQL Server errore di collegamento dati native client

    [Microsoft SQL Server Native Client 10.0]: Login timeout expired
    [Microsoft SQL Server Native Client 10.0]: A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
    [Microsoft SQL Server Native Client 10.0]: SQL Server Network Interfaces: Error Locating Server/Instance Specified [xFFFFFFFF].

  • Si è verificato un errore correlato alla rete o specifico dell'istanza durante la connessione a SQL Server. Il server non è stato trovato o non è accessibile. Verificare che il nome dell'istanza sia corretto e SQL Server configurato per consentire le connessioni remote.

    provider: provider TCP, errore: 0
    Un tentativo di connessione non è riuscito perché la parte connessa non ha risposto correttamente dopo un periodo di tempo oppure la connessione stabilita non è riuscita perché l'host connesso non ha risposto.
    Microsoft SQL Server, Errore: 10060

  • Si è verificato un errore correlato alla rete o specifico dell'istanza durante la connessione a SQL Server. Il server non è stato trovato o non è accessibile. Verificare che il nome dell'istanza sia corretto e SQL Server configurato per consentire le connessioni remote.

    provider: Provider Named Pipes, errore:40 - Impossibile aprire una connessione a SQL Server
    Microsoft SQL Server, Error:53
    Il percorso di rete non è stato trovato

  • [Microsoft] [SQL Server Native Client 11.0] Provider TCP: non è stato possibile stabilire alcuna connessione perché il computer di destinazione l'ha rifiutata attivamente.
    [Microsoft] [SQL Server Native Client 11.0] Timeout di accesso scaduto
    [Microsoft] [SQL Server Native Client 11.0] Si è verificato un errore correlato alla rete o specifico dell'istanza durante la definizione di una connessione a SQL Server. Server non trovato o non accessibile. Verificare se il nome dell'istanza è corretto e SQL Server configurato per consentire le connessioni remote. Per ulteriori informazioni, vedere SQL Server Documentazione online.

È possibile avviare la risoluzione dei problemi da questa sezione: Cause comuni di vari problemi di connessione.

Cause comuni di vari problemi di connessione

Passare attraverso ognuna delle cause applicabili alla tua istanza di seguito e per ognuna delle cause applicabili, prova le risoluzioni corrispondenti.

Causa 1: nome server non corretto specificato nella stringa di connessione o nella finestra di dialogo del nome del server

Per confermare:

  • Verificare che il nome del server specificato per l'applicazione corrisponda a quello presente nel registro errori.

  • Passare al file Editing ASP.NET Configuration Files per l'applicazione e verificare che la sezione Connection Strings punti al nome del server corretto e utilizzi le stringhe di connessione SQL Server appropriate per le applicazioni Web ASP.NET.

    Nota

    Per ottenere a livello di codice le stringhe di connessione dall'applicazione, vedere l'esempio in Procedura: Leggere stringhedi connessione dal file Web.config .

Causa 2: alias non corretto nel computer client

Gli alias vengono in genere utilizzati in ambienti in cui è necessario connettersi a SQL Server con un nome alternativo o in caso di problemi di risoluzione dei nomi nella rete. Un alias errato nel computer client può causare l'accesso delle connessioni dalle applicazioni al server errato con conseguente errore.

Operazioni da provare:

  • Aprire SQL Server Client Network Utility digitando cliconfg.exe nel comando Esegui.

  • Verificare se sono presenti alias definiti per il server a cui si sta tentando di connettersi.

  • Se presente, eseguire le operazioni seguenti:

    1. Fare clic su Modifica e rinominare l'alias del server. Ad esempio, se il nome del server è MySQL, rinominarlo come MySQL_test) e ritentare la connessione. Se la connessione funziona, è un'indicazione che si è avuto un alias errato, probabilmente da una configurazione precedente che non è più necessaria. Se l'errore continua a verificarsi, rinominare l'alias con il nome originale e procedere con il passaggio successivo.

    2. Controllare i parametri di connessione per l'alias e verificare che siano corretti. Alcuni degli scenari comuni che possono causare problemi di connettività sono:

      • Indirizzo IP non corretto per il parametro Nome server. Verificare che questo indirizzo IP corrisponda alla voce nel file SQL ErrorLog.

      • Nome server non corretto nel parametro Nome server. Ad esempio, se l'alias server punta al nome del server corretto, se il valore del parametro Server name non è corretto, le connessioni avranno esito negativo.

      • Se si utilizza un alias di named pipe, verificare che il formato del nome della pipe sia corretto.

        • Per la connessione all'istanza predefinita denominata Mydefaultinstance, il nome della pipe deve essere \\Mydefaultinstance\pipe\sql\query
        • Per la connessione a un'istanza denominata MySQL\Named, il nome della pipe deve essere \\MySQL\pipe\MSSQL$Named\sql\query

Causa 3(Istanza predefinita): i firewall tra il client e il server che bloccano la porta SQL Server'istanza è in attesa

Istanza predefinita: un'istanza predefinita viene in genere eseguita sulla porta 1433. Alcune installazioni utilizzano anche una porta non standard (diversa dalla 1433) per l'esecuzione SQL istanze. Il firewall potrebbe bloccarli.

Operazioni da provare:

  • Determinare il numero di porta SQL'istanza è in esecuzione. Se l'istanza predefinita del server SQL utilizza una porta non standard, vedere Esecuzione di un'istanza "Predefinita" di SQL Server su una porta TCP non predefinita (o non standard): suggerimentiper il funzionamento della connettività delle applicazioni.

  • Provare ad aggiungere il numero di porta SQL Server al nome del server utilizzando il formato <servername> , numeroporta e verificare se funziona. Ad esempio, se il nome dell'istanza di SQL è MySQLDefaultinstance ed è in esecuzione sulla porta 2000, specificare il nome del server come MySQLServer, 2000 e verificare se funziona. Se funziona è un'indicazione che il firewall sta bloccando la porta.

  • Se confermato, aggiungi la porta all'elenco di esclusione firewall. Per istruzioni, passare alla sezione Configurazione dei firewall.

Causa 4(Istanza denominata): SQL browser non avviato

Le applicazioni client che si connettono a un'istanza denominata di SQL Server utilizzano il servizio browser SQL nel sistema in cui è in esecuzione SQL per enumerare la porta su cui SQL è in attesa. Se il servizio browser non viene avviato, le connessioni non riusciranno.

Operazioni da provare:

Nel sistema che esegue l'istanza di SQL Server, usa Gestione configurazione SQL Server o l'applet Servizi nel Pannello di controllo e avvia il servizio browser SQL se non è già stato avviato. Per ulteriori informazioni, vedere Procedura: Avviare e arrestare il servizio SQL Server Browser

Causa 5(Istanza denominata): porta UDP 1434 utilizzata SQL browser è bloccata sulla rete

Se l SQL è un'istanza denominata, è possibile che sia stata configurata per l'utilizzo di porte dinamiche o di una porta statica. In entrambi i casi, le librerie di rete sottostanti eseguono una query sul servizio Browser SQL in esecuzione nel computer SQL Server tramite la porta UDP 1434 per enumerare il numero di porta per l'istanza denominata. Se un firewall tra il client e il server blocca la porta UDP, la libreria client non è in grado di determinare la porta (un requisito per la connessione) e la connessione non riesce.

Per confermare:

  • Metodo 1:

    1. Prendere nota della porta su cui SQL'istanza è in attesa dal SQL Server Errorlog.
    2. Provare a connettersi all'istanza denominata utilizzando il numero di porta aggiunto al nome del server utilizzando il formato <servername\instancename>, portnumber e verificare se funziona. Se funziona è un'indicazione che il firewall sta bloccando la porta UDP 1434. Ad esempio, se il nome dell'istanza di SQL è MySQL\Namedinstance ed è in esecuzione sulla porta 3000, specificare il nome del server come MySQL\Namedinstance, 3000 e verificare se funziona. Se funziona, potrebbe significare che la porta UDP 1434 è bloccata o che la porta statica è bloccata o entrambe. Per verificare se si tratta della porta UDP o della porta statica utilizzando Portqry dal metodo 2 riportato di seguito.
  • Metodo 2:

    1. Usa lo strumento PortqryUI con l'istanza denominata e osserva l'output risultante. Se viene visualizzato il messaggio che indica che la porta UDP 1434 è filtrata, significa che la porta è bloccata sulla rete. Per istruzioni su come usare lo strumento, passare alla sezione Using PortqryUI tool with SQL Server.

Operazioni da provare:

Determinare innanzitutto se SQL Server'istanza è in attesa sulla porta dinamica e statica e utilizzare la procedura pertinente per lo scenario. How to tell if SQL is listening on Dynamic vs Static ports, move to Tell if SQL is listening on Dynamic vs Static ports section.

  • Caso 1: porte dinamiche. In questo caso, è necessario verificare che il servizio browser SQL sia effettivamente avviato e che la porta UDP 1434 non sia bloccata sul firewall tra il client e il server. Se non è possibile eseguire una di queste, è consigliabile cambiare l'istanza di SQL Server per utilizzare una porta statica e utilizzare la procedura descritta in Configure a Server to Listen on a Specific TCP Port.

  • Caso 2: configurazione della porta statica e SQL browser non in esecuzione o non è possibile aprire UDP 1434 nel firewall. In questo caso, è necessario verificare che la porta statica sia specificata nella stringa di connessione e che la porta non sia bloccata dal firewall. Per istruzioni, passare alla sezione Configurazione dei firewall.

Se il problema persiste, passare alla sezione Problemi ancora.

Configurazione dei firewall

Di seguito sono riportate alcune schermate rapide che mostrano la configurazione necessaria di un firewall di Windows per connessioni riuscite a un'istanza predefinita e a un'istanza denominata.

  • Un'istanza predefinita di SQL Server in attesa sulla porta predefinita 1433 sul server Windows 2012 R2. In questo scenario, è necessario verificare che un'eccezione sia stata aggiunta alla porta TCP 1433 in Windows Firewall.

    1. Aprire Windows Firewall nel sistema che ospita SQL server predefinito e fare clic su Nuova regola in Regole in ingresso.

      Regole di inound

    2. Selezionare l'opzione Porta e fare clic su Avanti.

      InboundRulePort

    3. Nella schermata successiva:

      • Selezionare TCP come protocollo.

      • Selezionare Porte locali specifiche e specificare il valore 1433 e fare clic su Avanti.

        TCP1433

    4. Nella schermata successiva, selezionare Consenti la connessione e fare clic su Avanti.

      AllowConnection

    5. Nella schermata successiva selezionare l'opzione più adatta all'ambiente e fare clic su Avanti.

      NewInboundRule

    6. Nella schermata successiva assegna il nome alla regola e fornisci una descrizione chiara per riferimento futuro e fai clic su Fine.

      NewInboundRuleName

    7. Al termine, si dovrebbe vedere che la regola viene creata ed è abilitata per impostazione predefinita.

      EnableInboundRule

  • Aggiunta di un'eccezione per la porta UDP 1434 per abilitare le connessioni a un'istanza denominata SQL server:

    1. Aprire Windows Firewall nel sistema che ospita SQL server predefinito e fare clic su Nuova regola in Regole in ingresso.

      Regole di inound

    2. Selezionare l'opzione Porta e fare clic su Avanti.

      InboundRulePort

    3. Nella schermata successiva:

      • Selezionare UDP come protocollo.

      • Selezionare Porte locali specifiche e specificare il valore 1434 e fare clic su Avanti.

        NewInboundUDP

    4. Nella schermata successiva, selezionare Consenti la connessione e fare clic su Avanti.

      AllowConnection

    5. Nella schermata successiva selezionare l'opzione più adatta all'ambiente e fare clic su Avanti.

      NewInboundRule

    6. Nella schermata successiva assegna il nome alla regola e fornisci una descrizione chiara per riferimento futuro e fai clic su Fine.

      NewInboundName2

    7. Al termine, si dovrebbe vedere che la regola viene creata ed è abilitata per impostazione predefinita.

      EnableInboundRule2

Se il problema persiste, passare alla sezione Problemi ancora.

Uso dello strumento PortqryUI con SQL Server

Percorso di download: PortqryUI

  1. Avviare lo strumento PortqryUI nel computer client. (il computer in cui si verificano problemi di connessione, per le app Web, potrebbe trattarsi del server IIS)
  2. Specificare il nome del server dell'SQL Server o il SQL del server virtuale nell'INDIRIZZO IP o FQDN di destinazione su cui eseguire la query.
  3. Selezionare Query servizio predefinito e selezionare SQL servizio nell'elenco a discesa.
  4. Fare clic su Query ed esaminare l'output e utilizzare la tabella seguente per ulteriori puntatori.
Tipo di istanza Output da Portqry Possibili cause dei problemi di connessione Cosa provare?
Istanza predefinita Porta TCP 1433 (servizio ms-sql-s): NOT LISTENING Indica una delle opzioni seguenti:
  • SQL non è stato avviato.
  • TCP/IP non è abilitato nell'SQL protocollo del server.
  • SQL è in attesa su una porta non predefinita. (controllare errorlog)
  • Il firewall tra il client e il server blocca la porta.
  • Assicurati SQL avviato.
  • Controllare SQL registro errori per il numero di porta e utilizzarlo nelle stringhe di connessione utilizzando il formato <servername> , numeroporta.
  • Collaborare con l'amministratore di rete/Windows per assicurarsi che la porta TCP 1433 non sia bloccata da un firewall sulla rete o dal firewall di Windows nel sistema SQL Server.
Nota Se si desidera risolvere il problema del firewall, passare alla sezione Configurazione firewall.
Istanza predefinita Porta TCP 1433 (servizio ms-sql-s): LISTENING
  • La libreria client è in grado di connettersi correttamente al computer SQL server, ma il problema potrebbe essere causato da un'altra parte del livello dell'applicazione.
  • Verificare che il nome del server sia specificato correttamente nella stringa di connessione.
  • Se la stringa di connessione utilizza il numero di porta, viene specificata correttamente nella stringa di connessione.
  • Qualsiasi alias precedente definito nella casella.
Istanza denominata Porta UDP 1434 (servizio ms-sql-m): FILTERED Indica una delle opzioni seguenti:
  • SQL'istanza denominata non è stata avviata.
  • SQL browser non avviato nel sistema che ospita l'SQL istanza.
  • La porta UDP 1434 è bloccata da un firewall sul server SQL o sulla rete tra il client e il server.
  • Servizio avviato.
  • SQL il servizio browser è stato avviato.
  • Collaborare con l'amministratore di rete/Windows per assicurarsi che la porta UDP 1434 non sia bloccata da un firewall sulla rete o dal firewall di Windows nel sistema SQL Server.
Nota Se si desidera risolvere il problema del firewall, passare alla sezione Configurazione firewall.
Istanza denominata La porta UDP 1434 è LISTENING
  • La libreria client è in grado di connettersi correttamente al computer SQL server, ma il problema potrebbe essere causato da un'altra parte del livello dell'applicazione.
  • Il nome del server è specificato correttamente nella stringa di connessione.
  • Il numero di porta non è specificato correttamente nella stringa di connessione.
  • Qualsiasi alias precedente definito nella casella.

Esempi di output:

  • Istanza predefinita sulla porta predefinita: scenario di lavoro

    DeaultInstanceDefaultPort_Working

  • Istanza predefinita sulla porta predefinita: scenario non funzionante

    DeaultInstanceDefaultPort_NonWorking

  • Istanza denominata: Scenario di lavoro: (Nome istanza: SQL 2014, nome host: SQLCONNVM)

    WorkingNameInstance

  • Istanza denominata: Non - Scenario di lavoro: (Nome istanza: SQL 2014, nome host: SQLCONNVM)

    NonWorkingNameInstance

Per ulteriori informazioni, passare alla sezione Configurazione dei firewall.

Se il problema persiste, passare alla sezione Problemi ancora.

Determinare se SQL è in ascolto su porte dinamiche e statiche

  1. In SQL Server Configuration Manager, nel riquadro della console, espandere SQL Server Configurazione di rete, espandere Protocolli per e quindi fare doppio clic su TCP/IP.

  2. Nella scheda Indirizzi IP della finestra di dialogo Proprietà TCP/IP vengono visualizzati diversi indirizzi IP nel formato IP1, IP2, fino a IPAll. Uno di questi è per l'indirizzo IP della scheda di loopback, 127.0.0.1. Per ogni indirizzo IP del computer vengono visualizzati indirizzi IP aggiuntivi. Probabilmente verranno visualizzati sia gli indirizzi IP versione 4 che gli indirizzi IP versione 6. Fare clic con il pulsante destro del mouse su ogni indirizzo e quindi scegliere Proprietà per identificare l'indirizzo IP che si desidera configurare.

  3. Se la finestra di dialogo Porte dinamiche TCP contiene 0, indica che il motore di database è in attesa sulle porte dinamiche. Se contiene un numero specifico, significa che l'istanza del database è in attesa su una porta statica.

    TCPDynamicPorts

Per ulteriori informazioni, vedere Configure a Server to Listen on a Specific TCP Port.

Se il problema persiste, passare alla sezione Problemi ancora.

Non è stato possibile stabilire alcuna connessione perché il computer di destinazione l'ha rifiutata attivamente

Per ulteriori informazioni sull'errore di nessuna connessione, passare alla sezione Messaggio di errore completo.

Messaggio di errore completo

È possibile che venga visualizzato un errore simile al seguente:

[Microsoft] [SQL Server Native Client 11.0] Provider TCP: non è stato possibile stabilire alcuna connessione perché il computer di destinazione l'ha rifiutata attivamente.
[Microsoft] [SQL Server Native Client 11.0] Timeout di accesso scaduto.
[Microsoft] [SQL Server Native Client 11.0] Si è verificato un errore correlato alla rete o specifico dell'istanza durante la definizione di una connessione a SQL Server. Server non trovato o non accessibile. Verificare se il nome dell'istanza è corretto e SQL Server configurato per consentire le connessioni remote. Per ulteriori informazioni, vedere SQL Server Documentazione online.

È possibile avviare la risoluzione dei problemi da questa sezione: Cause comuni di vari problemi di connessione.

SQL Server non esiste o l'accesso negato

È possibile avviare la risoluzione dei problemi da questa sezione: Cause comuni di vari problemi di connessione.

Operazione di tabella pivot non riuscita: impossibile individuare un server per caricare il modello di dati della cartella di lavoro

È possibile avviare la risoluzione dei problemi da questa sezione: Cause comuni di vari problemi di connessione.

Impossibile generare il messaggio di errore di contesto SSPI

Security Support Provider Interface (SSPI) è un set di API di Windows che consente la delega e l'autenticazione reciproca su qualsiasi livello di trasporto dati generico, ad esempio i socket TCP/IP. SSPI consente pertanto a un computer che esegue un sistema operativo Windows di delegare in modo sicuro un token di sicurezza utente da un computer a un altro su qualsiasi livello di trasporto in grado di trasmettere byte non elaborati di dati.
L'errore impossibile generare il contesto SSPI viene generato quando SSPI utilizza l'autenticazione Kerberos per delegare su TCP/IP e l'autenticazione Kerberos non può completare le operazioni necessarie per delegare correttamente il token di sicurezza utente al computer di destinazione che esegue SQL Server.

Per ulteriori informazioni sul motivo per cui non è possibile completare le operazioni Kerberos, passare alla sezione Risoluzione dei problemi di autenticazione a causa di problemi Kerberos per esaminare e implementare i passaggi.

Risoluzione degli errori di autenticazione a causa di problemi Kerberos

Gli errori di autenticazione Kerberos possono verificarsi per diversi motivi. Le cause principali e le risoluzioni corrispondenti sono evidenziate di seguito:

Tipo di problema Risoluzioni suggerite
Problemi SPN:
  • Nomi SPN mancanti: il nome SPN non è registrato in Active Directory.
  • Voci SPN non corrette: SPN esiste, ma il numero di porta non è corretto o esiste in un account diverso dall'account SQL Service.
  • SPN duplicati: lo stesso SPN esiste in più account in Active Directory.
Selezionare la sezione Utilizzo di Gestione configurazione Kerberos per diagnosticare e risolvere i problemi relativi a SPN e delega per diagnosticare e risolvere i problemi relativi all'SPN.

Nota Per informazioni approfondite su SPN, Kerberos e altri concetti correlati, leggere le informazioni contenute nell'articolo della Knowledge Base seguente:
Come risolvere il messaggio di errore "Impossibile generare il contesto SSPI"
SQL account di servizio non attendibili per la delega. Se si utilizza l'account di sistema locale, il server centrale deve essere considerato attendibile per la delega in Active Directory. Utilizzare la scheda delega di Gestione configurazione DiKerberos per confermare e collaborare con l'amministratore di Active Directory per abilitare la delega per l'account. Per informazioni dettagliate, vedere Utilizzo di Gestione configurazione Kerberos per diagnosticare e risolvere i problemi relativi a SPN e delega nel paragrafo seguente.
Risoluzione dei nomi non corretta: il nome del server potrebbe essere risolto in un indirizzo IP diverso da quello registrato dal server DNS della rete. ping -a <your_target_machine> (utilizzare -4 e -6 in modo specifico per IPv4 e IPv6)
ping -a <Your_remote_IPAddress> nslookup (digitare più volte il nome del computer locale e remoto e l'indirizzo IP)

Cercare eventuali discrepanze e mancate corrispondenze nei risultati restituiti. La correttezza della configurazione DNS nella rete è fondamentale per SQL connessione. Una voce DNS errata potrebbe causare problemi di connettività di tutti i tipi in un secondo momento.
Firewall o altri dispositivi di rete che impediscono le connessioni dal client al controller di dominio: gli SPN vengono archiviati in Active Directory e se i client non sono in grado di comunicare con Active Directory, la connessione non può procedere ulteriormente. Per ulteriori informazioni, vedere i collegamenti seguenti:

Nota

  1. All'avvio di un'istanza SQL Server motore di database, SQL Server l'SPN per il servizio SQL Server database. Quando l'istanza viene arrestata, SQL Server tenta di annullare la registrazione dell'SPN. A tale scopo, l'account SQL servizio deve avere diritti ReadServicePrincipalName e WriteServicePrincipalName in Active Directory. Tuttavia, se l'account di servizio non dispone di questi diritti, la registrazione automatica dell'SPN non avviene ed è necessario collaborare con l'amministratore di Active Directory per registrare tali diritti per le istanze di SQL per abilitare l'autenticazione Kerberos. In questo scenario, se si utilizza un'istanza denominata, sarà più comodo usare una porta statica per tale istanza. Se si utilizzano porte dinamiche, il numero di porta può cambiare ogni volta che il servizio viene riavviato e l'SPN registrato manualmente per l'istanza non è più valido. Per ulteriori informazioni, vedere Register a Service Principal Name for Kerberos Connections.

  2. In ambienti in cui SQL è in cluster, la registrazione automatica degli SPN non è consigliata perché potrebbe essere necessario più tempo per annullare la registrazione dell'SPN e registrare l'SPN in Active Directory rispetto al tempo necessario per la modalità online di SQL. Se la registrazione dell'SPN non viene verificata in tempo, è possibile che SQL venga online perché l'amministratore del cluster non è in grado di connettersi SQL server.

Utilizzo di Gestione configurazione Kerberos per diagnosticare e risolvere i problemi di SPN e delega

  1. Scaricare Microsoft® Gestione configurazione Kerberos per SQL Server® e installarlo in un computer client.

  2. Avviare lo strumento utilizzando un account di dominio preferibilmente con un account con privilegi sufficienti per creare nomi SPN in Active Directory. Vedi l'immagine seguente:

    KerberosConfigManager

  3. Connettersi SQL Server si desidera raccogliere le informazioni relative agli errori Kerberos:

    ConnectKerberosConfigManager

  4. Una volta connessi, puoi visualizzare schede diverse come illustrato di seguito:

    • Sistema: contiene le informazioni di base sul sistema.

      KerConfigManager_System

    • SPN: Fornisce all'SPN informazioni sulle istanze di ognuna delle istanze SQL presenti nel server di destinazione e fornisce diverse opzioni, come indicato di seguito. Utilizzare questa scheda per individuare gli SPN mancanti o non configurati correttamente e i pulsanti Genera o Correggi per risolvere questi problemi.

      KerConfigManager_SPN

      • L'opzione Genera consente di creare lo script di generazione SPN. Facendo clic sul pulsante Genera viene visualizzata la finestra di dialogo seguente:

        KerConfigManager_GenerateSPN

        Questa opzione consente di creare il file cmd, che può essere eseguito dal prompt dei comandi per generare l'SPN.

        Il contenuto dei nomi generateSPN sarà simile al seguente:

        :: This script is generated by the Microsoft(c) SQL Server(c) Kerberos Configuration Manager tool.
        :: The script may update the system information, SPN settings and Delegation configurations of a given server.
        :: SPN and Delegation configuration updates require Windows Domain Administrator permission to execute.
        :: A Domain Admin should review the configurations recommended by this tool and take appropriate actions to enable Kerberos authentication.
        :: Please contact Microsoft Support if Kerberos connection problem persists.
        :: The file is intended to be run in domain "<DomainName>.com"
        :: Corrections for MSSQLSvc/<HostName>.<DomainName>.com **SetSPN -s MSSQLSvc/<HostName>.<DomainName>.com UserName**
        

        Viene semplicemente utilizzata l'opzione SetSPN per creare un SPN nell'account di servizio per SQL Server.

      • L'opzione Fix aggiungerà l'SPN purché tu abbia il diritto di aggiungere l'SPN e mostra la descrizione comando  seguente: KerbConfigManager_Fix

        Nota

        Lo strumento fornisce solo le opzioni Fix e Generate per le istanze predefinite e le istanze denominate con porte statiche. Per le istanze denominate che utilizzano la porta dinamica, è consigliabile passare da porte dinamiche a statiche o concedere all'account del servizio le autorizzazioni necessarie per registrare e annullare la registrazione dell'SPN ogni volta che il servizio viene avviato. In caso contrario, è necessario annullare manualmente la registrazione e registrare di nuovo gli SPN corrispondenti ogni volta che viene avviato SQL servizio.

      • Scheda Delega: la scheda identifica eventuali problemi relativi alla configurazione dell'account di servizio per la delega. Ciò è particolarmente utile per la risoluzione dei problemi relativi ai server collegati. Ad esempio, se gli SPN vengono eseguiti correttamente ma si verificano ancora problemi con le query del server collegato, potrebbe essere un'indicazione che l'account di servizio non è configurato per delegare le credenziali. Per ulteriori informazioni, vedere l'argomento della documentazione online all'indirizzo Configuring Linked Servers for Delegation.

        KerbConfigManger_Delegation

  5. Dopo aver corretto gli SPN, eseguire di nuovo lo strumento Gestione configurazione Kerberos e verificare che le schede SPN e Delega non segnalano più messaggi di errore e ritentino la connessione dall'applicazione.

Per ulteriori informazioni, vedere i collegamenti seguenti:

Se il problema persiste, passare alla sezione Problemi ancora.

Accesso non riuscito per l'utente

Potrebbe esserci un errore più specifico. Selezionare l'errore esatto visualizzato:

Accesso non riuscito per l'utente 'NT AUTHORITY\ACCESSO ANONIMO'

Esistono almeno tre scenari per questo problema. Utilizzare la tabella seguente per eseguire ogni scenario applicabile ed eseguire i passaggi di risoluzione appropriati.

Causa potenziale Risoluzioni suggerite
Scenari con doppio hop nello stesso computer: si sta tentando di eseguire un doppio hop, ma vengono utilizzate le credenziali NTLM anziché Kerberos. Per gli scenari con doppio hop nello stesso computer, aggiungere le voci del Registro di sistema DisableLoopbackCheck o BackConnectionHostNames come segue:
Scenari di doppio hop tra più computer: l'errore potrebbe verificarsi quando le connessioni Kerberos non riescono a causa di problemi di SPN. Sezione Passa a: Risoluzione degli errori di autenticazione a causa di problemi Kerberos nella parte inferiore per visualizzare i dettagli.
Nessun doppio hop coinvolto. Se non è coinvolto alcun doppio hop, potrebbe anche significare che sono presenti SPN duplicati e il client è in esecuzione come LocalSystem o un altro account computer che ottiene le credenziali NTLM anziché le credenziali Kerberos.

Sezione Passa a: Risoluzione degli errori di autenticazione a causa di problemi Kerberos per diagnosticare e risolvere i problemi relativi all'SPN.
I criteri di sicurezza locali di Windows potrebbero essere stati configurati per impedire l'uso dell'account computer per gli account locali. In Windows 2008 R2/Windows 7 e versioni successive, le opzioni di sicurezza dei criteri di sicurezza locali Possono essere configurate in modo da non usare l'account computer per gli account locali che vengono disattivati. Userebbe invece le credenziali | | anonime.

Se il problema persiste, passare alla sezione Problemi ancora.

Accesso non riuscito per il messaggio dell'utente '(null)'

Ciò significa che LSASS non è stato in grado di decrittografare il token di sicurezza utilizzando le credenziali dell'account SQL Server servizio. Il motivo principale è che l'SPN è associato all'account errato.

Per diagnosticare e risolvere questi problemi SPN, passare alla sezione Risoluzione degli errori di autenticazione a causa di problemi Kerberos.

L'accesso non riuscito per l'utente è vuoto

Ad esempio, potrebbe essere visualizzato un errore simile al seguente:

Source: NETLOGON
Date: 8/12/2012 8:22:16 PM
Event ID: 5719
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: <computer name>
Description:This computer was not able to set up a secure session with a domain controller in domain due to the following: The remote procedure call was cancelled. This may lead to authentication problems. Make sure that this computer is connected to the network. If the problem persists, please contact your domain administrator.
Empty string means that SQL tried to hand-off the credentials to LSASS but there was some problem. Either LSASS was not available or the domain controller could not be contacted.
Check the event logs on the client and the server machines to see if there are any network or Active Directory related messages around the time of failure and if you do, work with your domain administrator to fix the issues.

Se il problema persiste, passare alla sezione Problemi ancora.

Accesso non riuscito per l'utente <username> ' ' o accesso non riuscito per l'utente ' <domain> \ <username> '

Se il nome di dominio non viene specificato, si tratta di un errore SQL accesso. Se viene specificato, si tratta di un errore di Windows-Integrated accesso. Esaminare la tabella seguente per le cause e le possibili soluzioni.

Causa Passaggi di risoluzione
Il database richiesto non è in linea o altrimenti non è disponibile. Controllare le autorizzazioni e la disponibilità del database in SQL Server Management Studio.
L'utente non dispone delle autorizzazioni per il database richiesto. Provare a connettersi come altro utente con diritti sysadmin.

Per ulteriori suggerimenti, vedere Risoluzione dei problemi: Accesso non riuscito per l'utente 'x'.

Se il problema persiste, passare alla sezione Problemi ancora.

Accesso non riuscito per l'utente '<dominio\nomecomputer$>'

È inoltre possibile visualizzare questo valore con le applicazioni IIS che utilizzano l'accesso anonimo o l'account di accesso del modulo in cui l'account utente non è rappresentato. L'account anonimo iis (IUSR) o l'account del pool di app vengono invece rappresentati. L'account IUSR è un account locale e l'account del pool di app può anche essere un account locale.

Questo errore si verifica in genere se l'utente è connesso con un account locale anziché con un account di dominio. Se ci si connette ai servizi off-box, è possibile che le credenziali del computer siano passate. In alcuni casi, è possibile aggiungere questo account come account di accesso nel server back-end. In altri casi, è possibile eseguire l'accesso con un account di dominio ed eseguire il provisioning delle autorizzazioni appropriate per tale account per accedere al servizio remoto.

Se il problema persiste, passare alla sezione Problemi ancora.

Verificare gli errori scaduti di timeout

L'errore Timeout scaduto rappresenta uno o più dei seguenti messaggi di errore:

Timeout scaduto. È trascorso il periodo di timeout prima del completamento dell'operazione oppure il server non risponde.

System.Data.SqlClient.SqlException (0x80131904): timeout di connessione scaduto.
Il periodo di timeout trascorso durante il tentativo di utilizzare il riconoscimento dell'handshake pre-accesso.
Ciò potrebbe verificarsi perché l'handshake di pre-accesso non è riuscito o il server non è riuscito a rispondere indietro nel tempo.
La durata del tentativo di connessione a questo server è stata [Pre-Login] initialization=23; handshake=14979; ---> System.ComponentModel.Win32Exception (0x80004005): timeout dell'operazione di attesa.

System.Data.SqlClient.SqlException (0x80131904): Timeout scaduto.
È trascorso il periodo di timeout prima del completamento dell'operazione oppure il server non risponde.
System.ComponentModel.Win32Exception (0x80004005): timeout dell'operazione di attesa.

Timeout connessione scaduto.
Il periodo di timeout trascorso durante il tentativo di utilizzare il riconoscimento dell'handshake pre-accesso.
Ciò potrebbe verificarsi perché l'handshake di pre-accesso non è riuscito o il server non è riuscito a rispondere indietro nel tempo.
La durata del tentativo di connessione a questo server è stata [Pre-Login] initialization=21036; handshake=0; (Microsoft SQL Server, Errore: -2).

Nota

Il secondo e il terzo messaggio di errore si verificano quando è installato .Net Framework 4.5 o versione successiva.

È possibile avviare la risoluzione dei problemi dalla sezione seguente: Risoluzione dei problemi relativi ai messaggi scaduti di timeout.

Risoluzione dei problemi Timeout messaggi scaduti

Un timeout si verifica quando un elemento richiede più tempo del consentito. Stiamo fondamentalmente interrompendo ciò che si stava cercando di fare per non attendere a tempo indeterminato ed eventualmente bloccare altre cose e bloccare un'applicazione. Dal punto di vista della connettività, nella sua forma di base, possiamo vedere questo in due modi. Uno è un timeout di connettività, l'altro è un timeout di query. Pertanto, è consigliabile esaminare innanzitutto lo stack di chiamate completo del messaggio di errore per determinare se si tratta di un timeout di connessione o di comando.

Nota

I valori predefiniti per questi parametri che possono essere impostati tramite codice, stringa di connessione e altri metodi sono i seguenti:

  • Timeout connessione - 15 secondi
  • Timeout query o comando - 30 secondi
  • Uno stack di chiamate di timeout della connessione è simile al seguente:

    System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
    at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
    at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
    at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
    at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
    at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
    at System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean encrypt,Boolean trustServerCert, Boolean& marsCapable)
    at System.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnectionowningObject)
    at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfoserverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
    at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
    at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
    at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
    at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
    at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)  
    at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
    at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
    at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
    at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
    at System.Data.SqlClient.SqlConnection.Open() <-- SqlConnection along with Open tells us that we are trying to open a connection. So, this is not related to a query.  
    
  • Un timeout di comando in .NET 2.0 Framework è simile al seguente:

    System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
    at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
    at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
    at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
    at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
    at System.Data.SqlClient.SqlDataReader.get_MetaData()
    at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
    at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
    at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
    at System.Data.SqlClient.SqlCommand.ExecuteScalar() <-- SqlCommand is used to work with a query, not a connection. ExecuteScalar is used to actually execute a query. You could also see other items like an ExecuteReader or ExecuteNonQuery for example.
    

Passaggi di risoluzione: entrambi questi problemi potrebbero essere correlati all'ambiente o SQL Server correlati. Ad esempio, è possibile che la rete sia lenta o che si sia verificato un problema di prestazioni delle query. Non esistono regole rigide e veloci come quello che potrebbe essere fatto qui e potrebbero essere necessarie ulteriori indagini per capire quale potrebbe essere la causa del problema. L'aumento del timeout di query è molto più comune rispetto all'aumento del timeout di connessione. Questo perché quando si tenta di connettersi a un'origine dati, la connessione in genere avviene rapidamente (in genere entro un intervallo di pochi millisecondi).

Tipo Cose da provare
Timeout connessione
1. Aumentare ConnectionTimout nell'applicazione.
2. Verificare se la porta utilizzata da SQL è bloccata in rete utilizzando uno strumento come Portqry. Passare a Uso dello strumento PortqryUI con SQL Server per istruzioni su come usarlo.
Timeout comando
Aumentare il valore CommandTimeout nell'applicazione e ottimizzare le query che vengono eseguite nel back-end.

Per altri suggerimenti e suggerimenti, controlla: Risoluzione dei problemi: Timeout scaduto.

Se il problema persiste, passare alla sezione Problemi ancora.

Il periodo di timeout trascorso prima di ottenere una connessione dal pool

In genere si verifica se le connessioni non vengono chiuse correttamente e l'errore completo può essere simile al seguente:

System.InvalidOperationException: timeout scaduto. Il periodo di timeout trascorso prima di ottenere una connessione dal pool.

Ciò potrebbe verificarsi perché tutte le connessioni in pool erano in uso e sono state raggiunte le dimensioni massime del pool. Questo può essere in genere evitato da Timeout scaduto. Il periodo di timeout trascorso prima di ottenere una connessione dal pool.

Se il problema persiste, passare alla sezione Problemi ancora.

Connettersi SQL server utilizzando un file UDL

Per ulteriori informazioni su come testare le connessioni a SQL Server utilizzando un file Universal Data Link, vedere la sezione seguente Testare le connessioni a SQL Server utilizzando un file universal data link.

I file UDL offrono un modo semplice ed efficace per testare le connessioni al server SQL dai client o da altri sistemi.

  1. Abilita l'opzione per visualizzare le estensioni di file in Esplora risorse. Per eseguire l'operazione:

    1. Nei sistemi Windows 8 e versioni successive: vai a Opzioni esplora file nel Pannello di controllo o digita Nascondi in Windows Search e nella scheda Visualizza deseleziona Nascondi estensioni per i tipi di file noti.

    2. Windows 7 e versioni precedenti:

      Win7ViewExtFile

  2. Passare alla cartella in cui si desidera creare il file UDL (Universal Data Link), ad esempio c:\temp.

  3. Crea un nuovo file di testo (sqlconn.txt) e rinomina l'estensione da txt a udl. Fare clic su Sì per visualizzare il messaggio di avviso relativo alla modifica dell'estensione di file.

  4. Fare doppio clic sul file udl del passaggio 3 ed eseguire le operazioni seguenti:

    1. Nella scheda Provider selezionare il provider in uso nell'applicazione, ad esempio SQL Server Native Client.
    2. Nella scheda Connessione selezionare o immettere il SQL Server e il resto dei parametri in base all'applicazione
  5. Quindi fare clic su Test connessione.

Per ulteriori informazioni e screenshot, vedere il post di blog seguente su MSDN:
Nozioni di base: "Test UDL"

Se il problema persiste, passare alla sezione Problemi ancora.

Problemi ancora

Siamo spiacenti che questa Guida non sia stata utile alla risoluzione del problema. Ti consigliamo di accedere a Microsoft SQL Community per assistenza. Ecco alcune risorse aggiuntive che possono essere utili: