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

时间:2013-02-06 15:22:59

标签: sql sql-server service-broker ownership

我在同一个盒子上运行的.Net / IIS网站上启用了Service Broker的SQL Server 2008 R2实现。

当global.asax application_startup事件触发时,它不会抛出错误,但事件日志每秒都会被发送垃圾邮件:

  

[DBO] [SqlQueryNotificationStoredProcedure-e6946263-93b8-445e-9d92-6fbd49a4b089]”   在队列上运行   'XXXXXX.dbo.SqlQueryNotificationService-e6946263-93b8-445e-9d92-6fbd49a4b089'   输出以下内容:'数据库所有者SID记录在主服务器中   数据库与数据库中记录的数据库所有者SID不同   'XXXXXXX'。您应该通过重置所有者来纠正这种情况   数据库'XXXXXXX'使用ALTER AUTHORIZATION语句。'

此外,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

     

OwnerSID:0xAAAAA

     

DboUserMapping:sa

     

DboUserSID:0x01

我见过的大多数地方都建议我应该使用ALTER AUTHORIZATION将“sa”显式设置为数据库所有者。但是,我不确定它是否应该设置为sausrAAAAA,并且我不确定是否存在任何可能的影响(如果有的话,我还可以打破其他什么)。

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

1 个答案:

答案 0 :(得分:2)

将数据库所有者设置为“sa”是最有效的工作而不会导致其他问题,但可能存在一些与安全性相关的问题,如下所述:are there reasons I should not set my db owner to sa?

另请注意,根据您的应用程序要求以及帐户的使用方式,如果您将“usrAAAAA”删除为dbo,则可能需要将其作为用户重新添加到数据库中,您可能还需要给他们权限(例如'db_owner')。如果是这种情况,并且您已将数据库设置为TRUSTWORTHY(这与Service Broker相关的用法通常是必需的),那么您应该将所有者设置为“usrAAAAA”,并尝试使其工作。