3

我有一个 SQL Server 2008 R2 实现,为在同一个盒子上运行的 .Net/IIS 网站打开了 Service Broker。

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

[dbo].[SqlQueryNotificationStoredProcedure-e6946263-93b8-445e-9d92-6fbd49a4b089]'在队列'XXXXXX.dbo.SqlQueryNotificationService-e6946263-93b8-445e-9d92-6fbd49a4b089'上运行输出以下内容:'数据库所有者SID记录在master 数据库与数据库“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

OwnerSID: 0xAAAAA

DboUserMapping: 萨

DboUserSID: 0x01

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

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

4

1 回答 1

2

将数据库所有者设置为“sa”是最有可能在不引起其他问题的情况下工作的方法,但它可能存在一些与安全相关的问题,如下所述:是否有理由不将我的数据库所有者设置为 sa?.

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

于 2013-02-06T16:29:12.823 回答