我在同一个盒子上运行的.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”显式设置为数据库所有者。但是,我不确定它是否应该设置为sa
或usrAAAAA
,并且我不确定是否存在任何可能的影响(如果有的话,我还可以打破其他什么)。
对此的任何帮助将不胜感激。
答案 0 :(得分:2)
将数据库所有者设置为“sa”是最有效的工作而不会导致其他问题,但可能存在一些与安全性相关的问题,如下所述:are there reasons I should not set my db owner to sa?。
另请注意,根据您的应用程序要求以及帐户的使用方式,如果您将“usrAAAAA”删除为dbo,则可能需要将其作为用户重新添加到数据库中,您可能还需要给他们权限(例如'db_owner')。如果是这种情况,并且您已将数据库设置为TRUSTWORTHY
(这与Service Broker相关的用法通常是必需的),那么您应该将所有者设置为“usrAAAAA”,并尝试使其工作。