Condividi tramite


Modifica delle password programmaticamente

Prima di SQL Server 2005, quando la password di un utente è scaduta, solo un amministratore potrebbe reimpostarlo. A partire da SQL Server 2005, SQL Server Native Client supporta la gestione della scadenza delle password a livello di codice tramite il provider OLE DB di SQL Server Native Client e il driver ODBC di SQL Server Native Client e tramite le modifiche apportate alle finestre di dialogo Account di accesso di SQL Server .

Annotazioni

Quando possibile, chiedere agli utenti di immettere le proprie credenziali in fase di esecuzione ed evitare di archiviare le credenziali in un formato persistente. Se è necessario rendere persistenti le credenziali, è necessario crittografarle usando l'API di crittografia Win32. Per altre informazioni sull'uso delle password, vedere Password complesse.

Codici di errore di accesso di SQL Server

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

Codice di errore di SQL Server Messaggio di errore
15113 Accesso non riuscito per l'utente '%.*ls' Motivo: convalida della password non riuscita. 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 criteri 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 dei criteri perché è troppo lunga.
18466 Accesso non riuscito per l'utente '%.*ls'. Motivo: impossibile modificare la password. La password non soddisfa i criteri 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: la password dell'account deve essere modificata.

Provider OLE DB di SQL Server Native Client

Il provider OLE DB di SQL Server Native Client supporta la scadenza delle password anche se un'interfaccia utente e a livello di codice.

Scadenza password dell'interfaccia utente OLE DB

Il provider OLE DB di SQL Server Native Client supporta la scadenza delle password tramite 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 avrà esito negativo se la password è scaduta.

Se DBPROP_INIT_PROMPT è stato impostato su qualsiasi altro valore, l'utente visualizza la finestra di dialogo Account di accesso di SQL Server , indipendentemente dal fatto che la password sia scaduta o meno. L'utente può fare clic sul pulsante Opzioni e selezionare Cambia password per modificare la password.

Se l'utente fa clic su OK e la password è scaduta, SQL Server chiede all'utente di immettere e confermare una nuova password usando la finestra di dialogo Cambia password di SQL Server .

Comportamento della richiesta OLE DB e account bloccati

I tentativi di connessione potrebbero non riuscire a causa del blocco dell'account. Se ciò si verifica dopo la visualizzazione della finestra di dialogo Account di accesso di SQL Server , viene visualizzato il messaggio di errore del server all'utente e il tentativo di connessione viene interrotto. Può verificarsi anche dopo la visualizzazione della finestra di dialogo Modifica password di SQL Server se l'utente immette un valore non valido 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 relativa password può scadere mentre la connessione è ancora attiva in un pool di connessioni. Il server verifica la presenza di password scadute e account bloccati in due occasioni. Il primo è quando viene creata per la prima volta una connessione. La seconda occasione è in caso di reimpostazione della connessione, quando la connessione viene prelevata dal pool.

Quando il tentativo di reimpostazione ha esito negativo, la connessione viene rimossa dal pool e viene restituito un errore.

Scadenza password a livello di codice OLE DB

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

La proprietà "Password" esistente fa riferimento a DBPROP_AUTH_PASSWORD e viene usata per archiviare la nuova password.

Annotazioni

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

Il provider non mantiene il valore di questa proprietà. Quando questa proprietà è impostata, il provider non usa il pool di connessioni per la prima connessione perché si verificherà una nuova connessione. Se la modifica della password ha esito positivo, la connessione corrente non può essere riutilizzata perché contiene ancora la vecchia password, che non sarà valida dopo la modifica della password. Inoltre, se l'account di accesso ha esito positivo, il provider cancella questa proprietà. I tentativi successivi di recuperare la vecchia password restituiscono VT_EMPTY.

Annotazioni

SSPROP_AUTH_OLD_PASSWORD non deve mai essere salvato in modo permanente perché viene usato solo quando una password è scaduta.

Si noti che ogni volta che viene impostata la proprietà "Vecchia password", il provider presuppone che venga effettuato un tentativo di modifica della password, a meno che non venga specificata anche l'autenticazione di Windows, nel qual caso ha sempre la precedenza.

Se viene usata l'autenticazione di Windows, specificando la vecchia password viene restituito DB_E_ERRORSOCCURRED o DB_S_ERRORSOCCURRED a seconda che la password precedente sia stata specificata rispettivamente come REQUIRED o OPTIONAL e il valore di stato di DBPROPSTATUS_CONFLICTINGBADVALUE venga restituito in dwStatus. Questo 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. Viene restituito un errore OLEDB standard dal tentativo di connessione.

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

Driver ODBC di SQL Server Native Client

Il provider OLE DB di SQL Server Native Client supporta la scadenza delle password anche se un'interfaccia utente e a livello di codice.

Scadenza password dell'interfaccia utente ODBC

Il driver ODBC di SQL Server Native Client supporta la scadenza delle password tramite 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 ha esito negativo se la password è scaduta. Il valore SQLSTATE 28000 e il valore del codice di errore nativo 18487 vengono restituiti dalle chiamate successive a SQLError o SQLGetDiagRec.

Se DriverCompletion è stato impostato su qualsiasi altro valore, l'utente visualizza la finestra di dialogo Di accesso di SQL Server , indipendentemente dal fatto che la password sia scaduta o meno. L'utente può fare clic sul pulsante Opzioni e selezionare Cambia password per modificare la password.

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

Comportamento della richiesta ODBC e account bloccati

I tentativi di connessione potrebbero non riuscire a causa del blocco dell'account. Se ciò si verifica dopo la visualizzazione della finestra di dialogo Account di accesso di SQL Server , viene visualizzato il messaggio di errore del server all'utente e il tentativo di connessione viene interrotto. Può verificarsi anche dopo la visualizzazione della finestra di dialogo Modifica password di SQL Server se l'utente immette un valore non valido 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 relativa password può scadere mentre la connessione è ancora attiva in un pool di connessioni. Il server verifica la presenza di password scadute e account bloccati in due occasioni. Il primo è quando viene creata per la prima volta una connessione. La seconda occasione è in caso di reimpostazione della connessione, quando la connessione viene prelevata dal pool.

Quando il tentativo di reimpostazione ha esito negativo, la connessione viene rimossa dal pool e viene restituito un errore.

Scadenza password a livello di codice ODBC

Il driver ODBC di SQL Server Native Client supporta la scadenza delle password tramite l'aggiunta dell'attributo SQL_COPT_SS_OLDPWD impostato prima della connessione al server tramite la funzione SQLSetConnectAttr .

L'attributo SQL_COPT_SS_OLDPWD dell'handle di connessione fa riferimento alla password scaduta. Non esiste alcun attributo della stringa di connessione per questo attributo, in quanto ciò interferisce con il pool di connessioni. Se l'account di accesso ha esito positivo, il driver cancella questo attributo.

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

Vedere anche

Funzionalità di SQL Server Native Client