只是想知道是否有一些 T-SQL 允许我将用户分配为 SQL Server 数据库的所有者(如果它还没有所有者)?
我们在客户设置中收到以下错误:
无法作为数据库主体执行,因为主体“dbo”不存在,无法模拟此类主体,或者您没有权限
这是因为数据库没有分配的所有者。因此,我们希望获得一个脚本以集成到产品中,该脚本将检查是否有分配的所有者,如果没有,则运行以下内容:
EXEC sp_changedbowner [current]
只是想知道是否有一些 T-SQL 允许我将用户分配为 SQL Server 数据库的所有者(如果它还没有所有者)?
我们在客户设置中收到以下错误:
无法作为数据库主体执行,因为主体“dbo”不存在,无法模拟此类主体,或者您没有权限
这是因为数据库没有分配的所有者。因此,我们希望获得一个脚本以集成到产品中,该脚本将检查是否有分配的所有者,如果没有,则运行以下内容:
EXEC sp_changedbowner [current]
您应该将所有者更改为'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],