Share via


Modifica delle password a livello di programmazione

Nelle versioni precedenti a SQL Server 2005 una password di un utente scaduta può essere reimpostata solo da un amministratore. A partire da SQL Server 2005, SQL Server Native Client supporta la gestione della scadenza delle password a livello di programmazione mediante il provider OLE DB di SQL Server Native Client e il driver ODBC di SQL Server Native Client e attraverso modifiche alle finestre di dialogo Account di accesso di SQL Server.

[!NOTA]

Quando possibile, richiedere agli utenti di immettere le credenziali in fase di esecuzione ed evitare di archiviarle in un formato persistente. Se è necessario rendere persistenti le credenziali, è consigliabile crittografarle utilizzando la cryptoAPI Win32. Per ulteriori informazioni sull'utilizzo delle password, vedere Password complesse.

Codici di errore degli account di accesso di SQL Server

Quando non è possibile stabilire una connessione a causa di problemi di autenticazione, sarà disponibile uno dei codici di errore di SQL Server seguenti per consentire la diagnosi e il ripristino.

Codice di errore di SQL Server

Messaggio di errore

15113

Accesso non riuscito per l'utente '%.*ls' Motivo: impossibile convalidare la password. L'account è bloccato.

18463

Accesso non riuscito per l'utente '%.*ls'. Motivo: impossibile modificare la password. Impossibile utilizzare la password in questo momento.

18464

Accesso non riuscito per l'utente '%.*ls'. Motivo: impossibile modificare la password. La password non soddisfa i requisiti di Windows in quanto è troppo breve.

18465

Accesso non riuscito per l'utente '%.*ls'. Motivo: impossibile modificare la password. La password non soddisfa i requisiti di Windows in quanto è troppo lunga.

18466

Accesso non riuscito per l'utente '%.*ls'. Motivo: impossibile modificare la password. La password non soddisfa i requisiti di Windows in quanto non è sufficientemente complessa.

18467

Accesso non riuscito per l'utente '%.*ls'. Motivo: impossibile modificare la password. La password non soddisfa i requisiti della DLL per il filtro delle password.

18468

Accesso non riuscito per l'utente '%.*ls'. Motivo: impossibile modificare la password. Si è verificato un errore imprevisto durante la convalida della password.

18487

Accesso non riuscito per l'utente '%.*ls'. Motivo: la password dell'account è scaduta.

18488

Accesso non riuscito per l'utente '%.*ls'. Motivo: è necessario modificare la password dell'account.

Per ulteriori informazioni sulla gestione degli errori di SQL Server, vedere Gestione degli errori e dei messaggi nelle applicazioni.

Provider OLE DB di SQL Server Native Client

Il provider OLE DB di SQL Server Native Client supporta la scadenza della password mediante un'interfaccia utente e a livello di programmazione.

Scadenza password dell'interfaccia utente OLE DB

Il provider OLE DB di SQL Server Native Client supporta la scadenza password mediante le modifiche apportate alle finestre di dialogo Account di accesso di SQL Server. Se il valore di DBPROP_INIT_PROMPT è impostato su DBPROMPT_NOPROMPT, il tentativo di connessione iniziale non riesce se la password è scaduta.

Se DBPROP_INIT_PROMPT è stato impostato su qualsiasi altro valore, verrà visualizzata la finestra di dialogo Account di accesso di SQL Server indipendentemente dalla scadenza della password. L'utente può cambiare la password facendo clic sul pulsante Opzioni e selezionando Cambia password.

Se l'utente fa clic su OK e la password è scaduta, viene richiesto all'utente di immettere e confermare una nuova password utilizzando la finestra di dialogo Modifica password SQL Server.

Comportamento del prompt di OLE DB e account bloccati

È possibile che non si reisca a stabilire una connessione perché l'account è bloccato. Se questo problema si verifica in seguito alla visualizzazione della finestra di dialogo Account di accesso di SQL Server, viene visualizzato il messaggio di errore del server e il tentativo di connessione viene interrotto. Il problema può verificarsi anche se, in seguito alla visualizzazione della finestra di dialogo Modifica password SQL Server, l'utente immette un valore non corretto per la vecchia password. In questo caso viene visualizzato lo stesso messaggio di errore e il tentativo di connessione viene interrotto.

Pool di connessioni OLE DB, scadenza password e account bloccati

Un account può essere bloccato o la rispettiva password può scadere mentre la connessione è ancora attiva in un pool di connessioni. Il server controlla le password scadute e gli account bloccati in due circostanze. Quando una connessione viene creata per la prima volta e quando la connessione viene reimpostata, ovvero quando viene estratta dal pool.

Quando il tentativo di ripristino non riesce, la connessione viene rimossa dal pool e viene restituito un errore.

Scadenza password OLE DB a livello di programmazione

Il provider OLE DB di SQL Server Native Client supporta la scadenza password mediante l'aggiunta della proprietà SSPROP_AUTH_OLD_PASSWORD (tipo VT_BSTR) che è stata aggiunta al set di proprietà DBPROPSET_SQLSERVERDBINIT.

La proprietà "Password" esistente si riferisce a DBPROP_AUTH_PASSWORD e viene utilizzata per archiviare la nuova password.

[!NOTA]

Nella stringa di connessione la proprietà "Vecchia password" imposta SSPROP_AUTH_OLD_PASSWORD, ovvero la password corrente (probabilmente scaduta) che non è disponibile tramite una proprietà della stringa del provider.

Il provider non rende persistente il valore di questa proprietà. Quando questa proprietà è impostata, il provider non utilizza il pool di connessioni per la prima connessione, dal momento che verrà stabilita una nuova connessione. Dopo aver cambiato la password, non sarà più possibile utilizzare la connessione corrente in quanto contiene ancora la vecchia password che non è più valida. Se inoltre si riesce ad accedere, il provider cancella questa proprietà. I tentativi successivi di recuperare la vecchia password restituiscono VT_EMPTY.

[!NOTA]

SSPROP_AUTH_OLD_PASSWORD non deve essere resa persistente in quanto viene utilizzata solo quando una password è scaduta.

Ogni volta che la proprietà "Vecchia password" viene impostata, il provider presuppone che sia in atto un tentativo di modificare la password, a meno che non venga specificata anche l'autenticazione di Windows. In questo caso, questa avrebbe comunque ha la precedenza.

Se viene utilizzata l'autenticazione di Windows, la specifica della vecchia password comporta DB_E_ERRORSOCCURRED o DB_S_ERRORSOCCURRED, a seconda se la vecchia password è stata specificata rispettivamente come REQUIRED o OPTIONAL, e il valore dello stato di DBPROPSTATUS_CONFLICTINGBADVALUE viene restituito in dwStatus. Questo errore viene rilevato quando viene chiamato IDBInitialize::Initialize.

Se un tentativo di modificare la password non riesce in modo imprevisto, il server restituisce il codice di errore 18468. Dal tentativo di connessione viene restituitto un errore OLE DB standard.

Per ulteriori informazioni sul set di proprietà DBPROPSET_SQLSERVERDBINIT, vedere Proprietà di inizializzazione e di autorizzazione.

Driver ODBC SQL Server Native Client

Il provider OLE DB SQL Server Native Client supporta la scadenza della password mediante un'interfaccia utente e a livello di programmazione.

Scadenza password dell'interfaccia utente ODBC

Il provider ODBC SQL Server Native Client supporta la scadenza password mediante le modifiche apportate alle finestre di dialogo Account di accesso di SQL Server.

Se viene chiamato SQLDriverConnect e il valore di DriverCompletion è impostato su SQL_DRIVER_NOPROMPT, il tentativo di connessione iniziale non riesce se la password è scaduta. Nelle chiamate successive a SQLError o SQLGetDiagRec vengono restituiti il valore SQLSTATE 28000 e il valore 18487 del codice di errore nativo.

Se DriverCompletion è stato impostato su qualsiasi altro valore, verrà visualizzata la finestra di dialogo Account di accesso di SQL Server, indipendentemente dalla scadenza della password. L'utente può cambiare la password facendo clic sul pulsante Opzioni e selezionando Cambia password.

Se l'utente fa clic su OK e la password è scaduta, SQL Server richiede l'immissione e la conferma di una nuova password utilizzando la finestra di dialogo Modifica password SQL Server.

Comportamento del prompt di ODBC e account bloccati

È possibile che non si reisca a stabilire una connessione perché l'account è bloccato. Se questo problema si verifica in seguito alla visualizzazione della finestra di dialogo Account di accesso di SQL Server, viene visualizzato il messaggio di errore del server e il tentativo di connessione viene interrotto. Il problema può verificarsi anche se, in seguito alla visualizzazione della finestra di dialogo Modifica password SQL Server, l'utente immette un valore non corretto per la vecchia password. In questo caso viene visualizzato lo stesso messaggio di errore e il tentativo di connessione viene interrotto.

Pool di connessioni ODBC, scadenza password e account bloccati

Un account può essere bloccato o la rispettiva password può scadere mentre la connessione è ancora attiva in un pool di connessioni. Il server controlla le password scadute e gli account bloccati in due circostanze. Quando una connessione viene creata per la prima volta e quando la connessione viene reimpostata, ovvero quando viene estratta dal pool.

Quando il tentativo di ripristino non riesce, la connessione viene rimossa dal pool e viene restituito un errore.

Scadenza password ODBC a livello di programmazione

Il driver ODBC SQL Server Native Client supporta la scadenza della password mediante l'aggiunta dell'attributo SQL_COPT_SS_OLDPWD che è stato impostato prima di connettersi al server utilizzando la funzione SQLSetConnectAttr.

L'attributo SQL_COPT_SS_OLDPWD dell'handle di connessione si riferisce alla password scaduta. Per questo attributo non è disponibile un attributo di stringa di connessione, in quanto interferirebbe con il pool di connessioni. Se si riesce ad accedere, il driver cancella questo attributo.

Il driver ODBC SQL Server Native Client restituisce SQL_ERROR in quattro casi per questa funzionalità: scadenza della password, conflitto dei criteri di gestione delle password, blocco dell'account e nel caso in cui la proprietà della vecchia password viene impostata durante l'utilizzo dell'autenticazione di Windows. Il driver restituisce all'utente i messaggi di errore appropriati quando viene chiamato SQLGetDiagField.