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)
Importante
SQL Server Native Client (SNAC) não é fornecido com:
- SQL Server 2022 (16.x) e versões posteriores
- SQL Server Management Studio 19 e versões posteriores
O SQL Server Native Client (SQLNCLI ou SQLNCLI11) e o Microsoft OLE DB Provider for SQL Server (SQLOLEDB) herdado não são recomendados para o desenvolvimento de novos aplicativos.
Para novos projetos, use um dos seguintes drivers:
Para o SQLNCLI fornecido como componente do Mecanismo de Base de Dados do SQL Server (versões de 2012 a 2019), consulte esta exceção ao Ciclo de Vida de Suporte .
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 SQL Server Native Client suporta a gestão da expiração da palavra-passe de forma programática através do fornecedor OLE DB do SQL Server Native Client e do driver ODBC do SQL Server Native Client, bem como 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. |
Fornecedor SQL Server Native Client OLE DB
O fornecedor SQL Server Native Client OLE DB suporta a 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 fornecedor SQL Server Native Client OLE DB suporta a expiração da palavra-passe através de alterações feitas às 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 fornecedor SQL Server Native Client OLE DB 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.
Driver ODBC de Cliente Nativo do SQL Server
O fornecedor SQL Server Native Client OLE DB suporta a expiração de palavra-passe através de uma interface de utilizador e programaticamente.
Expiração da Palavra-passe da Interface de Utilizador ODBC
O driver SQL Server Native Client ODBC 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 SQLDriverConnect for chamado e o valor de DriverCompletion for definido para SQL_DRIVER_NOPROMPT, a tentativa inicial de ligação falha se a palavra-passe tiver expirado. O valor SQLSTATE 28000 e o valor nativo do código de erro 18487 são devolvidos por chamadas subsequentes para SQLError ou SQLGetDiagRec.
Se o DriverCompletion tiver sido definido para qualquer outro valor, o utilizador vê a janela de diálogo Login do SQL Server, 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 para introduzir e confirmar uma nova palavra-passe usando o diálogo Change SQL Server Password.
Comportamento de Prompts ODBC 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 ODBC, Expiração de Palavra-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 ODBC
O driver ODBC SQL Server Native Client suporta a expiração da palavra-passe através da adição do atributo SQL_COPT_SS_OLDPWD, que é definido antes de se ligar ao servidor usando a função SQLSetConnectAttr.
O atributo SQL_COPT_SS_OLDPWD do handle de ligação refere-se à palavra-passe expirada. Não existe um atributo cadeia de ligação para este atributo, pois interferiria com o pool de conexões. Se o login for bem-sucedido, o driver limpa este atributo.
O driver ODBC do SQL Server Native Client devolve SQL_ERROR em quatro casos para esta funcionalidade: expiração da palavra-passe, conflito de política de palavra-passe, bloqueio da conta e quando a propriedade da palavra-passe antiga é definida ao usar Windows Autenticação. O driver devolve as mensagens de erro apropriadas ao utilizador quando o SQLGetDiagField é invocado.