数日前にSQL Serverログインを作成しました。今、私は同じものを削除する必要があります。そこで、SQL Server Management Studio => Security => Loginsに移動して、削除するログインを選択しました。それは言う情報メッセージを表示します
サーバーログインを削除しても、ログインに関連付けられているデータベースユーザーは削除されません。プロセスを完了するには、各データベースのユーザーを削除します。最初にスキーマの所有権を新しいユーザーに譲渡する必要がある場合があります。
このメッセージを無視して、削除プロセスを確認すると、次のような致命的なエラーが発生します。
ログイン「iis_login」のドロップに失敗しました。 (Microsoft.SqlServer.Smo)
Transact-SQLステートメントまたはバッチの実行中に例外が発生しました。 (Microsoft.SqlServer.ConnectionInfo)
このログインは1個のジョブの所有者です。ログインを削除する前に、これらのジョブを削除または再割り当てする必要があります。 (Microsoft SQL Server、エラー:15170)
ログインによって所有されているジョブ(上記のメッセージによる)があるときに、ログインを削除するにはどうすればよいですか。
よろしく、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';
ジョブの所有者を別のログインに設定する必要があります。ジョブのプロパティを見ると、所有者が誰であるかがわかります。これを別のログインに変更するだけです。
ジョブの所有者を変更する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