首页 > 解决方案 > 如果数据库没有所有者,T-SQL 将所有者更改为当前用户

问题描述

只是想知道是否有一些 T-SQL 允许我将用户分配为 SQL Server 数据库的所有者(如果它还没有所有者)?

我们在客户设置中收到以下错误:

无法作为数据库主体执行,因为主体“dbo”不存在,无法模拟此类主体,或者您没有权限

这是因为数据库没有分配的所有者。因此,我们希望获得一个脚本以集成到产品中,该脚本将检查是否有分配的所有者,如果没有,则运行以下内容:

EXEC sp_changedbowner [current]

在此处输入图像描述

标签: sql-serverpermissionsdbo

解决方案


您应该将所有者更改为'sa',而不是当前用户。

这将生成更改 TSQL 以执行您想要的操作:

SELECT
    sqltorun = 'ALTER AUTHORIZATION ON DATABASE::' + name + ' TO [sa];'
FROM    
    sys.databases d
WHERE
   (
    owner_sid IS NULL 
    OR SUSER_SNAME(owner_sid) != N'sa'
    OR owner_sid IN 
       (
          select sid
          from sys.database_principals 
          where type in ('G','S','U')
          and sid not in (select sid from sys.server_principals)
          and name not in ('guest')
       )
   )
   AND name IN ('Mydbname1', 'mydbname2');

您需要将其输出作为动态 SQL 执行。

注意:可能需要QUOTE_NAME()在数据库名称上使用。

这是 SSMS 数据库属性表单检索数据库所有者的方式:

SELECT ISNULL(suser_sname(dtb.owner_sid),'''') AS [Owner],

推荐阅读