solucion microsoft for failed error corporativo administrador sql sql-server sql-server-2008

corporativo - login failed for user sa microsoft sql server error 18456 sql server 2017



Soltar el inicio de sesión de SQL incluso mientras está conectado (5)

Al descartar un inicio de sesión de SQL Server 2008 como parte de la ejecución de la prueba de integración, a veces aparece el siguiente error:

System.Data.SqlClient.SqlException: No se pudo quitar el inicio de sesión ''SomeTestUser'' ya que el usuario está actualmente conectado.

No me importa si está conectado, todavía quiero dejarlo. ¿Cuál es la forma más fácil de hacer esto?


En SqlServer Studio en la base de datos principal.

Utilice el comando sp_who2 para enumerar las sesiones abiertas.

En la lista, encuentre el spid para su usuario; puede haber más de uno, por ejemplo, 999

Usa kill y el spid para cerrar todas las sesiones, por ejemplo: kill 999

Luego DROP LOGIN [theuser]


Es posible que esto no siempre sea aplicable, pero acabo de reiniciar el servidor SQL desde los servicios. Eso aclaró cualquier conexión abierta.


OK, aquí está el guión que se me ocurrió, que funcionó para mí. Tenga en cuenta que debe ser miembro de la función del servidor processadmin para encontrar y eliminar la conexión y un miembro de securityadmin para cancelar el inicio de sesión. (Por supuesto, sysadmin puede hacer cualquier cosa.)

DECLARE @loginNameToDrop sysname SET @loginNameToDrop = ''<victim login ID>''; DECLARE sessionsToKill CURSOR FAST_FORWARD FOR SELECT session_id FROM sys.dm_exec_sessions WHERE login_name = @loginNameToDrop OPEN sessionsToKill DECLARE @sessionId INT DECLARE @statement NVARCHAR(200) FETCH NEXT FROM sessionsToKill INTO @sessionId WHILE @@FETCH_STATUS = 0 BEGIN PRINT ''Killing session '' + CAST(@sessionId AS NVARCHAR(20)) + '' for login '' + @loginNameToDrop SET @statement = ''KILL '' + CAST(@sessionId AS NVARCHAR(20)) EXEC sp_executesql @statement FETCH NEXT FROM sessionsToKill INTO @sessionId END CLOSE sessionsToKill DEALLOCATE sessionsToKill PRINT ''Dropping login '' + @loginNameToDrop SET @statement = ''DROP LOGIN ['' + @loginNameToDrop + '']'' EXEC sp_executesql @statement


Si sabe a qué base de datos se conectarán, puede establecer la base de datos en modo de usuario único, con una reversión inmediata, que eliminará sus sesiones.


ALTER DATABASE [DATABASE_NAME] SET SINGLE_USER WITH ROLLBACK IMMEDIATE

como dijo SqlACID, o puede encontrar todos los procesos y eliminar uno a la vez y luego eliminar al usuario