无法删除SQL Server 2008 R2登录


8

几天前,我已经创建了一个SQL Server登录名。现在,我需要删除相同的内容。因此,我进入了SQL Server Management Studio =>安全=>登录名,并选择了要删除的登录名。它显示一条信息性消息,内容为

删除服务器登录名不会删除与登录名关联的数据库用户。要完成此过程,请删除每个数据库中的用户。可能有必要先将模式的所有权转让给新用户。

忽略此消息,当我确认删除过程时,出现致命错误,提示:

登录“ iis_login”的删除失败。(Microsoft.SqlServer.Smo)

执行Transact-SQL语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo)

此登录名是1个工作的所有者。您必须先删除或重新分配这些作业,然后才能删除登录名。(Microsoft SQL Server,错误:15170)

当登录拥有所有作业(根据以上消息)时,如何删除登录。

问候,尼尔文。


您必须先更改作业的所有权或删除作业,然后才能删除登录名。
亚当·温格,

Answers:


13

如果您有许多作业,并且不知道此登录名拥有哪个作业,则此查询将告诉您它们拥有的作业的名称:

SELECT j.name
FROM msdb.dbo.sysjobs AS j
INNER JOIN sys.syslogins AS l ON j.owner_sid = l.sid
WHERE l.name = 'loginYouWantToDelete'

找到作业后,可以使用以下命令将其删除sp_delete_job:(来自MSDN)

EXEC msdb.dbo.sp_delete_job
    @job_name = N'JobToDelete';

我现在看到与您的查询作业。这是Asp.Net创建的用于管理其会话的工作。我已经删除了ASP.net用于管理会话的数据库。所以现在我想删除该作业。不幸的是,我正在运行Management Studio的Express版本,并且在对象资源管理器中没有列出SQLServer Agent。关于如何删除作业的任何建议?

1
我更新了答案,以包括如何删除作业。
亚当·温格

非常感谢亚当。删除作业并成功登录。

没问题,很高兴我能提供帮助。
亚当·温格

2

您需要将作业的所有者设置为其他登录名。如果查看作业的属性,您将看到谁是他们的所有者。您所要做的就是将其更改为另一个登录名。

这是更改作业所有者的T-SQL:

use msdb
go

exec sp_update_job @job_name= 'Your Job Name', 
@owner_login_name= 'Your New Job Owner'
go

对于要映射到登录名的数据库用户,如果要保留数据库用户及其安全上下文,只需对他们执行以下操作:

alter user YourDbUser 
with login = TheLoginThatYouWantTheUserToBeMappedTo

+1可帮助您重新映射用户并获得良好的答复。鲨鱼干得不错,就像往常一样:)
亚当·温格

@AdamWenger谢谢!我喜欢您的查询,可以找到登录名所拥有的工作。为此+1!
Thomas Stringer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.