“用dbo权限运行ASP.NET工作进程”是什么意思?

时间:2010-01-13 15:06:11

标签: asp.net sql-server iis

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

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

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

任何人都知道我在这里缺少什么?

非常感谢

编辑:我发现了我的问题!在我的存储PROC内部设置NOCOUNT导致它!请注意,因为这在MSDN文档中无处可读!!!!

2 个答案:

答案 0 :(得分:2)

您的工作进程标识需要更改为域用户或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" />

答案 1 :(得分:1)

SqlDependencyCache使用SqlDependency和SqlDependency在运行时将数据库中的一组服务,队列和存储过程部署为其基础结构的一部分。您可以阅读本文,详细了解实际发生的事情The Mysterious Notification

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

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