2013年12月に、user1という名前のユーザーによってデータベースがSQL 2008で作成されました。今日、サーバーからそのユーザー(/ owner)を削除します。データベースショーの所有者プロパティは何になりますか?
ユーザーを削除する前に、そのユーザーが所有する各データベースの所有権を変更する必要があります。
SSMSを使用して所有権を変更するか、T-SQLを使用できます
use database_name
EXEC sp_changedbowner 'newowner'
次のクエリでは、特定のログインが所有するすべてのデータベースをクエリできます。
use master
select database_id, name, suser_sname(owner_sid) from sys.databases where suser_sname(owner_sid) = 'logintoremove'
その後、この情報を使用して、所有権を一括更新できます。
use master
DECLARE @name VARCHAR (50) -- database name
DECLARE @oldOwner VARCHAR (50)
DECLARE @newOwner VARCHAR (50)
SET @oldOwner = 'oldownerlogin'
SET @newOwner = 'newownerlogin'
BEGIN
DECLARE db_cursor CURSOR FOR
select name from sys.databases where suser_sname(owner_sid) = @oldOwner
END
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN
EXEC(
'USE '+@name +';
EXEC sp_changedbowner ''' +@newOwner+ '''
' )
END
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
以前の答えが述べているように、あなたはメッセージを受け取ります:
ログイン 'userName'は1つ以上のデータベースを所有しています。ログインを削除する前に、データベースの所有者を変更してください。
sp_changedbownerは非推奨になり( link を参照)、したがって削除されます。そのため、これの代わりに、ログインを削除する前に次を使用して所有者を変更する必要があります。
ALTER AUTHORIZATION ON DATABASE::DBname TO newlogin
これを実行したら、ログインを削除できます。
ALTER AUTHORIZATION
構文はここで見ることができます:
古い投稿ですが、他の人の役に立つかもしれないと思いました。
私の場合、すべてのデータベースの所有権を削除しましたが、それでもユーザーを削除できませんでした。
ユーザーがいくつかのSQLジョブの所有者であることが判明しました。したがって、SQLジョブから所有権を確認し、データベースからDBOを削除します。