Drop SQL login even while logged in

前端 未结 6 1376
感动是毒
感动是毒 2021-02-05 01:25

When dropping a SQL Server 2008 login as part of integration test execution I sometimes get the following error:

System.Data.SqlClient.SqlException: Cou

6条回答
  •  春和景丽
    2021-02-05 01:28

    OK, here's the script I came up with, which worked for me. Note that you need to be a member of the processadmin server role to find and kill the connection and a member of securityadmin to drop the login. (Of course, sysadmin can do anything.)

    DECLARE @loginNameToDrop sysname
    SET @loginNameToDrop = '';
    
    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
    

提交回复
热议问题