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.
Aplica-se a: SQL Server
Base de Dados SQL do Azure
Azure SQL Managed Instance
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Antes do SQL Server 2005 (9.x), quando a palavra-passe de um utilizador expirava, apenas um administrador podia redefini-la. A partir do SQL Server 2005 (9.x), o OLE DB Driver for SQL Driver for SQL Server suporta a gestão programática da expiração da palavra-passe através do OLE DB Driver e através de alterações nas caixas de diálogo de login do SQL Server.
Note
Sempre que possível, incentive os utilizadores a introduzirem as suas credenciais em tempo de execução e evite armazená-las num formato persistente. Se tiver de manter as credenciais deles, deve encriptá-las usando a API criptográfica Win32. Para mais informações sobre o uso de palavras-passe, consulte Palavras-passe Fortes.
Códigos de Erro de Login do SQL Server
Quando não é possível estabelecer uma ligação devido a problemas de autenticação, um dos seguintes códigos de erro do SQL Server estará disponível para a aplicação auxiliar no diagnóstico e recuperação.
| Código de Erro do SQL Server | Mensagem de erro |
|---|---|
| 15113 | Falha de login para o utilizador '%.*ls' Motivo: Falha na validação da palavra-passe. A conta está bloqueada. |
| 18463 | Falha de login para o usuário '%.*ls'. Motivo: Falha na alteração da senha. A senha não pode ser usada no momento. |
| 18464 | Falha de login para o usuário '%.*ls'. Motivo: Falha na alteração da senha. A senha não atende aos requisitos da política porque é muito curta. |
| 18465 | Falha de login para o usuário '%.*ls'. Motivo: Falha na alteração da senha. A palavra-passe não cumpre os requisitos da política porque é demasiado longa. |
| 18466 | Falha de login para o usuário '%.*ls'. Motivo: Falha na alteração da senha. A senha não atende aos requisitos da política porque não é complexa o suficiente. |
| 18467 | Falha de login para o usuário '%.*ls'. Motivo: Falha na alteração da senha. A senha não atende aos requisitos da DLL do filtro de senha. |
| 18468 | Falha de login para o usuário '%.*ls'. Motivo: Falha na alteração da senha. Ocorreu um erro inesperado durante a validação da palavra-passe. |
| 18487 | Falha de login para o usuário '%.*ls'. Motivo: a palavra-passe da conta expirou. |
| 18488 | Falha de login para o usuário '%.*ls'. Motivo: A senha da conta deve ser alterada. |
Driver OLE DB para o SQL Server
O OLE DB Driver for SQL Server suporta expiração de palavra-passe através de uma interface de utilizador e programaticamente.
Expiração da Palavra-passe da Interface de Utilizador do OLE DB
O OLE DB Driver for SQL Server suporta a expiração da palavra-passe através de alterações feitas nas caixas de diálogo de login do SQL Server. Se o valor de DBPROP_INIT_PROMPT estiver definido para DBPROMPT_NOPROMPT, a tentativa inicial de ligação falhará se a palavra-passe tiver expirado.
Se DBPROP_INIT_PROMPT tiver sido definido para qualquer outro valor, o utilizador vê o diálogo de SQL Server Login, independentemente de a palavra-passe ter expirado ou não. O utilizador pode clicar no botão Opções e marcar Alterar Palavra-passe para alterar a palavra-passe.
Se o utilizador clicar em OK e a palavra-passe expirar, o SQL Server pede ao utilizador que introduza e confirme uma nova palavra-passe usando o diálogo Change SQL Server Password.
Comportamento de Prompts do OLE DB e Contas Bloqueadas
As tentativas de ligação podem falhar devido ao bloqueio da conta. Se isto ocorrer após a visualização do diálogo Login do SQL Server, a mensagem de erro do servidor é apresentada ao utilizador e a tentativa de ligação é abortada. Também pode ocorrer após a exibição do diálogo Change SQL Server Password se o utilizador introduzir um valor incorreto para a palavra-passe antiga. Neste caso, a mesma mensagem de erro é exibida e a tentativa de ligação é abortada.
Pooling de Ligações OLE DB, Expiração de Palavras-Passe e Contas Bloqueadas
Uma conta pode ser bloqueada ou a sua palavra-passe pode expirar enquanto a ligação ainda estiver ativa num pool de ligações. O servidor verifica passwords expiradas e contas bloqueadas em duas ocasiões. A primeira é quando uma ligação é criada pela primeira vez. A segunda ocasião é ao reiniciar a ligação, quando a ligação é retirada do pool.
Quando a tentativa de reset falha, a ligação é removida do pool e um erro é devolvedo.
Expiração da Palavra-passe Programática do OLE DB
O OLE DB Driver for SQL Server suporta a expiração da palavra-passe através da adição da propriedade SSPROP_AUTH_OLD_PASSWORD (tipo VT_BSTR) que foi adicionada ao conjunto de propriedades DBPROPSET_SQLSERVERDBINIT.
A propriedade existente "Password" refere-se a DBPROP_AUTH_PASSWORD e é usada para armazenar a nova palavra-passe.
Note
No cadeia de ligação, a propriedade "Palavra-passe Antiga" define SSPROP_AUTH_OLD_PASSWORD, que é a palavra-passe atual (possivelmente expirada) que não está disponível através de uma propriedade de cadeia de fornecedor.
O fornecedor não mantém o valor desta propriedade. Quando esta propriedade é definida, o fornecedor não utiliza o pool de ligações para a primeira ligação porque ocorrerá uma nova ligação. Se a alteração da palavra-passe for bem-sucedida, a ligação atual não pode ser reutilizada, pois ainda contém a palavra-passe antiga, que será inválida após a alteração. Além disso, se o login for bem-sucedido, o fornecedor limpa essa propriedade. As tentativas subsequentes de recuperar a palavra-passe antiga retornam VT_EMPTY.
Note
SSPROP_AUTH_OLD_PASSWORD nunca deve ser mantido, pois só é usado quando uma palavra-passe expirou.
Note que sempre que a propriedade "Palavra-passe Antiga" é definida, o fornecedor assume que está a ser feita uma tentativa de alteração da palavra-passe, a menos que a Autenticação Windows também seja especificada, caso em que tem sempre prioridade.
Se for usada Windows Autenticação, especificar a palavra-passe antiga resulta em DB_E_ERRORSOCCURRED ou DB_S_ERRORSOCCURRED dependendo se a palavra-passe antiga foi especificada como OBRIGATÓRIA ou OPCIONAL, respetivamente, e o valor de estado da DBPROPSTATUS_CONFLICTINGBADVALUE é devolvido em dwStatus. Isto é detetado quando o IDBInitialize::Initialize é chamado.
Se uma tentativa de alterar a palavra-passe falhar inesperadamente, o servidor devolve o código de erro 18468. Um erro padrão OLEDB é devolvido na tentativa de ligação.
Para mais informações sobre o conjunto de propriedades DBPROPSET_SQLSERVERDBINIT, consulte Propriedades de Inicialização e Autorização.