MSSQLSERVER_17892
Se aplica a:SQL Server
Detalles
Atributo | Value |
---|---|
Nombre de producto | SQL Server |
Id. de evento | 17892 |
Origen de eventos | MSSQLSERVER |
Componente | SQLEngine |
Nombre simbólico | SRV_LOGON_FAILED_BY_TRIGGER |
Texto del mensaje | Error de inicio de sesión para el nombre> de inicio de sesión <debido a la ejecución del desencadenador. |
Explicación
El error 17892 se produce cuando un código del desencadenador de inicio de sesión no se puede ejecutar correctamente. Los desencadenadores de inicio de sesión activan procedimientos almacenados en respuesta a un evento LOGON. Este evento se genera cuando se establece una sesión de usuario con una instancia de SQL Server. El usuario recibe un mensaje de error similar al siguiente:
Mensaje 17892, nivel 14, estado 1, nombre> del servidor<, línea 1
Error de inicio de sesión para el nombre> de inicio de sesión <debido a la ejecución del desencadenador.
Causas posibles
El problema puede producirse si hay un error al ejecutar el código del desencadenador para esa cuenta de usuario en concreto. Algunos de los escenarios incluyen:
- El desencadenador intenta insertar datos en una tabla que no existe.
- El inicio de sesión no tiene permisos para el objeto al que hace referencia el desencadenador de inicio de sesión.
Acción del usuario
Puede usar una de las siguientes soluciones en función de su escenario.
Escenario 1: Actualmente tiene acceso a una sesión abierta de SQL Server en una cuenta de administrador.
En este caso, puede llevar a cabo la acción correctiva necesaria para corregir el código del desencadenador.
Ejemplo 1: Si el objeto al que hace referencia el código del desencadenador no existe, cree el objeto para que el desencadenador de inicio de sesión pueda ejecutarse correctamente.
Ejemplo 2: Si el objeto al que hace referencia el código del desencadenador existe, pero los usuarios no tienen permisos, concédales los privilegios necesarios para acceder al objeto.
De forma alternativa, puede quitar o deshabilitar el desencadenador de inicio de sesión para que los usuarios puedan seguir iniciando sesión en SQL Server.
Escenario 2: No tiene ninguna sesión actual abierta con privilegios de administración, pero la conexión de administrador dedicada (DAC) está habilitada en SQL Server.
En este caso, puede usar la conexión DAC para seguir los pasos descritos en el escenario 1, ya que las conexiones DAC no se ven afectadas por los desencadenadores de inicio de sesión. Para obtener más información sobre la conexión de administrador dedicada (DAC), vea: Conexión de diagnóstico para administradores de bases de datos.
Para comprobar si la conexión DAC está habilitada en su instancia de SQL Server, revise si hay un mensaje similar al siguiente en el registro de errores de SQL Server:
2020-02-09 16:17:44.150 Servidor Se estableció la compatibilidad con la conexión de administración dedicada para escuchar localmente en el puerto 1434.
Escenario 3: No tiene una conexión DAC habilitada en el servidor ni una sesión de administrador para SQL Server.
En este escenario, la única forma de corregir el problema sería realizar los pasos siguientes:
Detenga SQL Server y los servicios relacionados.
Inicie SQL Server desde el símbolo del sistema con los parámetros de inicio
-c
,-m
y-f
. Esto deshabilita el desencadenador de inicio de sesión y le permite tomar las mismas medidas correctivas descritas anteriormente en el escenario 1.Nota
El procedimiento anterior requiere una cuenta de administrador del sistema o una cuenta de administrador equivalente.
Para obtener más información sobre estas y otras opciones de inicio, vea: Opciones de inicio del servicio de motor de base de datos.
Más información
Otra situación en la que se produce un error en los desencadenadores de inicio de sesión es cuando se usa la función EVENTDATA
. Esta función devuelve XML y distingue mayúsculas de minúsculas. Por lo tanto, cree el siguiente desencadenador de inicio de sesión, con la intención de bloquear el acceso en función de la dirección IP, puede encontrarse con el problema:
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
El usuario no respetó las mayúsculas y minúsculas al copiar este script de Internet en esta parte del desencadenador:
SELECT EVENTDATA().value ( '(/event_instance/clienthost)[1]' , 'NVARCHAR(15)');
Como consecuencia, EVENTDATA
siempre devolvía NULL y se denegaba el acceso a todos los inicios de sesión equivalentes a cuentas de administrador del sistema. En este caso, la conexión DAC no estaba habilitada, por lo que la única solución era reiniciar el servidor con los parámetros de inicio enumerados anteriormente para quitar el desencadenador.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de