【问题标题】:what does 'run the ASP.NET worker process with dbo privileges' mean?“以 dbo 权限运行 ASP.NET 工作进程”是什么意思?
【发布时间】:2010-01-13 15:06:11
【问题描述】:

我在使用 Wicked Code 文章实现 SqlSiteMapProvider 时遇到问题。我正在使用 VB.NET 和 SQL Server 2008 - OnSiteMapChanged 事件没有触发(SqlDepdencyCache 似乎根本不起作用)。

文章指出“您还需要以 dbo 权限运行 ASP.NET 工作进程,以便 SQL Server 2005 缓存依赖项自动工作。)”

我不明白这是什么意思。我知道 ASPNET 用户帐户是什么,它运行 aspnet_wp.exe,据我所知,这基本上是 ASP.NET 运行时。我知道 SQL 上的 DBO privs 是什么。但是我的 SQL 和 web 服务器在不同的机器上,而且 ASPNET 不是域帐户。尝试简单地让 SqlDepdencyCache 工作似乎很疯狂,我很难相信每个人都在这样做?

有人知道我在这里缺少什么吗?

非常感谢

编辑:我找到了我的问题!!!在我的存储过程中设置 NOCOUNT 导致它!请注意,MSDN 文档中没有此内容!!!!

【问题讨论】:

  • 您不能在对您的 SQL 服务器具有 dbo 权限的域帐户下运行 ASP.Net 工作进程吗?

标签: asp.net sql-server iis


【解决方案1】:

您的工作进程身份需要更改为域用户或 Web 和数据库服务器上具有匹配用户名/密码的用户。 SQL Server 还需要启用 Windows 身份验证(或混合身份验证)。

IIS 5(Windows XP/2000)下,需要修改machine.config文件中的ASP.NET Process Identity

IIS 6 / 7 (Windows Vista/7/2003/2008/R2) 下,您应该只能修改应用程序池标识。如果这不起作用,请在您的 web.config 中启用 <identity impersonate="true" />

【讨论】:

    【解决方案2】:

    SqlDependencyCache 使用 SqlDependency 并且 SqlDependency 在运行时在您的数据库中部署一组服务、队列和存储过程,作为其基础架构的一部分。你可以阅读这篇文章,了解更多细节The Mysterious Notification

    当您创建站点地图提供程序时,您需要提供一个连接字符串。此连接字符串指定 SQL 登录名和密码,或者指定应使用 SSPI(或受信任或集成)身份验证。提供用户名和密码后,该用户将用于登录您的应用程序数据库(ASP 数据库)。使用 SSPI 时,使用 ASP 线程标识(应用程序池标识或模拟用户标识)进行连接。无论最终使用哪种登录名,此登录名都必须具有部署 SqlDependency 基础结构所需的权限(创建队列、创建服务、创建存储过程)。最简单的方法是简单地将这个登录的用户设置为 db_owner 角色的数据库成员(这是文章所说的“dbo 权限”的正确措辞)。

    因此,根据 yoru 连接字符串、您的应用程序池标识和模拟设置,必须将与地图提供者使用的登录名对应的数据库用户添加到 db_owner 角色。我无法告诉你需要做什么,因为这完全取决于上面列举的可变因素。

    【讨论】:

    • 感谢大家的信息。我已经让 asp.net 工作进程以我自己的名字运行,这是一个对站点地图数据库具有 dbo 权限的域帐户。我什至还尝试使用 SSPI 作为站点地图连接字符串。尽管如此,无论如何,OnSiteMapChanged 事件永远不会触发,因此站点地图保持陈旧状态,直到 ASP.NET 决定使我的 SqlSiteMapProvider(继承自 StaticSiteMapProvider)上的 _root 成员无效。我在这件事上失去了理智 - 不明白似乎被广泛使用的东西我无法开始工作,没有其他人有过同样的事情
    • 您必须了解 SqlDependency 的工作原理,正如我在链接 rusanu.com/2006/06/17/the-mysterious-notification 中解释的那样。然后您就可以对其进行故障排除。 SqlDendepndy.Start 基础设施是否已部署?查询是否被订阅?通知会被触发吗?通知是否送达?你看过 sys.dm_qn_subscriptions 吗?你看过 sys.transmission_queue 吗?仅仅因为某些文章说“您必须是 dbo”(这是错误的,顺便说一句),并不意味着 您的 问题是访问问题。
    • 感谢莱姆斯。我将浏览该页面。您知道 SQL 2008 是否有任何变化?因为这就是我们现在所做的......再次感谢!
    猜你喜欢
    • 2013-11-21
    • 2019-01-12
    • 1970-01-01
    • 2015-09-07
    • 2015-12-30
    • 2013-10-10
    • 1970-01-01
    • 2010-12-02
    • 2017-05-30
    相关资源
    最近更新 更多