sql-server - 如果数据库没有所有者,T-SQL 将所有者更改为当前用户
问题描述
只是想知道是否有一些 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],
推荐阅读
- r - 调查加权 t 检验未显示 r 平均值的正确差异?
- azure-active-directory - 在 Azure AD B2C 自定义策略中自定义用户体验
- reactjs - React Async 选择如何动态创建
- python - 谁能帮我在 django 中创建更新视图?
- javascript - 如何过滤js中的对象数组?
- java - 关于 java.lang.NoClassDefFoundError: quickfix/MessageStoreFactory 的问题
- robotframework - 带有 RIDE 的循环机器人框架
- c# - 验证 EWS 应用程序 - 下一步是什么
- assembly - 如何从此加密创建解密
- sql - 匹配 h2/postgres 中的文字百分比?