数据库所有者之一已被删除,并在 sql server 中更改了相应的属性

5 sql-server-2005 sql-server-2008 sql-server sql-server-2008-r2 sql-server-2012

2013 年 12 月,一个名为 user1 的用户在 SQL 2008 上创建了一个数据库。今天,我们将从服务器中删除该用户(/所有者)。那么数据库的所有者属性将显示什么?

And*_*ies 10

您必须先更改该用户拥有的每个数据库的所有权,然后才能删除该用户。

在此处输入图片说明

使用 SSMS 或您可以使用 T-SQL 更改所有权

use database_name
EXEC sp_changedbowner 'newowner'
Run Code Online (Sandbox Code Playgroud)

以下查询允许您查询特定登录名拥有的所有数据库。

use master
select database_id, name, suser_sname(owner_sid) from sys.databases where suser_sname(owner_sid) = 'logintoremove'
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用此信息批量更新所有权。

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
Run Code Online (Sandbox Code Playgroud)