Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se:SQL Server
Detalhes
| Atributo | Valor |
|---|---|
| Nome do produto | SQL Server |
| ID do evento | 17892 |
| Origem do Evento | MSSQLSERVER |
| Componente | SQLEngine |
| Nome simbólico | SRV_LOGON_FAILED_BY_TRIGGER |
| Texto da mensagem | Falha no logon para logon <Nome> de logon devido à execução do gatilho. |
Explicação
O erro 17892 é gerado quando um código de gatilho de logon não pode ser executado com êxito. Os gatilhos de logon acionam procedimentos armazenados em resposta a um evento LOGON. Esse evento é gerado quando uma sessão de usuário é estabelecida com uma instância do SQL Server. A seguinte mensagem de erro é relatada ao usuário:
Msg 17892, Nível 14, Estado 1, Nome do Servidor do Servidor<>, Linha 1
Falha no logon para logon <Nome> de logon devido à execução do gatilho.
Possíveis causas:
O problema poderá ocorrer se houver um erro ao executar o código de gatilho para essa conta de usuário específica. Alguns dos cenários incluem:
- O gatilho tenta inserir dados em uma tabela que não existe.
- O logon não tem permissões no objeto referenciado pelo gatilho de logon.
Ação do usuário
Você pode usar uma das seguintes resoluções dependendo do seu cenário:
Cenário 1: no momento, você tem acesso a uma sessão aberta para o SQL Server em uma conta de administrador
Nesse caso, você pode executar a ação corretiva necessária para corrigir o código do gatilho.
Exemplo 1: Se um objeto referido pelo código do gatilho não existir, crie esse objeto para que o gatilho de login possa ser executado com êxito.
Exemplo 2: Se um objeto referido pelo código de gatilho existir, mas os usuários não tiverem permissões, conceda a eles os privilégios necessários para acessar o objeto.
Como alternativa, você pode simplesmente descartar ou desabilitar o gatilho de logon para que os usuários possam continuar a fazer logon no SQL Server.
Gerenciar gatilhos de logon
Liste todos os gatilhos de logon no servidor:
SELECT name, is_disabled, create_date, modify_date
FROM sys.server_triggers
WHERE type_desc = 'LOGON';
Desabilite um gatilho de logon temporariamente sem excluí-lo:
DISABLE TRIGGER trigger_name ON ALL SERVER;
Solte (exclua) um gatilho de logon permanentemente:
DROP TRIGGER trigger_name ON ALL SERVER;
Para obter mais informações, consulte Gerenciar a segurança do gatilho.
Cenário 2: você não tem nenhuma sessão atual aberta com privilégios de administrador, mas a DAC (Conexão de Administrador Dedicada) está habilitada no SQL Server.
Nesse caso, você pode usar a conexão DAC para executar as mesmas etapas descritas no Cenário 1. Gatilhos de logon não afetam conexões DAC. Para obter mais informações sobre a conexão DAC, consulte: Conexão de diagnóstico para administradores de banco de dados.
Para verificar se o DAC está habilitado, examine o log de erros do SQL Server. Procure uma mensagem semelhante a este exemplo:
09/02/2020 16:17:44.150 Foi estabelecido suporte para conexão de administrador Dedicado do Servidor para escuta local na porta 1434.
Cenário 3: o DAC não está habilitado no servidor e você não tem uma sessão de administrador existente no SQL Server.
Nesse cenário, a única maneira de corrigir o problema é executar as seguintes etapas:
Pare o SQL Server e os serviços relacionados.
Inicie o SQL Server no prompt de comando usando os parâmetros
-cde inicialização ,-me-f. Essa ação desabilita o gatilho de logon e permite que você execute as mesmas medidas corretivas descritas no Cenário 1.Observação
Este procedimento requer uma SA (administrador do sistema) ou uma conta de administrador equivalente.
Para obter mais informações sobre essas e outras opções de inicialização, consulte: Opções de inicialização do serviço Mecanismo de Banco de Dados.
Mais informações
Gatilhos de logon também podem falhar ao usar a EVENTDATA função incorretamente. A EVENTDATA função retorna XML e diferencia maiúsculas de minúsculas. Por exemplo, se você criar o seguinte gatilho de logon para bloquear o acesso com base no endereço IP, poderá encontrar o erro 17892 se o caminho XML usar maiúsculas e minúsculas incorretas:
CREATE TRIGGER tr_logon_CheckIP
ON ALL SERVER
FOR LOGON
AS
BEGIN
IF IS_SRVROLEMEMBER ( 'sysadmin' ) = 1
BEGIN
DECLARE @IP NVARCHAR ( 15 );
SET @IP = ( SELECT EVENTDATA ().value ( '(/EVENT_INSTANCE/ClientHost)[1]' , 'NVARCHAR(15)' ));
IF NOT EXISTS( SELECT IP FROM DBAWork.dbo.ValidIP WHERE IP = @IP )
ROLLBACK ;
END ;
END ;
GO
Se você não mantiver a confidencialidade de maiúsculas e minúsculas adequada ao copiar esse script, especificamente nesta parte do gatilho, o gatilho falhará:
-- Incorrect: lowercase 'event_instance' and 'clienthost' will cause EVENTDATA to return NULL
SELECT EVENTDATA().value ( '(/event_instance/clienthost)[1]' , 'NVARCHAR(15)');
Como consequência, EVENTDATA sempre retorna NULL e todos os logons equivalentes de SA têm acesso negado. Nesse caso, se a conexão DAC não estiver habilitada, você precisará reiniciar o servidor com os parâmetros de inicialização descritos anteriormente para remover o gatilho.