我有一个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
,也不确定是否会有任何可能的影响(我可能会破坏什么其他东西吗?如果有的话)。
对此的任何帮助将不胜感激。