web-dev-qa-db-ja.com

SQL Server 2008 R2ログインを削除できません

数日前にSQL Serverログインを作成しました。今、私は同じものを削除する必要があります。そこで、SQL Server Management Studio => Security => Loginsに移動して、削除するログインを選択しました。それは言う情報メッセージを表示します

サーバーログインを削除しても、ログインに関連付けられているデータベースユーザーは削除されません。プロセスを完了するには、各データベースのユーザーを削除します。最初にスキーマの所有権を新しいユーザーに譲渡する必要がある場合があります。

このメッセージを無視して、削除プロセスを確認すると、次のような致命的なエラーが発生します。

ログイン「iis_login」のドロップに失敗しました。 (Microsoft.SqlServer.Smo)

Transact-SQLステートメントまたはバッチの実行中に例外が発生しました。 (Microsoft.SqlServer.ConnectionInfo)

このログインは1個のジョブの所有者です。ログインを削除する前に、これらのジョブを削除または再割り当てする必要があります。 (Microsoft SQL Server、エラー:15170)

ログインによって所有されているジョブ(上記のメッセージによる)があるときに、ログインを削除するにはどうすればよいですか。

よろしく、Nirvan。

8
Nirvan

多くのジョブがあり、このログインがどのジョブを所有しているかがわからない場合、次のクエリはそれらが所有するジョブの名前を通知します。

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';
13
Adam Wenger

ジョブの所有者を別のログインに設定する必要があります。ジョブのプロパティを見ると、所有者が誰であるかがわかります。これを別のログインに変更するだけです。

ジョブの所有者を変更する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
2
Thomas Stringer