Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Antes do SQL Server 2005, quando a senha de um usuário expirou, somente um administrador poderia redefini-la. A partir do SQL Server 2005, o SQL Server Native Client dá suporte ao tratamento de expiração de senha programaticamente por meio do provedor OLE DB do SQL Server Native Client e do driver ODBC do SQL Server Native Client e por meio de alterações nas caixas de diálogo logon do SQL Server .
Observação
Quando possível, solicite aos usuários que insiram suas credenciais em tempo de execução e evitem armazenar suas credenciais em um formato persistente. Se você precisar manter suas credenciais, deverá criptografá-las usando a API de criptografia Win32. Para obter mais informações sobre o uso de senhas, consulte Senhas Fortes.
Códigos de erro de logon do SQL Server
Quando uma conexão não pode ser feita devido a problemas de autenticação, um dos seguintes códigos de erro do SQL Server estará disponível para o aplicativo para auxiliar o diagnóstico e a recuperação.
| Código de erro do SQL Server | Mensagem de erro |
|---|---|
| 15113 | Falha no logon do usuário '%.*ls' Motivo: falha na validação de senha. A conta está bloqueada. |
| 18463 | Falha no logon do usuário '%.*ls'. Motivo: falha na alteração da senha. A senha não pode ser usada neste momento. |
| 18464 | Falha no logon do usuário '%.*ls'. Motivo: falha na alteração da senha. A senha não atende aos requisitos de política porque é muito curta. |
| 18465 | Falha no logon do usuário '%.*ls'. Motivo: falha na alteração da senha. A senha não atende aos requisitos de política porque é muito longa. |
| 18466 | Falha no logon do usuário '%.*ls'. Motivo: falha na alteração da senha. A senha não atende aos requisitos de política porque não é complexa o suficiente. |
| 18467 | Falha no logon do usuário '%.*ls'. Motivo: falha na alteração da senha. A senha não atende aos requisitos da DLL de filtragem de senha. |
| 18468 | Falha no logon do usuário '%.*ls'. Motivo: falha na alteração da senha. Ocorreu um erro inesperado durante a validação da senha. |
| 18487 | Falha no logon do usuário '%.*ls'. Motivo: a senha da conta expirou. |
| 18488 | Falha no logon do usuário '%.*ls'. Motivo: a senha da conta deve ser alterada. |
Provedor OLE DB do SQL Server Native Client
O provedor OLE DB do SQL Server Native Client dá suporte à expiração de senha por meio de uma interface do usuário e programaticamente.
Expiração da senha da interface do usuário do OLE DB
O provedor OLE DB do SQL Server Native Client dá suporte à expiração de senha por meio de alterações feitas nas caixas de diálogo logon do SQL Server . Se o valor de DBPROP_INIT_PROMPT estiver definido como DBPROMPT_NOPROMPT, a tentativa de conexão inicial falhará se a senha tiver expirado.
Se DBPROP_INIT_PROMPT tiver sido definido como qualquer outro valor, o usuário verá a caixa de diálogo Logon do SQL Server , independentemente de a senha ter expirado ou não. O usuário pode clicar no botão Opções e verificar Alterar Senha para alterar a senha.
Se o usuário clicar em OK e a senha tiver expirado, o SQL Server solicitará que o usuário insira e confirme uma nova senha usando a caixa de diálogo Alterar Senha do SQL Server .
Comportamento do prompt do OLE DB e contas bloqueadas
As tentativas de conexão podem falhar devido ao bloqueio da conta. Se isso ocorrer após a exibição da caixa de diálogo Logon do SQL Server , a mensagem de erro do servidor será exibida para o usuário e a tentativa de conexão será anulada. Também poderá ocorrer após a exibição da caixa de diálogo Alterar Senha do SQL Server se o usuário inserir um valor incorreto para a senha antiga. Nesse caso, a mesma mensagem de erro é exibida e a tentativa de conexão é anulada.
Pool de conexões OLE DB, expiração de senha e contas bloqueadas
Uma conta pode ser bloqueada ou sua senha pode expirar enquanto a conexão ainda estiver ativa em um pool de conexões. O servidor verifica se há senhas expiradas e contas bloqueadas em duas ocasiões. A primeira é quando uma conexão é criada pela primeira vez. A segunda ocasião é após a redefinição de conexão, quando a conexão é retirada do pool.
Quando a tentativa de redefinição falha, a conexão é removida do pool e um erro é retornado.
Expiração de senha programática do OLE DB
O provedor OLE DB do SQL Server Native Client dá suporte à expiração de senha por meio da adição da propriedade SSPROP_AUTH_OLD_PASSWORD (tipo VT_BSTR) que foi adicionada ao conjunto de propriedades DBPROPSET_SQLSERVERDBINIT.
A propriedade "Password" existente refere-se a DBPROP_AUTH_PASSWORD e é usada para armazenar a nova senha.
Observação
Na cadeia de conexão, a propriedade "Senha Antiga" define SSPROP_AUTH_OLD_PASSWORD, que é a senha atual (possivelmente expirada) que não está disponível por meio de uma propriedade de cadeia de caracteres do provedor.
O provedor não persiste o valor dessa propriedade. Quando essa propriedade é definida, o provedor não usa o pool de conexões para a primeira conexão porque uma nova conexão ocorrerá. Se a alteração de senha for bem-sucedida, a conexão atual não poderá ser reutilizado, pois ela ainda conterá a senha antiga, que será inválida após a alteração da senha. Além disso, se o logon for bem-sucedido, o provedor limpará essa propriedade. Tentativas subsequentes de recuperar a VT_EMPTY de retorno de senha antiga.
Observação
SSPROP_AUTH_OLD_PASSWORD nunca deve ser persistente, pois ela só é usada quando uma senha expirou.
Observe que sempre que a propriedade "Senha Antiga" é definida, o provedor assume que uma tentativa de alterar a senha está sendo feita, a menos que a Autenticação do Windows também seja especificada, nesse caso, ela sempre terá precedência.
Se a Autenticação do Windows for usada, especificar a senha antiga resultará em DB_E_ERRORSOCCURRED ou DB_S_ERRORSOCCURRED dependendo se a senha antiga foi especificada como REQUIRED ou OPTIONAL, respectivamente, e o valor de status de DBPROPSTATUS_CONFLICTINGBADVALUE será retornado no dwStatus. Isso é detectado quando IDBInitialize::Initialize é chamado.
Se uma tentativa de alterar a senha falhar inesperadamente, o servidor retornará o código de erro 18468. Um erro OLEDB padrão é retornado da tentativa de conexão.
Para obter mais informações sobre o conjunto de propriedades DBPROPSET_SQLSERVERDBINIT, consulte Propriedades de Inicialização e Autorização.
Driver ODBC do SQL Server Native Client
O provedor OLE DB do SQL Server Native Client dá suporte à expiração de senha por meio de uma interface do usuário e programaticamente.
Expiração da senha da interface do usuário ODBC
O driver ODBC do SQL Server Native Client dá suporte à expiração de senha por meio de alterações feitas nas caixas de diálogo logon do SQL Server .
Se SQLDriverConnect for chamado e o valor de DriverCompletion estiver definido como SQL_DRIVER_NOPROMPT, a tentativa de conexão inicial falhará se a senha tiver expirado. O valor SQLSTATE 28000 e o valor do código de erro nativo 18487 são retornados por chamadas subsequentes para SQLError ou SQLGetDiagRec.
Se DriverCompletion tiver sido definido como qualquer outro valor, o usuário verá a caixa de diálogo Logon do SQL Server , independentemente de a senha ter expirado ou não. O usuário pode clicar no botão Opções e verificar Alterar Senha para alterar a senha.
Se o usuário clicar em OK e a senha tiver expirado, o SQL Server solicitará a inserção e confirmação de uma nova senha usando a caixa de diálogo Alterar Senha do SQL Server .
Comportamento do prompt ODBC e contas bloqueadas
As tentativas de conexão podem falhar devido ao bloqueio da conta. Se isso ocorrer após a exibição da caixa de diálogo Logon do SQL Server , a mensagem de erro do servidor será exibida para o usuário e a tentativa de conexão será anulada. Também poderá ocorrer após a exibição da caixa de diálogo Alterar Senha do SQL Server se o usuário inserir um valor incorreto para a senha antiga. Nesse caso, a mesma mensagem de erro é exibida e a tentativa de conexão é anulada.
Pool de conexões ODBC, expiração de senha e contas bloqueadas
Uma conta pode ser bloqueada ou sua senha pode expirar enquanto a conexão ainda estiver ativa em um pool de conexões. O servidor verifica se há senhas expiradas e contas bloqueadas em duas ocasiões. A primeira é quando uma conexão é criada pela primeira vez. A segunda ocasião é após a redefinição de conexão, quando a conexão é retirada do pool.
Quando a tentativa de redefinição falha, a conexão é removida do pool e um erro é retornado.
Expiração de senha programática ODBC
O driver ODBC do SQL Server Native Client dá suporte à expiração de senha por meio da adição do atributo SQL_COPT_SS_OLDPWD que é definido antes de se conectar ao servidor usando a função SQLSetConnectAttr .
O atributo SQL_COPT_SS_OLDPWD do identificador de conexão refere-se à senha expirada. Não há nenhum atributo de cadeia de conexão para esse atributo, pois isso interferiria no pool de conexões. Se o logon for bem-sucedido, o driver limpará esse atributo.
O driver ODBC do SQL Server Native Client retorna SQL_ERROR em quatro casos para esse recurso: expiração de senha, conflito de política de senha, bloqueio de conta e quando a propriedade de senha antiga é definida ao usar a Autenticação do Windows. O driver retorna as mensagens de erro apropriadas para o usuário quando SQLGetDiagField é invocado.