Drop SQL login even while logged in

Это кажется, что у Вас уже был загрузчик Windows на одном диске, и когда Вы установили Ubuntu, принял решение установить личинку на том же диске и никогда не помещать загрузчик на второй диск. Если Вы хотите отложить загрузчик Windows, необходимо загрузить CD установки Windows, войти в консоль восстановления и использовать эти FIXMBR команда.

33
задан EMP 11 February 2011 в 03:11
поделиться

6 ответов

В SqlServer Studio на главной базе данных.

Используйте команду sp_who2 для просмотра списка открытых сессий.

В списке найдите спид для вашего пользователя - их может быть несколько - например, 999

Используйте kill и spid для закрытия всех сеансов, например: kill 999

Затем DROP LOGIN [theuser]

8
ответ дан 27 November 2019 в 18:03
поделиться

Если вы знаете, к какой базе данных они будут подключены, вы можете установить базу данных в однопользовательский режим с немедленным откатом, который прекратит их сеансы.

2
ответ дан 27 November 2019 в 18:03
поделиться

Это не всегда возможно, но я только что перезапустил SQL-сервер из служб. Это очистило все открытые связи.

3
ответ дан 27 November 2019 в 18:03
поделиться
ALTER DATABASE [DATABASE_NAME]
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE

как сказал SqlACID, или вы можете найти все процессы и убить по одному за раз, а затем удалить пользователя

2
ответ дан 27 November 2019 в 18:03
поделиться

Пользователь может быть удален после прекращения сеанса, идентифицируя session_id пользователя.

SELECT session_id
FROM sys.dm_exec_sessions
WHERE login_name = 'test'

KILL 69  --69 is session_id here, you may get different id

Теперь вы можете удалить имя входа, просто выполнив приведенный ниже запрос (или) с помощью параметров студии управления сервером sql.

DROP LOGIN 'test'
4
ответ дан 27 November 2019 в 18:03
поделиться

Хорошо, вот сценарий, который я придумал, который работал для меня. Обратите внимание, что вам нужно быть участником серверной роли processadmin , чтобы найти и уничтожить соединение, и членом securityadmin , чтобы сбросить имя входа. (Конечно, сисадмин может делать все что угодно.)

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
50
ответ дан 27 November 2019 в 18:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: