EMP*_*EMP 33 sql sql-server sql-server-2008
在作为集成测试执行的一部分删除SQL Server 2008登录时,我有时会收到以下错误:
System.Data.SqlClient.SqlException:无法在用户当前登录时删除登录"SomeTestUser".
我不在乎它是否已登录 - 我仍然想放弃它.最简单的方法是什么?
EMP*_*EMP 50
好的,这是我提出的脚本,对我有用.请注意,您需要成为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
Run Code Online (Sandbox Code Playgroud)
在主数据库上的SqlServer Studio中.
使用命令sp_who2列出已打开的会话.
在列表中找到您的用户的spid - 可能有多个 - 例如999
使用kill和spid来关闭所有会话,例如:kill 999
然后DROP LOGIN [用户]
小智 7
通过识别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
Run Code Online (Sandbox Code Playgroud)
现在,您只需使用 sql server management studio 选项执行以下查询(或)即可删除登录名。
DROP LOGIN 'test'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26952 次 |
| 最近记录: |