Невозможно удалить имя входа SQL Server 2008 R2

8

Я создал логин SQL Server несколько дней назад. Теперь мне нужно удалить то же самое. Поэтому я зашел в SQL Server Management Studio => Security => Logins и выбрал логин, который я хочу удалить. Он отображает информационное сообщение, которое говорит

Удаление имен входа на сервер не удаляет пользователей базы данных, связанных с именами входа. Для завершения процесса удалите пользователей в каждой базе данных. Может потребоваться сначала передать право собственности на схемы новым пользователям.

Игнорируя это сообщение, когда я подтверждаю процесс удаления, я получаю фатальную ошибку, которая говорит

Ошибка сброса при входе в систему 'iis_login'. (Microsoft.SqlServer.Smo)

Возникла исключительная ситуация при выполнении оператора или пакета Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)

Этот логин является владельцем 1 вакансии. Вы должны удалить или переназначить эти задания, прежде чем вход в систему может быть удален. (Microsoft SQL Server, ошибка: 15170)

Как удалить логин, если есть рабочие места (согласно сообщению выше), принадлежащие логину.

С уважением, Нирван.


источник
Прежде чем вы сможете удалить логин, вам нужно будет сначала изменить владельца собственности или удалить работу.
Адам Венгер

Ответы:

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 для управления сессиями. Так что теперь я хотел бы удалить эту работу. К сожалению, я использую Express Management версию Management Studio, и в нем нет агента SQLServer, указанного в обозревателе объектов. Любой совет о том, как мне удалить работу?
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 за это!
Томас Стрингер