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.
Si applica a:SQL Server su Linux
Questo articolo illustra come risolvere i problemi di autenticazione di Active Directory Domain Services con SQL Server in Linux e contenitori. Include controlli e suggerimenti prerequisiti per la corretta configurazione di Active Directory e un elenco di errori e procedure di risoluzione dei problemi comuni.
Convalida della configurazione corrente
Prima di iniziare la risoluzione del problema, valida l'utente corrente, mssql.confil Nome del Principale Servizio (SPN) e le impostazioni del regno.
Ottieni o rinnova il Kerberos TGT (ticket di concessione dei biglietti) con:
kinitkinit privilegeduser@CONTOSO.COMEsegui il seguente comando e assicurati che l'utente che lo esegue abbia accesso al
mssql.keytab:/opt/mssql/bin/mssql-conf validate-ad-config /var/opt/mssql/secrets/mssql.keytabPer maggiori informazioni sul
validate-ad-configcomando, esegui/opt/mssql/bin/mssql-conf validate-ad-config --help.
Ricerche DNS e DNS inverso
Le ricerche DNS sul nome di dominio e sul nome NetBIOS devono restituire lo stesso indirizzo IP, che normalmente corrisponde all'indirizzo IP per il controller di dominio. Eseguire questi comandi dal computer host di SQL Server.
nslookup contoso nslookup contoso.comSe gli indirizzi IP non corrispondono, vedere Aggiungere SQL Server in un host Linux a un dominio Active Directory per correggere le comunicazioni e le ricerche DNS con il controller di dominio.
Esegui una ricerca DNS inversa (rDNS) per ogni indirizzo IP dai risultati precedenti. Includere indirizzi IPv4 e IPv6 dove applicabile.
nslookup <IPs returned from the above commands>Il valore restituito dovrebbe essere
<hostname>.contoso.com. Altrimenti, controlla i record PTR (puntatore) in Active Directory.Potrebbe essere necessario collaborare con l'amministratore del dominio per far funzionare l'rDNS. Se non puoi aggiungere voci PTR per tutti gli indirizzi IP restituiti, puoi anche limitare SQL Server a un sottoinsieme di controller di dominio. Questa modifica influisce su tutti gli altri servizi che usano
krb5.confnell'host.Per altre informazioni sul DNS inverso, vedere Che cos'è il DNS inverso?
Controllare il file keytab e le autorizzazioni
Controlla di aver creato il file keytab (key table) e di aver configurato
mssql-confper usare il file corretto con i permessi appropriati. Il file keytab deve essere accessibile all'account utentemssql. Per altre informazioni, vedi Usare adutil per configurare l'autenticazione di Active Directory con SQL Server in Linux.Assicurarsi di poter elencare il contenuto del keytab e di aver aggiunto correttamente gli SPN corretti, la porta, il tipo di crittografia e l'account utente. Se non digiti correttamente le password quando crei gli SPN e le voci keytab, incontri errori quando provi ad accedere con l'autenticazione Active Directory.
klist -kte /var/opt/mssql/secrets/mssql.keytabDi seguito è riportato un esempio di keytab funzionante. L'esempio usa due tipi di crittografia, ma è possibile usarne solo uno o più a seconda dei tipi di crittografia supportati nell'ambiente in uso. Nell'esempio,
sqluser@CONTOSO.COMè l'account con privilegi (che corrisponde all'impostazionenetwork.privilegedadaccountinmssql-conf) e il nome host per SQL Server èsqllinux.contoso.comin ascolto sulla porta1433predefinita .$ kinit privilegeduser@CONTOSO.COM Password for privilegeduser@CONTOSO.COM: $ klist Ticket cache: FILE:/tmp/krb5cc_1000 Default principal: privilegeduser@CONTOSO.COM Valid starting Expires Service principal 01/26/22 20:42:02 01/27/22 06:42:02 krbtgt/CONTOSO.COM@CONTOSO.COM renew until 01/27/22 20:41:57 $ klist -kte /var/opt/mssql/secrets/mssql.keytab Keytab name: FILE:/var/opt/mssql/secrets/mssql.keytab KVNO Timestamp Principal ---- ----------------- -------------------------------------------------------- 2 01/13/22 13:19:47 MSSQLSvc/sqllinux@CONTOSO.COM (aes256-cts-hmac-sha1-96) 2 01/13/22 13:19:47 MSSQLSvc/sqllinux@CONTOSO.COM (aes128-cts-hmac-sha1-96) 2 01/13/22 13:19:47 MSSQLSvc/sqllinux.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96) 2 01/13/22 13:19:47 MSSQLSvc/sqllinux.contoso.com@CONTOSO.COM (aes128-cts-hmac-sha1-96) 2 01/13/22 13:19:47 MSSQLSvc/sqllinux:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96) 2 01/13/22 13:19:47 MSSQLSvc/sqllinux:1433@CONTOSO.COM (aes128-cts-hmac-sha1-96) 2 01/13/22 13:19:47 MSSQLSvc/sqllinux.contoso.com:5533@CONTOSO.COM (aes256-cts-hmac-sha1-96) 2 01/13/22 13:19:47 MSSQLSvc/sqllinux.contoso.com:5533@CONTOSO.COM (aes128-cts-hmac-sha1-96) 2 01/13/22 13:19:55 sqluser@CONTOSO.COM (aes256-cts-hmac-sha1-96) 2 01/13/22 13:19:55 sqluser@CONTOSO.COM (aes128-cts-hmac-sha1-96)
Convalidare le informazioni sull'ambito in krb5.conf
In
krb5.conf(disponibile in/etc/krb5.conf) verificare di specificare i valori per l'area di autenticazione predefinita, le informazioni sull'area di autenticazione e l'associazione del dominio all'area di autenticazione. Esamina il seguente file di esempiokrb5.conf. Per altre informazioni, vedere Informazioni sull'autenticazione di Active Directory per SQL Server in Linux e contenitori.[libdefaults] default_realm = CONTOSO.COM default_keytab_name = /var/opt/mssql/secrets/mssql.keytab default_ccache_name = "" [realms] CONTOSO.COM = { kdc = adVM.contoso.com admin_server = adVM.contoso.com default_domain= contoso.com } [domain_realm] .contoso.com = CONTOSO.COM contoso.com = CONTOSO.COMÈ possibile limitare SQL Server affinché contatti un subset di controller di dominio, operazione utile se la configurazione DNS restituisce più controller di dominio rispetto a quelli che SQL Server deve contattare. SQL Server in Linux ti permette di specificare un elenco di controller di dominio che SQL Server contatta in modo round-robin durante una ricerca Lightweight Directory Access Protocol (LDAP).
Completa questi due passaggi. Per prima cosa, modifica
krb5.confaggiungendo i controller di dominio necessari, con il prefisso dikdc =.[realms] CONTOSO.COM = { kdc = kdc1.contoso.com kdc = kdc2.contoso.com .. .. }Il
krb5.conffile è un comune file di configurazione client Kerberos, quindi qualsiasi modifica che tu apporti in questo file influisce su altri servizi oltre a SQL Server. Prima di apportare qualsiasi modifica, consulta l'amministratore del tuo dominio.Abilita l'impostazione
network.enablekdcfromkrb5confconmssql-conf, e poi riavvia SQL Server:sudo /opt/mssql/bin/mssql-conf set network.enablekdcfromkrb5conf true sudo systemctl restart mssql-server
Risoluzione dei problemi di Kerberos
I seguenti dettagli ti aiutano a risolvere problemi di autenticazione di Active Directory e a identificare messaggi di errore specifici.
Traccia Kerberos
Dopo aver creato l'utente, gli SPN e le keytab, e configuratomssql-conf, verificare la configurazione di Active Directory.
Per verificare la configurazione di SQL Server in Linux, usa l'account privilegiato per ottenere o rinnovare il TGT Kerberos. Esegui questo comando per mostrare i messaggi di tracciamento Kerberos nella console (stdout):
root@sqllinux mssql# KRB5_TRACE=/dev/stdout kinit -kt /var/opt/mssql/secrets/mssql.keytab sqluser
Se non si verificano problemi, verrà visualizzato un output simile all'esempio seguente. Se no, la traccia fornisce un contesto su quali passaggi esaminare.
3791545 1640722276.100275: Getting initial credentials for sqluser@CONTOSO.COM
3791545 1640722276.100276: Looked up etypes in keytab: aes256-cts, aes128-cts
3791545 1640722276.100278: Sending unauthenticated request
3791545 1640722276.100279: Sending request (202 bytes) to CONTOSO.COM
3791545 1640722276.100280: Initiating TCP connection to stream 10.0.0.4:88
3791545 1640722276.100281: Sending TCP request to stream 10.0.0.4:88
3791545 1640722276.100282: Received answer (185 bytes) from stream 10.0.0.4:88
3791545 1640722276.100283: Terminating TCP connection to stream 10.0.0.4:88
3791545 1640722276.100284: Response was from master KDC
3791545 1640722276.100285: Received error from KDC: -1765328359/Additional pre-authentication required
3791545 1640722276.100288: Preauthenticating using KDC method data
3791545 1640722276.100289: Processing preauth types: PA-PK-AS-REQ (16), PA-PK-AS-REP_OLD (15), PA-ETYPE-INFO2 (19), PA-ENC-TIMESTAMP (2)
3791545 1640722276.100290: Selected etype info: etype aes256-cts, salt "CONTOSO.COMsqluser", params ""
3791545 1640722276.100291: Retrieving sqluser@CONTOSO.COM from /var/opt/mssql/secrets/mssql.keytab (vno 0, enctype aes256-cts) with result: 0/Success
3791545 1640722276.100292: AS key obtained for encrypted timestamp: aes256-cts/E84B
3791545 1640722276.100294: Encrypted timestamp (for 1640722276.700930): plain 301AA011180F32303231313XXXXXXXXXXXXXXXXXXXXXXXXXXXXX, encrypted 333109B95898D1B4FC1837DAE3E4CBD33AF8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3791545 1640722276.100295: Preauth module encrypted_timestamp (2) (real) returned: 0/Success
3791545 1640722276.100296: Produced preauth for next request: PA-ENC-TIMESTAMP (2)
3791545 1640722276.100297: Sending request (282 bytes) to CONTOSO.COM
3791545 1640722276.100298: Initiating TCP connection to stream 10.0.0.4:88
3791545 1640722276.100299: Sending TCP request to stream 10.0.0.4:88
3791545 1640722276.100300: Received answer (1604 bytes) from stream 10.0.0.4:88
3791545 1640722276.100301: Terminating TCP connection to stream 10.0.0.4:88
3791545 1640722276.100302: Response was from master KDC
3791545 1640722276.100303: Processing preauth types: PA-ETYPE-INFO2 (19)
3791545 1640722276.100304: Selected etype info: etype aes256-cts, salt "CONTOSO.COMsqluser", params ""
3791545 1640722276.100305: Produced preauth for next request: (empty)
3791545 1640722276.100306: AS key determined by preauth: aes256-cts/E84B
3791545 1640722276.100307: Decrypted AS reply; session key is: aes256-cts/05C0
3791545 1640722276.100308: FAST negotiation: unavailable
3791545 1640722276.100309: Initializing KCM:0:37337 with default princ sqluser@CONTOSO.COM
3791545 1640722276.100310: Storing sqluser@CONTOSO.COM -> krbtgt/CONTOSO.COM@CONTOSO.COM in KCM:0:37337
3791545 1640722276.100311: Storing config in KCM:0:37337 for krbtgt/CONTOSO.COM@CONTOSO.COM: pa_type: 2
3791545 1640722276.100312: Storing sqluser@CONTOSO.COM -> krb5_ccache_conf_data/pa_type/krbtgt/CONTOSO.COM@CONTOSO.COM@X-CACHECONF: in KCM:0:37337
$ sudo klist
Ticket cache: KCM:0:37337
Default principal: sqluser@CONTOSO.COM
Valid starting Expires Service principal
12/28/2021 20:11:16 12/29/2021 06:11:16 krbtgt/CONTOSO.COM@CONTOSO.COM
renew until 01/04/2022 20:11:16
Abilitare la registrazione basata su Kerberos e sulla sicurezza di PAL
Per identificare messaggi di errore specifici nel PAL (Platform Abstraction Layer), abilita security.kerberos e security.ldap registra. Crea un logger.ini file con il seguente contenuto a /var/opt/mssql/, e poi riavvia SQL Server per catturare eventuali errori di inizializzazione. Riproduci l'errore. Il PAL registra gli errori di Active Directory e i messaggi di debug su /var/opt/mssql/log/security.log.
[Output:security]
Type = File
Filename = /var/opt/mssql/log/security.log
[Logger]
Level = Silent
[Logger:security.kerberos]
Level = Debug
Outputs = security
[Logger:security.ldap]
Level = Debug
Outputs = security
SQL Server rileva le modifiche del logger senza logger.ini riavvio, ma i guasti durante l'inizializzazione del servizio Active Directory all'avvio di SQL Server passano altrimenti inosservati. Riavviando SQL Server si catturano tutti i messaggi di errore.
Il registro di sicurezza continua a scrivere nell'unità fino a quando non vengono rimosse le modifiche in logger.ini. Disabilita e security.ldap registra security.kerberos una volta identificato e risolto il problema, per evitare di rimanere senza spazio sul disco.
Il logger PAL genera i file di log nel formato seguente:
<DATETIME> <Log level> [<logger>] <<process/thread identifier>> <message>
Ad esempio, di seguito è mostrata una riga di esempio del registro:
12/28/2021 13:56:31.609453055 Error [security.kerberos] <0003753757/0x00000324> Request ticket server MSSQLSvc/sql.contoso.com:1433@CONTOSO.COM kvno 3 enctype aes256-cts found in keytab but cannot decrypt ticket
Una volta abilitato il logging PAL e riprodotto il problema, cerca il primo messaggio con un livello di log di Error. Usa la tabella seguente per trovare l'errore e segui le indicazioni e le raccomandazioni per risolvere e risolvere il problema.
Messaggi di errore comuni
Messaggio di errore: "Non è possibile eseguire l'accesso. L'accesso proviene da un dominio non affidabile e non può essere utilizzato con l'autenticazione integrata"
Possibile causa
Incontri questo errore quando provi ad accedere con un account Active Directory dopo aver configurato l'autenticazione Active Directory.
Guidance
Questo messaggio di errore generico richiede di abilitare la registrazione PAL per identificare l'errore specifico.
Consulta la seguente lista di errori comuni per identificare la possibile causa di ciascun errore, e poi segui le indicazioni di troubleshooting per risolvere il problema.
Messaggio di errore: Impossibile trovare l'utente o il gruppo di Windows NT 'CONTOSO\user'
Possibile causa
Questo errore può verificarsi quando si tenta di creare l'account di accesso di Windows o durante l'aggiornamento del gruppo.
Guidance
Per convalidare il problema, segui le indicazioni "Accesso fallito. L'account di accesso proviene da un dominio non attendibile e non può essere usato con l'autenticazione integrata. (Microsoft SQL Server, Errore: 18452)" e abilitare il logging PAL per identificare l'errore specifico e risolvere i problemi di conseguenza.
Messaggio di errore: Non è stato possibile trovare il nome di dominio breve a causa di un errore"
Possibile causa
La sintassi Transact-SQL per creare un account di accesso Active Directory è:
CREATE LOGIN [CONTOSO\user]
FROM WINDOWS;
Il nome NetBIOS (CONTOSO) è richiesto nel comando, ma la FQDN del dominio (contoso.com) deve essere fornita nel backend quando si effettua una connessione LDAP. A tale scopo, viene eseguita una ricerca DNS in CONTOSO per restituire l'indirizzo IP di un controller di dominio, a cui può quindi essere associato per le query LDAP.
Guidance
Il messaggio di errore "Non è stato possibile cercare il nome di dominio breve a causa di errore" suggerisce che nslookup for contoso non si risolva all'indirizzo IP del domain controller. Rivedi DNS e ricerche DNS inverse per confermare che nslookup sia per NetBIOS che per il nome di dominio corrispondano.
Messaggi di errore: "Impossibile eseguire la ricerca rDNS per il nome< host host >a causa di un errore" o "FQDN non restituito dalla ricerca rDNS"
Possibile causa
Questi messaggi di errore di solito indicano che i record DNS inversi (record PTR) non esistono per tutti i controller di dominio.
Guidance
Controllare le ricerche DNS e DNS inverso. Dopo aver identificato i controller di dominio che non hanno voci rDNS, hai due opzioni:
Aggiungere voci rDNS per tutti i controller di dominio
Questa impostazione non è una modalità SQL Server, e devi configurarla a livello di dominio. Potresti dover collaborare con il team di amministrazione del dominio per creare i record PTR richiesti per tutti i controller di dominio che
nslookuprestituiscono il nome di dominio.Limitare SQL Server a un subset di controller di dominio
Se non puoi aggiungere record PTR per tutti i controller di dominio restituiti, puoi limitare SQL Server a un sottoinsieme di controller di dominio.
Messaggio di errore: "L'associazione al server LDAP ldap://CONTOSO.COM:3268 non è riuscita: Errore locale"
Possibile causa
Questo errore generico da OpenLDAP significa in genere una delle due cose seguenti:
- Nessuna credenziale
- Problemi di DNS inverso
Ecco un esempio del messaggio di errore:
12/09/2021 14:32:11.319933684 Error [security.ldap] <0000000142/0x000001c0> Failed to bind to LDAP server ldap://[CONTOSO.COM:3268]: Local error
Guidance
Nessuna credenziale
Altri messaggi di errore appaiono per primi se le credenziali non si caricano per le connessioni LDAP. Abilita il PAL logging e controlla il log degli errori per i messaggi di errore prima di questo. Se non sono presenti altri errori, è molto probabile che non si tratti di un problema di credenziali. Se trovi un errore, risolvilo prima di andare avanti. Nella maggior parte dei casi, è uno dei messaggi di errore trattati in questo articolo.
Problemi di DNS inverso
Controllare le ricerche DNS e DNS inverso.
Quando la libreria OpenLDAP si collega a un controller di dominio, fornisce o il nome di dominio completamente qualificato (FQDN), che in questo esempio è
contoso.com, oppure il FQDN del DC (kdc1.contoso.com). Dopo aver stabilito la connessione (ma prima di restituire il successo al chiamante), la libreria OpenLDAP controlla l'IP del server a cui si è collegata. Successivamente effettua una ricerca DNS inversa e verifica che il nome del server a cui è connesso (kdc1.contoso.com) corrisponda al dominio richiesto (contoso.com). Se non corrisponde, la libreria OpenLDAP fallisce la connessione per motivi di sicurezza. Questa discrepanza è parte del motivo per cui le impostazioni rDNS sono importanti per SQL Server in Linux, ed è il fulcro di questo articolo.
Messaggio di errore: "Voce del file keytab non trovata"
Possibile causa
Questo errore indica problemi di accesso con il file keytab o voci mancanti nella keytab.
Guidance
Assicurarsi che il file keytab disponga del livello di accesso e delle autorizzazioni corretti. La posizione e il nome predefiniti per il file keytab sono /var/opt/mssql/secrets/mssql.keytab. Per visualizzare i permessi attuali su tutti i file nella cartella secrets, esegui questo comando:
sudo ls -lrt /var/opt/mssql/secrets
Usa questi comandi per impostare i permessi e il livello di accesso sul file keytab:
sudo chown mssql /var/opt/mssql/secrets/mssql.keytab
sudo chmod 440 /var/opt/mssql/secrets/mssql.keytab
Per altre informazioni sull'elenco delle voci della scheda delle chiavi e sull'impostazione delle autorizzazioni corrette, vedere la sezione precedente Controllare il file keytab e le autorizzazioni . Se non soddisfi nessuna delle condizioni di quella sezione, vedi questo errore o un errore equivalente: "Key table entry not found".
Messaggio di errore: "Nessuna voce trovata nella tabella di chiavi per il <principale>"
Possibile causa
Quando provi a recuperare le credenziali <principal> dalla keytab, non trovi voci applicabili.
Guidance
Per elencare tutte le voci nel keytab, seguire la sezione verifica file keytab e autorizzazioni di questo articolo. Assicurarsi che l'elemento <principal> sia presente. In questo caso, il conto principale è solitamente quello network.privilegedadaccount su cui registri gli SPN. Se non lo è, aggiungilo insieme al adutil comando. Per altre informazioni, vedi Usare adutil per configurare l'autenticazione di Active Directory con SQL Server in Linux.
Messaggio di errore: "Il <ticket server principale>richiesto non è stato trovato nel keytab (kvno del ticket <KVNO>)"
Possibile causa
Questo errore indica che SQL Server non riesce a trovare una voce keytab per il ticket richiesto con il Key Version Number (KVNO) specificato.
Guidance
Per elencare tutte le voci nel keytab, seguire la sezione verifica file keytab e autorizzazioni di questo articolo. Se non riesci a trovare un messaggio di errore che corrisponda a <principal> e KVNO, aggiorna il file keytab per aggiungere questa voce, seguendo i passaggi di quella sezione.
È anche possibile eseguire il comando seguente per ottenere il KVNO più recente dal controller di dominio. Prima di eseguire questo comando, ottieni o rinnova il Kerberos TGT con il kinit comando. Per ulteriori informazioni, vedi utilizzare adutil per creare un utente Active Directory per SQL Server e per impostare il nome dell'entità servizio (SPN).
kvno MSSQLSvc/<hostname>
it-IT: Messaggio di errore: "KVNO <del> server del ticket richiesto < principale> trovato nel file keytab ma non con il tipo di crittografia <encryption type>"
Possibile causa
Questo errore significa che la keytab di SQL Server non contiene il tipo di crittografia richiesto dal client.
Guidance
Per validare, segui la sezione Check keytab file e permissions di questo articolo per elencare tutte le voci nella keytab. Se non riesci a trovare un messaggio di errore che corrisponda al principale, al KVNO e al tipo di crittografia, aggiorna il file keytab per aggiungere questa voce, seguendo i passaggi di quella sezione.
Messaggio di errore: "È stato trovato il tipo di crittografia <tipo di crittografia> del KVNO <KVNO> dell'<entità di sicurezza> del server del ticket richiesto nel file keytab ma non riesce a decrittografare il ticket"
Possibile causa
Questo messaggio di errore indica che SQL Server non può utilizzare una credenziale dal file keytab per decifrare la richiesta di autenticazione in arrivo. Una password errata spesso causa questo errore.
Guidance
Ricrea la keytab con la password corretta. Se usi adutil, crea la keytab con la password giusta e segui i passaggi del Tutorial: Usa adutil per configurare l'autenticazione Active Directory con SQL Server in Linux.
Porte comuni
Questa tabella mostra le porte comuni che SQL Server in Linux utilizza per configurare e amministrare l'autenticazione Active Directory.
| Servizio Active Directory | Porto |
|---|---|
| DNS | 53 |
| LDAP | 389 |
| LDAPS | 636 |
| Kerberos | 88 |