Service Broker和数据库所有权不匹配问题

3
我有一个SQL Server 2008 R2实现,打开了Service Broker,用于运行在同一台服务器上的.Net/IIS网站。application_startup事件触发时不会抛出错误,但是日志每秒都会记录以下信息:“[dbo].[SqlQueryNotificationStoredProcedure-e6946263-93b8-445e-9d92-6fbd49a4b089]在队列”XXXXXX.dbo.SqlQueryNotificationService-e6946263-93b8-445e-9d92-6fbd49a4b089”上运行时输出以下内容:‘主数据库中记录的数据库所有者SID与数据库‘XXXXXXX’中记录的数据库所有者SID不同,您应该使用ALTER AUTHORIZATION语句重置数据库‘XXXXXXX’的所有者以纠正此情况。’ 此外,Service Broker未正确发送消息(对于SqlCacheDependency)-基本上不起作用。我运行了以下查询,并确定存在所有权不匹配的问题:
SELECT
    SUSER_SNAME(d.owner_sid) AS OwnerName
    ,d.owner_sid AS OwnerSID
    ,dp.sid AS DboUserSID 
    ,SUSER_SNAME(dp.sid) AS DboUserMapping
FROM sys.databases AS d
JOIN sys.database_principals AS dp ON
    dp.name = 'dbo'
WHERE d.database_id = DB_ID();

所有者名称:usrAAAAA

所有者SID:0xAAAAA

DboUserMapping:sa

DboUserSID:0x01

我看到的大多数地方都建议我使用ALTER AUTHORIZATION显式地将“sa”设置为数据库所有者。但是,我不确定它应该设置为sa还是usrAAAAA,也不确定是否会有任何可能的影响(我可能会破坏什么其他东西吗?如果有的话)。

对此的任何帮助将不胜感激。

1个回答

2
将数据库所有者设置为“sa”最有可能不会引起其他问题,但是这可能会存在一些安全相关的问题,如此处所述:are there reasons I should not set my db owner to sa?
此外,请注意,根据您的应用程序要求和账户使用方式,如果将“usrAAAAA”作为dbo删除,则可能需要将其作为用户添加回DB,并且您可能还需要授予权限(例如'db_owner')。 如果是这种情况,并且您已将数据库设置为TRUSTWORTHY(通常由服务代理相关用途要求),则可能应该将所有者设置为“usrAAAAA”,然后尝试使其工作。

非常感谢。在这个例子中,必须要理清谁被报告为“所有者”。有没有办法确定应该使用哪一个作为 ALTER AUTHORIZATION 的目标? - mrmillsy
这完全取决于应用程序、它对数据库的使用以及您组织的安全标准。不过,一个开始的地方是回答这个问题:为什么之前设置为“usrAAAA”? - RBarryYoung
我以为"这取决于情况"会是答案:o) 不确定为什么设置为usrAAAA,但我猜测usrAAAA最初创建了数据库。 - mrmillsy
除了在TRUSTWORTHY数据库中设置sa存在安全问题外,我还应该寻找其他地方以确定更改所有者是否会导致故障?如果我显得幼稚,请谅解。 - mrmillsy
1
是的,使用数据库的应用程序可能需要使用/要求登录为该数据库的dbo。(如果是这样,通常可以通过将它添加为用户并赋予'db_owner'权限来解决,就像我之前所说的那样)。 - RBarryYoung
这很有道理,我现在明白了风险。非常感谢。 - mrmillsy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接