web-dev-qa-db-ja.com

データベース所有者の1人が削除され、SQLサーバーで対応するプロパティが変更されました

2013年12月に、user1という名前のユーザーによってデータベースがSQL 2008で作成されました。今日、サーバーからそのユーザー(/ owner)を削除します。データベースショーの所有者プロパティは何になりますか?

5
user1254579

ユーザーを削除する前に、そのユーザーが所有する各データベースの所有権を変更する必要があります。

enter image description here

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
10
Andy Davies

以前の答えが述べているように、あなたはメッセージを受け取ります:

ログイン 'userName'は1つ以上のデータベースを所有しています。ログインを削除する前に、データベースの所有者を変更してください。

sp_changedbownerは非推奨になり( link を参照)、したがって削除されます。そのため、これの代わりに、ログインを削除する前に次を使用して所有者を変更する必要があります。

ALTER AUTHORIZATION ON DATABASE::DBname TO newlogin

これを実行したら、ログインを削除できます。

ALTER AUTHORIZATION構文はここで見ることができます:

ALTER AUTHORIZATION

3
steoleary

古い投稿ですが、他の人の役に立つかもしれないと思いました。

私の場合、すべてのデータベースの所有権を削除しましたが、それでもユーザーを削除できませんでした。

ユーザーがいくつかのSQLジョブの所有者であることが判明しました。したがって、SQLジョブから所有権を確認し、データベースからDBOを削除します。

0
gusmundo